SMS Checker 0.76

25/9/01

by Maxim

maxim@mwos.cjb.net ***see my note in section 7***
http://smschecker.mwos.cjb.net

*** You should read this in a text editor which supports word wrapping, or by using the readme.txt button in the program ***

This is a program that identifies Master System, Mark III, Game Gear, SG-1000, SC-3000, Othello Multivision and ColecoVision roms, and Super Control Station disk images. It can then rename them, delete any duplicates, zip them individually, remove unnecessary headers and footers, trim overdumps, and patch bad dumps, unzipping and re-zipping if necessary.

It uses the same names as Meka, Bock's excellent emulator for all of the systems mentioned above.

It does not use data from Cowering's GoodTools. All information is independently compiled and verified by me.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Contents
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

1. Quick start
2. Slow start
3. A guide to the toolbar
  3.1 Format dropdown list
  3.2 Scan button
  3.3 Stop button
  3.4 Include subfolders
  3.5 Work in background
  3.6 Clear list
  3.7 Results
  3.8 What you don't have
  3.9 Rename roms
  3.10 Delete duplicates
  3.12 Fix fixable roms
  3.12 Sort roms
  3.13 Zip unzipped roms
  3.14 Unzip zipped roms
  3.15 Log
  3.16 Readme.txt
  3.17 Options
4. Extra features
  4.1 Favourites
  4.2 Opening folders
  4.3 Rom properties
  4.4 Excluding roms from operations
5. Statistics
6. History
7. Contact details
  7.1 What to do if you have an unknown rom
8. FAQ
  8.1 Things that look like bugs but aren't
9. Source code
9. Extra rom data files
10. Disclaimer
11. Credits
12. Ending sequence



:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 1. Quick start
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Unzip everything in the zip to any folder.

Usage should be obvious - navigate to a folder with roms and click on Scan. Then use the buttons to do more stuff.



:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 2. Slow start
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Unzip all files in the zip to any folder.

Run SMS Checker.exe. If you like, you can pass a folder on the commandline.

Choose the format you wish to look for from the combobox at the top-left of the window.

Choose a folder containing roms in the tree on the left. If they are zipped then it must be the way Meka likes them - one per zip. Alternatively, choose a folder with roms in its subfolders and click on the Include subfolders button so that it is pushed down.

Click on the Scan button. Wait for the program to finish scanning, or click on the Stop button to abort scanning.

The names are those from the latest version of Meka, except they have been changed so that they are valid filenames, without extended characters such as accented letters. I've also added A, B and C designations for some alternate versions.

If you have a rom I don't then it will show up with the name "Unknown". If you have such a rom then please see section 7.1.

You can navigate to another folder and scan again, if you keep your roms in different places.

When you've finished scanning, you can click on the various buttons to either report on your roms or do things to them - see section 3.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3. A guide to the toolbar
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

From left to right:

Format dropdown list
--------------------
Scan button (magnifying glass)
Stop button (red circle)
--------------------
Include subfolders (magnifying glass over folder)
Work in background button (gauge)
Clear list button (blank sheet)
--------------------
Results button (magnifying glass over sheet)
What you don't have button (lightning bolt)
--------------------
Rename roms (rename box over sheet)
Delete duplicates (red cross over sheet)
Fix fixable roms (red +)
Sort roms (3 stacked sheets)
Zip unzipped roms (package icon)
Unzip zipped roms (package icon with arrow)
--------------------
Log button (book)
Readme.txt button (blue (i))
Options dropdown button (menu and pointer)

Every button has a popup hint and a statusbar hint to help you get used to their functions. You can turn on button captions in the Options menu but it makes the toolbar very big.

See below for more information on each button.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3.1 Format dropdown list
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Choose which format to scan for from this list. This affects what filename extension(s) the program looks for:

Format                 Extension
Master System/Mark III .sms
Game Gear              .gg
Sega Game 1000/OMV     .sg
Sega Computer 3000     .sc
ColecoVision           .rom/.col
Super Control Station  .sf7

If your roms have different extensions, they will be ignored.

To switch to this at any time, press Alt+F.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3.2 Scan button
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Click on this to scan the folder selected in the tree on the left of the window. See also section 3.4  "Include subfolders".

The program will look for every file in the folder with the extension corresponding to the format chosen (see section 3.1). It will also look for .zip files - it will look in each one to see if it contains a file with the right extension. If it contains more than one rom then all but one will be ignored, much like Meka.

It will calculate a virtually unique number, called a CRC, for every rom and will use this to determine what the rom is. It will then add an entry to the list describing the rom. You can then use the other buttons to report on your roms, or to sort, rename, zip or fix them.

The progress bar at the bottom-right shows the progress through the files in the current folder.

Shortcut key: Alt+S

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3.3 Stop button
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Click on this to stop whatever operation is currently in process.

Shortcut key: Esc

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3.4 Include subfolders
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

When this button is pushed down, and you start a scan, the subfolders of the currently selected folder will also be scanned. When it is not pushed down, subfolders will be ignored.

When subfolders are included, the progress bar will fill once for each folder when scanning.

Shortcut key: Alt+I

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3.5 Work in background
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

When this is pushed down, the program has "Idle" priority, which means it will yield CPU use to other programs; this allows you to perform a scan in the background with minimal slowing down of the rest of your system (disk-intensive operations like loading programs will still be slow). Note that it will make scans take longer too.

Shortcut key: Alt+B

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3.6 Clear list
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Press this to clear the list. This is useful when you have done something to the roms outside the program, such as move or rename files, as it enables you to scan them again without false information appearing. This is bad as the Delete Duplicates button may then delete the only copy of a rom! Also, it is probably faster to clear the lists before re-scanning a folder which you have moved files into.

Shortcut key: Alt+C

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3.7 Results
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Press this button to see a summary of the roms which have been found.

The roms are classified into the following types:

Commercial roms - these are games which were dumped from actual cartridges, cards or disks (depending on the format), which were sold in shops. This also includes unreleased games (eg. GG Yogi Bear) and unofficial games (eg. SMS Tetris).

Homebrew/demos:
These are roms that are completely fan-made. They normally only ever exist in emulated file form. I've included internet-distributed SG-1000 Fudebrowser roms in this category.

Hacks:
These are commercial roms which someone has modified, usually to change some of the graphics, such as the main character sprite. I've not included the Tectoy hacks as they were commercially released.

Translations:
These are commercial roms which someone has modified so that they are in another language (usually Portuguese).

BIOSes:
These are dumps of the chips inside the console which control how they work. They are not games, although the "built-in" games and the Snail Game are contained within them. Meka includes the US and Japanese SMS BIOSes - to see them, turn the power on from the menu while no rom is loaded.

Headered/footered:
Some SMS rom dumpers added data to what was actually on the rom. Some added a 512 byte header, and some added a 64 byte footer containing the game name. Non-SMS roms do not have these headers or footers.

Overdumps:
When a rom is dumped, the dumper scans through the memory locations on the cartridge. If it scans further than what is actually there, it goes back to the start. The result is that the rom data is just repeated several times.

Bad dumps:
Rom dumpers are home-made devices and are not 100% accurate. They frequently return incorrect data. It is good practice to dump a rom several times, until the same data is found several times. However, some roms on the web have not been checked in this way and are incorrect.
Some bad dumps are only slightly incorrect; they appear in the main list as "fixable bad dumps". Some are substantially bad, or there is no good dump to compare them to; they appear in the main list as "unfixable bad dumps". You will be told how many of your bad dumps are fixable.

Wrong extension:
Some roms on the web have the wrong extension. For example, several SG-1000 roms have the .sms extension instead of .sg.

If you have any duplicates, you will be told how many.

This is followed by a summary of how many different roms you have, how many of them are "good" (the first five categories), and how many are "bad" (the last four categories).

There is then a line saying how long all scans for the currently selected format have taken.

If you have any unknown roms, their details will be listed at the bottom. See section 7.1 for more information.

Shortcut key: Alt+R

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3.8 What you don't have
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

This will list all the known "good" roms which haven't been found. It will also tell you this:

 Bad dumps, overdumps, headered and footered roms and roms with the wrong extension have been omitted, since there is no good reason to want them.
 If a name ends in [Demo], [Translation] or [Hack] then... well, you can figure that out yourself.
 Note that there are unreleased roms listed here, so don't be surprised if you can't find them online.
 Variants ([A]/[B]) are also listed, because I can't easily exclude them. If you have one variant then there's no reason to look for the other.
 If you have any headered, footered, overdumped or bad dumps, you should fix them to reduce the size of this list.

I WILL NOT give you unreleased roms. Sorry.

Shortcut key: Alt+D

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3.9 Rename roms
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Press this button to rename every file in the list so its filename matches the name shown in the Name column. If there a file with that name already exists, underscores (_) will be added to the name (eg. "Sonic the Hedgehog_.sms"). If a file already has the name shown, it will not be counted in the number shown in the status bar on completion of this task.

Certain types of roms are given suffixes (bits at the end of their names) so that their names do not clash with the "good" versions:

Type             Suffix
Headered         (h)
Footered         (f)
Overdump         (2x overdump)*
Fixable bad      (2 bad bytes)*
Unfixable bad    (bad dump)
Wrong extension  (change extension to sg)*
Variant          [A], [B], etc

* Example, changes according to rom

Duplicates will not be renamed.

Variants are roms which are the exact same game (sometimes with minor differences, for example Lemmings) but which have different rom data. Some are genuine variants, some are cases where there is no verified good dump so all known dumps are listed as variants. Some variants have information added to their names signifying the difference, for example Speedball.

When a zipfile has a name ending in "(change extension to sg)", for example, you must change the extension of the file inside the zip. If you change the zip filename, the rom will not be recognised by this program and won't work in Meka.

The rename function does not change the name of the file inside a zipfile.

It will perform more than one pass if necessary to minimise the number of filenames with underscores since some will be caused by temporary filename collisions.

Choose "Rename..." from the popup menu when you right-click on selected rom(s) to rename only the selected roms. The toolbar button ignores the selection.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3.10 Delete duplicates
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Press this button to delete every file which is absolutely identical to another which has already been found.

You should not use this function if you are not sure every zipfile contains only one rom. Several SMS Power releases have included more than one rom.

You should also not use this function if you have changed the scanned files in any way outside the program, as it may delete the only copy of a file! If you have not modified the files outside the program, it will never delete the only copy of a file.

Choose "Delete duplicates..." from the popup menu when you right-click on selected rom(s) to delete only the roms in the selection marked as duplicates. The toolbar button ignores the selection.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3.11 Fix fixable roms
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

As explained before, fixable bad dumps are only slightly bad; they can be "patched", correcting the bad bytes. Overdumps can be fixed by trimming them down to the first copy of the data in the file. Headers and footers can also be removed from roms. Roms with the wrong extension can be renamed.

Pressing this button will fix all of your fixable bad dumps, overdumps, headered, footered and wrone extension roms. If zipped, they will be unzipped, fixed and re-zipped - this is slow, taking a few seconds per rom on my computer, compared to a fraction of a second to fix an unzipped rom.

Duplicates will not be fixed.

You may have more duplicates after fixing your roms, as the fixed roms may end up the same as ones you already have.

You will probably want to rename your roms afterwards too.

Wrong-extension roms will usually disappear from the list because they are for another format.

Choose "Fix..." from the popup menu when you right-click on selected rom(s) to fix only the fixable roms in the selection. The toolbar button ignores the selection.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3.12 Sort roms
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

When you click on this button, you will be shown a dialogue once for every variety of rom you have, where you can choose where you want roms of that type moved. If you want to create a folder, first choose the folder to create it in from the tree; then type the name to create in the box below. The Create button will become enabled, and pressing it will create the folder. You should wait a few seconds for it to appear in the list, then you can select it and press OK.

For example, to create a folder called "Hacks" in an existing folder called "c:\Master System roms", choose "c:\Master System roms" in the tree, then edit the text below so it says "c:\Master System roms\Hacks", and press Create.

If you press Cancel, the whole operation will be cancelled.

When you have done this for every rom type, they will be moved accordingly. You can choose the same folder for more than one type of rom if you want to. You can also choose the folder the roms are already in if you wish.

In the event of filename collisions, underscores will be appended as in the Rename operation.

Choose "Sort..." from the popup menu when you right-click on selected rom(s) to sort only the selected roms. The toolbar button ignores the selection.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3.13 Zip unzipped roms
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

If any of your roms are unzipped, pressing this button will:

 Create a new zipfile with the same name as the rom. If a zipfile of than name already exists, underscores will again be added to the name until a unique name is found.
 Add the rom to that zipfile
 Delete the unzipped rom (if the zipfile is successfully created)

Duplicates will not be zipped.

Choose "Zip..." from the popup menu when you right-click on selected rom(s) to zip only the unzipped roms in the selection. The toolbar button ignores the selection.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3.14 Unzip zipped roms
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

If any of your roms are zipped, pressing this button will:

 Unzip every file in the zip to the folder containing the zipfile. Again, underscores will be used to make unique names so no files are ever overwritten. Path data stored in the zip will be ignored.
 Scan any roms (of the currently selected type) or zips extracted.
 Delete the zipfile, if all files were unzipped successfully.

This is of use because by unzipping and then zipping your roms, you can be sure that:

 Every zipfile contains only one rom, so deleting duplicates is safe, and you may have more good roms listed.
 You don't have any unnecessary files (like text files saying where you downloaded the file) in the zips, which may stop Meka being able to open them.
 The rom inside every zip will have the same name as the zip. If you wish to use the renaming function then rename the roms AFTER unzipping and deleting any duplicates, and BEFORE zipping.

Choose "Unzip..." from the popup menu when you right-click on selected rom(s) to unzip only the zipped roms in the selection. The toolbar button ignores the selection.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3.15 Log
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Press this to see the log for the current session. If logging is disabled, so is this button.

Shortcut key: Alt+G

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3.16 Readme.txt
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Pressing this will show this file in the program.

Shortcut key: F1

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 3.17 Options
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Pressing this will show a menu where you can choose some options which affect the program's behaviour:

:: While working > Update list

When selected, roms will appear in the list as they are found, and if possible the list will update as you perform operations on your roms. It will also allow you to scroll the list while the programis working. This will slow the scanning process a little.

:: While working > Highlight added items

This is only available when the previous option is selected.
When selected, added items are highlighted as they are added or worked on, and the list will scroll if necessary so you can see them. This will severely slow the scanning process.

:: After scanning > Beep

When selected, the system "Asterisk" sound will be played when scanning completes.

:: After scanning > Show message box

When selected, a messagebox will appear when scanning completes.

You can only choose one of the above two options, and selecting one that is already selected will deselect both, giving no notification of scan completion.

:: After scanning > Show results

When selected, the Result window will appear at the end of every scan. You can choose this in addition to the previous two options.

:: After an operation > Beep
:: After an operation > Show message box

These are similar to the two above, except they apply to when you rename, delete, sort, fix or zip your roms.

:: Delete files > Permanently
:: Delete files > To the recycle bin

This will affect what happens when you delete your duplicates.

:: Appearance > Font...

Allows you to choose what font is used by the program. Note that it is designed for the default font of Verdana Regular 8pt at a screen DPI of 72. There may be cosmetic problems if you use a different font or screen DPI setting, such as columns not lining up in the Results dialogue. Also, the font used by menus, popup hints and the title bar will not change from the Windows setting.

:: Appearance > Button captions

Toggles captions on the toolbar buttons. When they have captions, they take up much more space but you can see their function more easily.

:: Zip compression

Choose which Zipping method to use when zipping or re-zipping roms:
Super fast - will use minimal compression, which will also require the least CPU power and so is fastest.
Fast - will compress them using a fast method, resulting in files which have fair compression which is fast.
Normal - will use more advanced compression methods, giving better compression which is slower.
Maximum - will use the maximum compression, which is very slow, and gains very little over Normal.

Basically, there are 9 levels of compression available; the above settings correspond to levels 1, 3, 6 and 9.

I benchmarked the methods, by zipping the same 51 SMS roms. These are the results:
Method      Time  Compression
Super fast 13.8s  46.7%
Fast       14.2s  47.6%
Normal     19.1s  49.3%
Maximum    34.5s  49.4%

As you can see, higher settings gain a little compression but take a lot longer (150% longer for 2.5% more compression (equivalent to 6KB on a 256KB rom), comparing the lowest and highest settings). So, overall, you may as well use Super fast compression.

:: Activity logging > Log program's actions

When selected, the program will record what it does and save that to a file when it closes. You might find it useful for finding exactly what it has done (remember, it only did what you told it to!)

:: Activity logging > Append log

When selected, the logs from previous sessions will be kept, and the current session's log will be appended to them when the program closes. This will eventually lead to a very large log file.

:: Check for update

Choose this to check online for updated data files. You need to have an active internet connection for it to work. It is 100% safe, all it does is open a page in your browser with the file dates of your data files and the program version passed with the URL. That page should tell you what updates are available. No personal information is sent, and even if it was, my ISP hosting wouldn't allow me to record it anyway.


Shortcut key (for popup menu): Alt+O



:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 4. Extra features
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 4.1 Favourites
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

If you right-click on the folder tree, a menu will appear. Choosing 'Add to favourites' will add the currently selected folder (not necessarily the one you clicked on) to the bottom of the menu. Clicking on that will open that folder quickly.

There is also an 'Open folder' item in the menu. This will open the currently selected folder in Explorer.

To delete or re-order the items, open SMS Checker.ini which is in the same folder as the program file.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 4.2 Opening folders
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

You can pass a folder to be opened on the commandline.

If you drag a folder onto the window then it will be opened.

If you drag a file onto the window then the folder containing it will be opened.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 4.3 Rom properties
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

If you select one or more roms in the list and right-click on them, a popup menu will appear. Select Properties to get a detailed listing of the selected roms.

If you select a lot of roms (more than 50), a warning will appear, since it will take a long time to process and if you select a very large number (eg. a few hundred) it will cause an error.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 4.4 Excluding roms from operations
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Right-click on one or more selected roms and choose "Remove from list" to remove those roms from the list. This has no effect on the files - it just allows you to remove any files you don't want any operation to affect. Re-scan the folder containing them if you want to get them back on the list.



:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 5. Statistics
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

I currently have the CRCs for:

Fixed-font layout:
                  ---------Format--------
                  SMS  GG  SG  SC SF7 Col
Commercial roms:  390 334  50   8   2 184
Homebrew/demos:    42  18  13   0   2  33
Hacks:             50   6   0   0   0   4
Translations:      39  25   0   0   0   0
BIOSes              9   1   0   0   0   3
Head/footered:     86   1   0   0   0   2
Overdumps:         53   7   0   0   0  10
Fixable bad:       74  26   1   0   0  18
Unfixable bad:     21  17   1   0   0  13
Wrong extension:   15   5   5  44   0   0
-----------------------------------------
Total:            779 440  70  52   4 267

In-program layout (font-dependent):
			-----------------------Format-------------------------------
			SMS	GG	SG	SC	SF7	Colecovision
Commercial roms:	390	334	50	8	2	184
Homebrew/demos:	42	18	13	0	2	33
Hacks: 			50	6	0	0	0	4
Translations: 		39	25	0	0	0	0
BIOSes:		9	1	0	0	0	3
Head/footered:		86	1	0	0	0	2
Overdumps: 		53	7	0	0	0	10
Fixable bad dumps	74	26	1	0	0	18
Unfixable bad dumps 	21	17	1	0	0	13
Wrong extension: 	15	5	5	44	0	0
---------------------------------------------------------------------------------
Total: 			779	440	70	52	4	267

That's 1612 roms!

This includes every rom known to:
GoodSMS V0.999.2 (BETA)
GoodGG V0.999.3 (BETA)
GoodCol v0.999.4 (BETA)

And quite a lot more.

These were the latest GoodTools available last time I checked.



:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 6. History
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

0.1 2?/7/00
  Only reads raw data
  320ish SMS roms in lists
  Some mistakes in lists
0.1a 31/7/00
  Fixed lists
  Added ~40 roms
  Added popup hints for clipped text
0.2 12/8/00
  Added Zip support but dropped non-zip support
  Removed GG roms from lists
0.3 13/8/00
  Re-introduced non-zip support
  Added 8 demo roms (http://www.smspower.org/dev/sources/index.shtml)
  Added "looking" Sonic
0.31 13/8/00 (daylight)
  Fixed minor bug in title-bar report
  Added 24 hacked roms (http://rhw.emucamp.com/)
0.4 15/8/00
  Added all-format support
  Fixed the "error initialising Borland Database Engine" bug
0.41 15/8/00 (daylight)
  Fixed bug in popup hints
  Added more demos and hacks
0.45 20/8/00
  Added 1 rom
  Made batch files self-deleting
  Added limited LFN support under Win9x (but still works under Win 3.1)
  Realised SG-1000 and OMV roms are the same
  Auto-name changing
  Integral zip support (DLL no longer required)
  Optional subfolder checking
0.45a 22/8/00
  Added 62 more GG roms
0.46 25/8/00
  Added more GG roms
  Fixed another bug
0.46a 27/8/00
  Added more SMS hacks
0.47 31/8/00
  Updated unknown rom request
  Improved unknown rom reporting
  Added some alternate SMS roms
  Added "wrong extension" detection
0.47a 3/9/00
  Data file update - mostly SMS roms.
0.48 5/9/00
  Made SMSTrim
  Added support for it
  Added CRCs for trimmed roms
0.5 6/9/00
  Added rom sorting/moving
  Added CRCs for fixed and trimmed roms
  Fixed a tiny error in the data lists
0.51 8/9/00
  A couple of tweaks
  Added more headered roms
0.51a 9/9/00
  Added refresh button and added glyphs
  Added more overdumps and headered SMS roms
  Added PFR Detect demo
0.51b 17/9/00
  Data file update
0.51c 20/9/00
  Data file update, using SMS checksum tools to change some [A] & [B] designations to good and bad dump designations
  Added recent SMS Power releases and some unreleased roms
  Added system-specific graphics
0.52 21/9/00
  Made ByteFix
  Added support for it
  Rearranged interface to fit button in
0.53 30/9/00
  Updated lists with Meka 0.55 beta's name changes
  Fixed some errors
  Added button glyphs
  Rearranged interface again by putting batch options in a combobox
  Added more roms
  Merged data files
  You can now specify a folder on the command line
  Folder and file listboxes now show LFNs.
0.54 4/10/00
  Added lots of rom data
  Fixed tab order
  Fixed bad filename listing when you rename files
  The code to stop the window resizing was reinstated after being accidentally removed
  You can now drop a file or folder on to the window and it will change to the appropriate folder
  Changed subfolders checkbox to a button
  Added button to clear lists
0.54a 6/10/00
  Added about a gazillion roms
  Added keyboard shortcuts
0.55 10/10/00
  Added several more roms
  Added saving of settings to an INI file
  You can now keep the various tools (SMSFix, etc) in any folder
  Added batch zipping
  Added favourite folders popup menu
  Added full zip support for external programs
0.6 13/12/00
  (held back for the release of Meka 0.55)
  Got rid of CRC list
  Added "Open folder" to folder listbox popup menu
  Added a few roms
  Reclassified several roms
  Converted to 32-bit
  Fixed bug where you couldn't use root folders as favourites
  Fixed bug where folders with the System attribute didn't show up
  The duplicates listbox now highlights the most recently added duplicate
  When renaming, extensions are now converted to lowercase instead of staying the same as the original file
  Reinstated commandline support
  Re-wrote this file
  Changed to Windows native unsizable window style
  Added more roms
  Updated names to Meka 0.55's meka.nam
0.6a 14/12/00
  Changed INI filename
  Changed batch filenames to LFNs
  Realised SMSFix can do LFNs, helper.exe no longer needed
  Tweaked a couple of filename suffixes
  Fixed bug where files with extension ".ZIP" were classed as unknown
0.61 31/12/00
  Added 12 new ColecoVision demos
  Reclassified 1 GG game as an overdump and added the fixed version
  Added SF-7000 (Super Control Station) support, now that Meka emulates it
  Added horizontal scrolling ability to listboxes
0.62 11/1/01
  Upgraded results window so it can safely handle more than 32K (ie. this readme)
  Removed horizontal scrolling of listboxes, added hints instead
  Added resizing ability - it's a bit flickery and if the window's big and "while scanning" options are on, scanning is very slow
  Tweaked buffers, so scanning is faster
  Added options menu
    - turning off "while scanning" options makes it much faster but less interesting to look at
    - various notification options for when scan complete
  Rewrote Zip scanning code from scratch (it was someone else's before). Result: the same speed
  Replaced file scanning code with another version. Result: a fair bit faster
  Thoroughly checked for resource leaks, none found
  Unlocked "What-you-don't-have" listing, after adding a roms-you-shouldn't-want filter
  Revamped Results dialogue
    - "Good" roms listed first, with "of" values
    - "Bad" roms listed next, without "of" values; lines omitted if you have none
    - Added reporting of total scan time
  Executable is now WinAligned for faster loading and lower memory usage
  Modified Zip scanning code, with massive speed increases. I've clocked it at up to 278 files per second.
0.65 7/2/01
  All overdumps are now given names saying exactly how they're overdumps
  Updated this readme a bit
  Extensive testing of CRC code finds compiled Delphi code is faster than hand-written assembler; and also that a smaller file buffer is faster. Strange but true. Unzipped files can now be read and CRCed at 14MB/s on my (relatively slow) computer.
  Reclassified the bad Street Fighter dumps as bad
  Revamped interface
  Replaced all code that used to create batch files with in-program code
  Carefully tweaked code so re-scans are no longer required
  Added status bar and progress bar
  Added options for new functions - what to do after working on roms, whether to delete duplicates to the recycle bin
  Updated this readme a lot due to the new interface and functionality
0.65a 3/3/01
  The program will now try to unset any read-only file attributes when they would otherwise cause errors
  Fixed tiny bug with properties dialogue
  Added some unreleased roms :oD
  Added Y2Kode demos
0.65b 8/3/01
  Added lots of roms thanks to Mike Cukan.
0.66 9/3/01
  Added BIOSes as a new rom type
  Fixed bug when fixing hacks, which I caused by adding author information to the data files
  Tweaked code in zipping loop for aesthetic reasons
  Updated this readme a bit
0.666 12/3/01
  Evil release!
  I couldn't resist, I was at 0.66 already and the number of SMS roms reached 666 :oD
  (Typical, I do a silly pointless release and that's the only one that emu sites report :oP)
0.67 27/3/01
  The column sorting is now reset when you add more roms
  Reclassified the bad dump of GG "Lunar (jp)" since the extremely long fix data wasn't being handled properly
  Added some more homebrew roms
  You can now choose your own font
  Statusbar now updates when building folder list
  Type column sorting much improved (it's now in the order I choose)
  Fixed incorrect author information for homebrew/demos
  The "Rom properties" window now shows additional information for homebrew/demos and hacks
  You can now choose the zip compression method to use
0.68 1/4/01
  Fixed Type sorting again - I had the numbers backwards :o)
  Added 21 "new" roms
  Some minor internal tweaking
0.69 10/4/01
  Added more statusbar reporting
  Added 6 headered and footered SMS roms thanks to Ricardo
  Improved file attribute tinkering so now read-only, hidden and system attributes are cleared when necessary
  Results window now flickers less when resized
  Minimising the Results window now minimises the whole program
  Fixed bug which limited the length of bad dump fix data that could be handled (my bad)
  Added 11 bad GG dumps, with fix data
  Added the latest SMS Power! release
0.70 22/4/01
  Listview now shows hints for clipped items
  Added Unzip button
  Added Facemaker good dump, Sylvan Tale translations, Mod2PSG demos
  Changed folder tree component (thanks to Rodrigo Amaro for helping), should solve problems for people who had no folder tree before
0.71 28/4/01
  Added "Fantastic Dizzy", "Majesco GG BIOS", 5 new bad SMS dumps
  Fixed behaviour when dropping files onto window (it had stopped changing to file's folder)
0.71a 2/5/01
  Reclassified "Micro Machines" good and bad dumps; updated minor things I forgot to update in 0.71
0.72 24/6/01
  Added two GGFTP GG baseball games
  Added Chuck Rock 2 dumps
  Added some bad and wrong extension SMS roms
  Fixed the mouseover hint on the Move button
  Updated with Meka 0.57 name changes
  Listview popup hints now wrap if possible to avoid going out of the window (and potentially offscreen)
  Renamed Filename column to Location, so I could add a Filename column which contains no path information, as requested by Bock
  Reclassified Mortal Kombat [B] after giving Bock the cartridge to redump
  Improved "remove from list" code a lot - duplicates are now reclassified if necessary, fixed a bug where the same file could appear twice
  Started referring to Zoop as Bock, just to confuse matters
  Added GG Last Action Hero
0.72a 27/6/01
  Added the various roms necessary to again surpass GoodSMS; note that most were mis-classified by Cowering
  As usual I forgot to update the version number in the program last time
0.72b 2/7/01
  Removed hacks and demos from the what-you-don't-have listing. Really, there's no point to them, the hacks are stupid and the demos aren't games
  Added the necessary roms to again surpass GoodGG and GoodCol, including fix data for bad dumps
  I'm looking for help clearing up the Colecovision dumps - most have signs of being overdumped and/or bad dumps. I may include overdump fixing in a later version. Email me if you can help...
  Updated with Meka name changes again
0.73 18/7/01
  Added a few new roms and a load of bad roms and ones with the wrong extension
  Added online update checking facility, which should make data file updating easier
  Added multi-pass renaming
  Filename column now updates properly after a Move operation
0.74 11/8/01
  Changed data file field separator to tab to allow commas in names in future
  Fixed a bug where renaming would report the wrong number of renames when more than one pass is needed
  Removing roms no longer leaves unusable buttons enabled
  Replaced some old and buggy code that could cause problems before
  You can now run all operations (rename, etc) on just the selected roms, using the popup menu
  Fix operation will now fix roms with the wrong extension
  First steps towards data file extensibility, which will allow adding of data for new formats without needing a new program. You can delete the old .txt data files since now they're called .romdata files :)
  Fixed online update page which turned out not to work properly
  Added the "new" GoodCol dumps, which were again mis-classified
  Made a minor tweak which should make scanning a bit faster
0.75 1/9/01
  Fixed "Properties" routines from the popup menu, they were broken before
  Speeded up "What you don't have" listing
  Worked a lot on new format lists
  Added "Work in background" button; when pushed, it will yield CPU use to all other tasks
  Right-click popup menu is much faster now
  Added various new releases
  First "new" data files added, but in a way to make only people who know what they're doing use them.
0.75a 1/9/01
  Fixed a bug which caused the program to hang when fixing unzipped, wrong-extension roms (or any situation where an unzipped file was not found by the CRC routines)
0.76 25/9/01
  Fixed bug where read-only zips would not be deleted after unzipping
  Improved zip error handling, thanks to Azul for suggesting I see what corrupted zips do
  Fixed a bug when changing the extension of the file inside a zipfile
  Added activity logging
  Made readme window non-modal so you can keep it open and continue to use the rest of the program
  Added an option to have bigger, captioned buttons
  Fixed a bug where certain wrong file extensions were sometimes incorrectly included
  Executable is now UPX compressed
  Added various new roms



:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 7. Contact details
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Note that during the month of October (2001), my availability may be greatly reduced. Email is probably best for now, and don't expect a quick response (usually I respond in minutes, it will be days or weeks).

You can email me at:

maxim@mwos.cjb.net

You can also ICQ me, my number is 60886699.

The SMS Checker web page is:

http://smschecker.mwos.cjb.net

I also read the SMS Power messageboard a lot:

http://www.smspower.org

I welcome all feedback and suggestions.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 7.1 What to do if you have an unknown rom
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

In order to classify a rom, I need a copy of it. It is possible for me to create some overdumps and headered roms by guesswork; so, if you email me the data given in the results window, which is of the form:

DFC26F0A C:\WINDOWS\Desktop\unknown.sms 262144

then I may be able to create it. If not, I will need a copy of the rom; in return for you sending this to me, I will send you any released rom you ask for. I will not send you any unreleased roms I have. You can compress it to save online time - I can handle ZIP, RAR and ACE formats among others. You may prefer to upload it somewhere and email me the URL, as that will be quicker.



:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 8. FAQ
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Q. Be honest... are these actual questions that are frequently asked?
A. No. I've had very few questions; email me if there's anything you want to know.

Q. What's a CRC?
A. It's a Cyclic Redundancy Check.

Q. Alright then, what's a Cyclic Redundancy Check?
A. Suffice to say that it's a code generated by a clever algorithm which depends on every single byte in a file. The chances of two files having the same CRC is 1 in 4,294,967,296, and if two files differ by one byte then their CRCs will be extremely different. A CRC looks like this: 679E1676.

Q. Enough already, I don't want to know about CRCs any more. How do I get rid of them?
A. Just resize the CRC column down until it disappears.

Q. CRC column? I haven't got one of them!
A. You do... it's actually hidden as above by default. Move the cursor over the line between the Filename and Type column headers until it has *two* vertical lines, and click and drag from there.

Q. These columns are a mess. Can't the program automatically resize them?
A. Guess what? The program doesn't, because Windows already does it itself! Whenever you see a list view like this (eg. Explorer, WinZip, etc), if you move the mouse to the place where you can resize the column (and the cursor changes) and double-click, the column will auto-size to fit the largest item. Alternatively, when the list has focus, press Ctrl+(Numpad +) and all columns will resize to fit their largest item (including hidden columns).

Q. Who are you? I've heard you are 7 feet tall, full of muscles and can code emulators in a matter of seconds.
A. No, you're thinking of PolestaR. I'm merely 6'3", full of blood and bones and organs and stuff like that, and couldn't code an emulator if my life depended on it.

Q. When I rename or zip my roms, the names they end up with have all these crazy _ things in them? I'm so confused, what can it be?
A. When there's a filename collision (ie. when the name I want to rename a rom to is already taken by another file, when the folder I want to move a rom to already contains a file of that name, or when the zipfile I want to create for a rom already exists), underscores (_) are added to the end of the filename to save either errors or you having to choose a filename for every collision. You should be able to do rename operations to fix them, when you remove the offending file with the wanted name. This will often happen if you keep different formats' roms in the same folder.

Q. Hey, this program's over 200KB! (Well, it was when I wrote this...) What kind of bloatware is this?
A. Hey, it's a pretty complicated program. Bear in mind that:
    1. It's been WinAligned, which makes it slightly bigger but also makes it use half the memory.
    2. You didn't have to download 6MB of runtimes to run it.
    3. Before compression it was over 500KB.

Q. What does "WinAligned" mean?
A. WinAligning is a clever thing MS invented then made impossible for us normal people to access, but thanks to the nice people at http://www.winmag.com it is possible to make any program load faster and use less memory. I could tell you exactly why, but it's terribly dull.

Q. No, I really want to know. What is this WinAligning?
A. Alright then. When Windows loads a program, this is what happens:
- The disk cache loads the .exe into memory.
- The .exe is chopped into bits and copied into some more memory. The bits all contain some empty space at the end, since they have to start at certain points within the file.
- These bits are then run.
WinAligning means the chopping into bits is done in the .exe; that means that the copy in the disk cache is ready to be run. Windows 98 and above recognise this, and run it from there. So, the amount of memory needed is halved, and startup is faster since there's no need to do the copying and chopping. It does make the .exe a little bigger, since it has to align code chunks to 4KB boundaries (hence the exact multiple of 4KB file sizes); however, the aligned files often take up *less* space after being zipped. You can do this to any program file (exe and dll being common types) to speed them up. Use the above URL to get more information.

Q. What are those icons supposed to be? Is that an ice cream sandwich?
A. Well, it's hard at times to figure out an appropriate icon (see also the "what you don't have" button). Here's the (questionable) logic behind them:
Good dump: SMS cartridge. It's actually Meka's icon shrunk down a bit.
Homebrew/demo: Cartridge with pencil - because they're "hand-written"
Hacks: Cartridge with finger - because they've been messed with... poked, maybe?
Translation: Cartridge with book - a dictionary perhaps?
Unknown: Cartridge with question mark - should be obvious
Head/footered: Cartridge with plus sign - it's a rom plus a bit
Overdump: Stretched cartridge with arrows - because it's too big
Fixable bad dump: Cartridge with a small crack in it - because it's broken
Unfixable bad dump: Cartridge that's split in two - because it's completely broken
Wrong extension: Cartridge with cross - because it's not what it says it is
Duplicate: Two identical SMS carts together - obvious again
BIOS: Chip - because they are dumped from chips, not cartridges

Q. Why do I still get SMS cart icons even when I'm scanning for non-SMS roms?
A. Because I haven't made images for any other formats. If you send me a good image then I'll use it.

Q. ColecoVision? OMV? Mark III? What are all these crazy formats?
A. Look in Meka's Meka.txt for an introduction to all the formats.

Q. Why don't you add support for other formats, like NES, SNES, SMD, N64..?
A. Because I don't care about those systems. I've never owned any games console other than my SMS II and my GB Classic. Emulating GB games is silly, so I've not got into that.  Meka is a work of genius, or at least a warped mind :o) so I added the other Meka systems; I had to go and download hundreds of roms to do it, though.

If you have a very complete collection of roms for any system, preferably one with a good name source like Meka is and GoodTools aren't, then maybe you could maintain the required lists. Email me for more information.

Q. Why do some Japanese roms get given the name of the English port?
A. My system is, the game gets the name Meka gives it when in European mode. So, for example, "Ganbare Golby", which became "Factory Panic" on its western release (and lost Mikhail Gorbachev as the lead character...) gets called "Factory Panic (jp)".

Q. Why doesn't the rename function rename the file inside the zip?
A. Because that would be a lot more difficult and slow. You may notice that most Zip utilities can't do this either. If you want to rename the files inside the zips, you should do the following:
1. Press the Unzip button, and wait a long time.
2. Press the Rename button.
3. Press the Zip button, and wait a long time again.
If you want the roms to have the same name as the zips because FreezeSMS requires that, future releases will not. I know this because I've coded the unzipping code for it myself :P

Q. How come some of the roms I already renamed have to be renamed again when I use a new version of the program?
A. The name lists are constantly being updated. For example, if I find an alternate version of a rom, I have to add [A] to the name of the first.

Q. Where did you get all these roms?
A. I've been downloading roms for many years. Unfortunately, most of the sites I got the from have since been closed. Also, people are kind enough to send me roms I haven't got, so they can be added; and I am lucky enough to get some roms as soon as they're dumped, before their official SMS Power release.

Q. You mean you list unreleased roms?
A. Yes. No, you can't have a copy. Sorry.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 8.1 Things that look like bugs but aren't
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Symptom:
When you choose to scan a whole drive, the hard disk is accessed but nothing appears to happen.
Reason:
When you include subfolders, SMS Checker builds a list of all the subfolders to scan before it starts scanning. This can take a while if you have a lot of folders, or the drive is slow. Just wait and it'll work fine.

Symptom:
Some ColecoVision roms aren't listed.
Reason:
If they have the filename extension .bin, they won't be looked at. Change it to .rom.

Symptom:
When you use the Rename function, it reports "0 rom(s) renamed".
Reason:
If a file already has the correct name, it won't be counted.

Symptom:
When you access a CDR, it appears to lock up.
Reason:
If it is a DirectCD (or similar packet-writing software) formatted disc, the process of building the folder tree can be incredibly slow. If you give it plenty of time (maybe up to 10 minutes) it will be successful. When you come to scan your roms, it will work at the drive's full speed, but will take a few seconds to build its folder list.

Symptom:
The text in the status bar is sometimes cut off.
Reason:
This is a limitation of the underlying Windows control - it cannot display more than about 140 characters.

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 9. Source code
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

This program is kind of semi-open source, in that I don't mind giving people my code, but I'm not going to release the whole lot. For a start, there's a secret code in there which I'm keeping private; mainly, however, it's because it's not very well commented or understandable. But, if anyone would like to know anything about how this program works, or would like to see some of the code, just email me.

For what it's worth, this program is made in Delphi 3, which means Pascal-based source code.



:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 9. Extra rom data files
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

I've included a file called "Extra rom data files.zip". It's password protected because I want anyone who uses the files inside to read this bit first.

The rom data files in there are for a few other systems, mostly Atari ones. It's a lot of hard work to produce these files; it's taken many hours just to do those, and they're not original namelists.

However, I'm not into emulation of those systems. I'm not able to verify whether the data in there is correct. Also, it's originally based on Cowering's GoodTools (a few generations removed), which I have found to be quite frequently inaccurate; mainly because I know a lot about Sega 8-bit systems and have concentrated on them, whereas Cowering has produced lists of tens of thousands of roms/disk images; he's spread himself thin, so errors get through.

Anyone who is willing and able to maintain one or more these lists would be a great help to me. I have a lot of other romdata files which I haven't processed yet, so if the system you know isn't there, email me anyway.

I'm NOT interested in unknown roms for these systems. I'm NOT interested in minor name corrections. I DON'T want to maintain these files. If you think you can then please email me.

OK... the zip password is "herbidacious". If you know the significance of the word then well done to you :)



:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 10. Disclaimer
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

I've tested everything this program does thoroughly. I've fixed every bug I've found, and I'm pretty sure it won't destroy your roms. Nevertheless, I must give this disclaimer to cover my back. Here goes...

If this program or anything related to it causes any problems at all, it's not my fault.

I think that covers everything :o)



:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 11. Credits
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

This program uses Delphi Zip to allow it to zip and unzip roms. This requires me to tell you about this URL: http://www.geocities.com/SiliconValley/Orchard/8607 where you can get it yourself, and this URL: http://www.cdrom.com/pub/infozip because it is in turn partly based upon their code.

I may as well mention that the folder tree component is made by Markus Stephany (http://home.t-online.de/home/mirbir.st/).

The rest of the code I made myself. Well, the CRC code is a bit derivative (it is an ISO standard!) but I rewrote everything but the lookup table.

Some of the images used came from Scrow's: http://members.xoom.com/scrows



:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: 12. Ending sequence
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Goodnight, brave warrior.

Goodnight, Monster-Land....    (*)




(* One, then four dots. THIS IS IMPORTANT.)


Thanks go to:

Sega
Borland
Bock

...without whom this wouldn't have been possible, or even necessary.

Special bonus thanks to:

Heliophobe
Mike G
PolestaR
Dave

...who are just some of the other nice guys from the world of Sega 8-bit emulation.

Super bonus he'll-never-read-this thanks to:

E

...who has the best band ever.

And ultra-special she'll-probably-not-read-it-either thanks to:

Michelle

...for bringing me love and happiness, making me the luckiest person on earth and calling my smile "silly", even when we're 5,000 miles apart.