Programmanalyse: DALEK ATTACK_TSM.prg
========================================

1. Grunddaten
-------------

Programmdatei     : DALEK ATTACK_TSM.prg
Dateigröße        : 37.881 Bytes
PRG-Nutzdaten     : 37.879 Bytes
Ladeadresse       : $0801 (2049)
Geladener Bereich : $0801-$9BF7
BASIC-Zeile       : 1990 SYS 2059
SYS-Einsprung     : $080B (2059)
Spieleinsprung    : $4100
SHA-256           : 62bca1663b6cd0cfcf3b53bbcd8073592c7e955ab0edf1216fcb20f1bcba69d5

Die ersten beiden Bytes einer C64-PRG-Datei enthalten die Ladeadresse in
Little-Endian-Reihenfolge. Bei dieser Datei sind dies die Bytes 01 08 und
damit die Adresse $0801.


2. BASIC-Starter
----------------

Der Anfang der Datei besitzt folgende Struktur:

01 08                   PRG-Ladeadresse $0801
0B 08                   BASIC-Zeiger auf die nächste Zeile beziehungsweise
                        auf das Ende der einzigen BASIC-Zeile
C6 07                   BASIC-Zeilennummer 1990
9E 32 30 35 39 00       BASIC-Token SYS und Dezimaladresse 2059

Das entspricht dem BASIC-Befehl:

1990 SYS 2059

Die Dezimalzahl 2059 entspricht der Hexadezimaladresse $080B. Der für den
Benutzer sichtbare Programmeinstieg ist deshalb $080B.

Üblicher Ladevorgang:

LOAD"DALEK ATTACK/TSM",8,1
RUN

RUN führt die BASIC-Zeile aus. Der darin enthaltene Befehl SYS 2059
übergibt die Kontrolle an den Maschinencode bei $080B.


3. Programmtyp
--------------

Die Datei ist kein einfaches, unkomprimiertes Programm. Nach dem kurzen
BASIC-Starter folgt ein selbstentpackendes C64-Programm mit zwei
Entpackstufen.

Der sichtbare SYS-Einsprung $080B ist daher nicht der Einstieg in das
eigentliche Spiel, sondern zunächst der Einstieg in den Entpacker.


4. Start- und Entpackablauf
--------------------------

RUN
  -> SYS $080B
     -> Entpacker, Stufe 1
        -> Sprung nach $0801
           -> Entpacker, Stufe 2
              -> eigentliches Spiel bei $4100

Erkannter Ablauf:

1. Der Code bei $080B deaktiviert die Interrupts.

2. Über den Prozessorport an Adresse $01 werden ROM-Bereiche des C64
   ausgeblendet. Dadurch kann der darunterliegende RAM verwendet werden.

3. Die erste Entpackroutine wird in den Speicherbereich um $0100
   verschoben und dort ausgeführt.

4. Nach der ersten Entpackstufe wird ein zweiter Loader bei $0801
   gestartet.

5. Die zweite Stufe erzeugt ungefähr 61.177 Bytes im Speicherbereich
   $077F-$F677.

6. Nach Abschluss der Entpackung wird die Programmkontrolle an $4100
   übergeben. Dies ist der erkannte Einstieg in das eigentliche Spiel.


5. Bedeutung der Einsprungadressen
----------------------------------

$080B:
    Dieser Einsprung ist im tokenisierten BASIC-Loader durch SYS 2059
    direkt gespeichert. Er ist die Adresse, die beim normalen Start mit
    RUN zuerst aufgerufen wird.

$4100:
    Diese Adresse wird erst nach beiden Entpackstufen erreicht. Sie ist
    der erkannte endgültige Spieleinsprung.

Für eine allgemeine D64-Startanalyse ist $080B daher der sichtbare und
statisch aus dem PRG ermittelbare Einsprung. Für die Untersuchung des
entpackten eigentlichen Programms ist dagegen $4100 maßgeblich.


6. Erkannte Inhalte
-------------------

Nach der Entpackung konnten unter anderem folgende Texte und Kennungen
erkannt werden:

- DALEK ATTACK
- Copyright-Hinweise für BBC und Admiral Software
- Hinweise auf die Commodore-64-Version
- PRESS FIRE TO START
- Auswahl für ein oder zwei Spieler
- Joystick-Hinweise
- PRESS FIRE TO CONTINUE
- GAME OVER
- LEVEL COMPLETE
- WELL DONE
- MUSIC BY MARTIJN SCHUTTEN, PLAYER BY FALCO PAUL
- VOICE TRACKER V2+ SCIENCE 451
- eingebettetes Datum 05/12/92

Außerdem enthält das entpackte Programm größere Bereiche mit Grafik-,
Zeichensatz-, Musik- und Leveldaten.


7. Prüfergebnis
---------------

Die PRG-Datei ist strukturell gültig und nicht abgeschnitten. Der
BASIC-Starter, der Einstieg in den ersten Entpacker, die zweite
Entpackstufe und der abschließende Kontrolltransfer zum Spieleinstieg
$4100 konnten nachvollzogen werden.

Zusammenfassung:

- sichtbarer Start über BASIC: $080B
- endgültiger Start nach der Entpackung: $4100
- Dateityp: zweistufig gepacktes C64-Programm
- Dateistatus: vollständig und strukturell gültig
