Categories
Beobachtungen Ghostbusters Spike 1

Ein Blick auf die Spike-1 Software

Mit der Spike-1 Flipperarchitektur hat Stern einen grossen Schritt weg von der alten Architektur mit einem zentralen Controller und I/O-Board zu einem modularen System gemacht. Dabei wurde nicht nur die Hardware geändert, sondern auch die Software. Seit Spike-1 läuft nun ein Linux auf dem Flipper. Grund genug, da mal reinzuschauen. Da Stern die SD-Karten-Images bereitstellt, ist das nicht schwierig.

Das Image ist 4GB gross, auf der SD-Karte sind diverse Partitionen:

fdisk ghostbusters-1_17.iso

Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk ghostbusters-1_17-modified.iso: 3.5 GiB, 3752852992 bytes, 7329791 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00018e69

Device Boot Start End Sectors Size Id Type
ghostbusters-1_17-modified.iso1 * 35 6999 6965 3.4M 1 FAT12
ghostbusters-1_17-modified.iso2 7000 13999 7000 3.4M da Non-FS data
ghostbusters-1_17-modified.iso3 14000 262499 248500 121.3M 83 Linux
ghostbusters-1_17-modified.iso4 264192 7329791 7065600 3.4G 5 Extended
ghostbusters-1_17-modified.iso5 266240 397311 131072 64M 83 Linux
ghostbusters-1_17-modified.iso6 399360 6690815 6291456 3G 83 Linux
ghostbusters-1_17-modified.iso7 6692864 6823935 131072 64M 83 Linux

Als nächstes kann man mit den Loopback-Tools von Linux die einzelnen Partitions mounten:

sudo losetup -P /dev/loop99  ghostbusters-1_17-modified.iso
mkdir iso1 iso3 iso5 iso6 is7
sudo mount /dev/loop99p1 iso1
sudo mount /dev/loop99p3 iso3
sudo mount /dev/loop99p5 iso5
sudo mount /dev/loop99p6 iso6
sudo mount /dev/loop99p7 iso7

Mal schauen, was man da so sieht.

Auf der FAT-Partition befindet sich nur der Bootloader:

ls iso1/
BOOT.BIN

Partition 3 enthält wohl das gesamte System:

ls iso3/
bin  data  dev  dump  etc  games  home  lib  lost+found  media  mnt  proc  sbin  spk  tmp  usr  var

Partition 5 ist der Ersatz fürs NV-Ram:

 ls iso5
lost+found  nv

Partition 6 scheint den eigentlichen Game-Code zu enthalten:

ls iso6
game  ghostbusters_pro  lost+found  spk

Und auf Partition 7 wird geloggt:

ls iso7
log  lost+found

Die Hardware ist ARMv7 basiert und es gibt auch ein Busybox auf dem System. Das bedeutet, es sollte möglich sein, auf dem Pinball einzuloggen.

file iso3/bin/busybox
iso3/bin/busybox: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.16, stripped

Also mal ein Blick in auf die Spielesoftware werfen:

ls -l iso6/ghostbusters_pro
total 1158340
-rw-rw-r-- 1 root root      21118 Feb 15  2015 accbridgenode-LPC1313-0_52_0.hex
-rw-rw-r-- 1 root root      34115 Feb 15  2015 coil4node-LPC1112_101-0_52_0.hex
-rw-rw-r-- 1 root root      34115 Feb 15  2015 coil4node-LPC1112_201-0_52_0.hex
-rw-rw-r-- 1 root root      57118 Feb 15  2015 coil4node-LPC1313-0_52_0.hex
-rwxrwxr-x 1 root root    7057423 Feb 15  2015 game
-rw-r--r-- 1 root root 1177406356 Feb 15  2015 image.bin
-rw-rw-r-- 1 root root      46842 Feb 15  2015 lcdnode-LPC1113_302-0_52_0.hex
-rw-rw-r-- 1 root root      62780 Feb 15  2015 netbridge-LPC1313-0_52_0.hex
-rw-rw-r-- 1 root root      26068 Feb 15  2015 node4-LPC1124_303-0_52_0.hex
-rw-rw-r-- 1 root root      21613 Feb 15  2015 nodebusanalyzer-LPC1313-0_52_0.hex
-rw-rw-r-- 1 root root      32712 Feb 15  2015 pinnode-LPC1112_101-0_52_0.hex
-rw-rw-r-- 1 root root      32773 Feb 15  2015 pinnode-LPC1112_201-0_52_0.hex
-rw-rw-r-- 1 root root      59982 Feb 15  2015 pinnode-LPC1313-0_52_0.hex
-rw-rw-r-- 1 root root      34422 Feb 15  2015 ws2812node-LPC1313-0_52_0.hex

Hier findet man die Firmware der Node-Boards. Wie man sieht, laufen die mit einfachen LPC ARM-Prozessoren.

Die eigentliche Spielsoftware ist ein grosses statisch gelinktes Binary:

file iso6/ghostbusters_pro/game
iso6/ghostbusters_pro/game: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.16, not stripped

Heikler wird es bei den Daten:

file iso6/ghostbusters_pro/image.bin
iso6/ghostbusters_pro/image.bin: data

Das ist eine grosse Datei ohne einfach erkennbare Struktur. Die Struktur ist wohl dem Autor des Pinball Browsers bekannt, aber nicht öffentlich dokumentiert.