ZXMameCD - MHM - MHV
kleine Info wie das Tool Mame Hiscore Viewer/Mame Hiscore Merger funktioniert
und wie die Idee entstanden ist.

Der Gedanke:
Am Anfang möchte ich euch erzählen, wie die Idee Hiscorelisten für eine gemeinsame
Hiscoreliste aufzubereiten geboren wurde.
Die Geschichte dazu entstand eigentlich schon in den späten 90er Jahren, als ich während
meines Studiums mit Mame das erste Mal in Berührung kam und mir den Code anschaute.
Die ersten Versionen von MAME wurden dann von uns auf Amiga und DOS getestet,
später verfasste ich auch einen Testbericht für die amigaOS 02/99 als freier Redakteur.
Bei diversen Programmierarbeiten und Spielereien kam uns der Gedanke, dass es ganz
interessant wäre ein Tool zu haben, das mehrere Hiscorelisten miteinander vereinen könnte.

Aufgrund der Tatsache, dass für jedes Spiel eine spezielle Routine programmiert
werden muss, schlief der Gedanke eines "Hiscore Mergers" relativ schnell ein.

Jahre später erst, genauer gesagt im Oktober 2006 entschloss ich mich aufgrund einiger
Anregungen in diversen Arcadeforen und einer Bitte eines Freundes ihm einen Hiscore
Merger für ein besonderes Spiel zu basteln, dieses Projekt anzugehen.

Wie gesagt, jedes Spiel erfordert seine eigene Hiscore Leseroutine - von daher kann ich nicht
sagen wie viele Spiele irgendwann mal unterstützt werden. Desweiteren sind mir bzgl. ROMs
die Hände gebunden, da ich nur Spiele testen kann, wo ich legale Hiscoredateien erzeugen kann
oder zugeschickt bekomme - Wünsche können aber gerne geäußert werden.

In diesem Zusammenhang auch die Information an alle, die keine Lizenzen für ROMs besitzen,
dass das Verwenden in diesem Falle strafbar ist!

Stoffsammlung:
Sammeln wir einige Punkte:
- Die Hiscores von MAME werden als binäre Dateien abgelegt *.hi bzw. *.nv
- Diese *.hi gilt es einzulesen, dementsprechend zu bearbeiten und wieder zu speichern.
- die Dateien sind unterschiedlich aufgebaut
- diese *.hi Dateien sind nichts anderes als "kopierte" Speicherbereiche, die bei Mame quasi eingebaut
   und somit angezeigt werden.

how to:
- um genau Überlegungen anzustellen, muss man die Hiscore Datei genauestens unter die Lupe nehmen.
ein hexdump der Datei gibt uns Einblick:



gleichzeitig empfiehlt es sich einen Screenshot von MAME mit der dazugehörigen
Hiscoreliste zu erstellen (aus Copyright Gründen wird diese hier nicht angezeigt).

Nun gilt es Veränderungen festzustellen - gleiches Spiel, ein anderer Score - Hiscore
Screenshot in MAME erstellen von neuer Hiscoreliste und neuer hexdump:



Seht ihr schon Regelmässigkeiten?
Da ich nicht zu tief in die Materie vordringen, sondern nur einen groben Überblick
schaffen möchte - auf der rechten Seite seht ihr die 10 Hiscore Einträge,
diese werden als Hex abgelegt und der dementsprechende Hex Ascii liefert das
dementsprechende Zeichen.
Einfach nachzuvollziehen: Console öffnen und echo -e "\x41" eingeben - das
liefert ein "A", "4d" ein "M" usw... (grüner Kreis siehe unten)


In Z0000010: steht der Hiscore (rote Kreise), allerdings lautet der Hiscore nicht
"906303" sondern "036390" - also 36.390 Punkte zieren den 1. Platz
Der blaue Kreis ist die dementsprechende Rundenplatzierung - hier Runde 2.

Die Daten wiederholen sich für alle 10 Plätze + den 1. Platz, dieser ist in der ersten Zeile
links hinterlegt - "30 39 33 36 ..."

So in der Art funktioniert das Lesen der Dateien - diese müssen dann noch
dementsprechend bearbeitet werden. Danach liest man die zweite Hiscoredatei
ein, bearbeitet sie auf dem gleichen Wege. Jetzt müssen die beiden Listen
noch sortiert werden und in korrekter Form "zurückgeschrieben" werden.

Folgender Screenshot zeigt "Blazing Star" .nvram - hier werden die Hiscores im nvram
abgelegt und nicht als .hi gespeichert. Es handelt sich um eine 8K große Datei.



Dass soetwas noch aufwändiger ist, als eine 166 Bytes große Datei dürfte klar sein.
Um Regelmässigkeiten besser zu erkennen, habe ich mir ein kleines Tool geschrieben,
das ähnlich wie ein Tool mit Dictionary funktioniert und bestimmte Hex- und
Dezimalkombinationen aus meiner angelegten Datei ausliest, durchtestet
und mir mehr oder weniger brauchbare Ergebnisse liefert ;-)

Nachdem man jetzt weiss, wie man an die Daten kommt, könnt ihr das ganze mit mehr oder
weniger guten Programmierkenntnissen selbst durchführen.

Für jeden, der das mal ausprobieren möchte, sollte dies einen kleinen Einstieg darstellen.
Die meisten Hiscore Files sind allerdings unterschiedlich aufgebaut, so dass sich eine
ausreichende Analyse der Hiscoredatei nicht vermeiden lässt.
Es ist extrem wichtig, dass man auch weiss, was man ändert, denn JEDE
unkontrollierte Veränderung zerstört die Binärdatei!