I’ve been struggling with a technical issue for the past five years now, steadily making progress over time. However, I’ve reached a point where I feel I need your additional assistance.
My dad has Revenge From Mars and Star Wars Episode I pinball machines of the Pinball2000 system. Pinball 2000 was the last pinball hardware and software platform developed by major pinball manufacturer Williams, and it was used in the machines Revenge From Mars (under the brand name Bally) and Star Wars Episode I (under the brand name Williams) before Williams exited the pinball business on October 25, 1999. You might find interesting information about this here: Wikipedia link and Pinball2000 website (The P2k Tech page is very interesting).
I’m afraid that one day one of these pinball machines may fail, and I’m looking for a durable solution.
Because it had a very specialized task to perform, a specific motherboard was chosen which included a Cyrix MediaGX processor, running XINU, custom software called XINA, a specific audio card, and game code on another custom board – the PCI PRISM card.
The motherboard and processor were commercial products, but like most computer hardware from the late ’90s, they are now obsolete, while the PRISM card was a unique part made purely for Pinball 2000 machines. Consequently, it is highly prized and, when you can find one, it sells for many hundreds of dollars.
Although nearly all the remaining parts are available, maintaining the computer has remained the stumbling block for several years.
During that time, work began in 2004 to address this issue by emulating Pinball 2000 on a regular PC with the launch of the Nucore pinball 2000 emulation system by Big Guys Pinball.
Big Guys Pinball is a company set up by Steve Ellenoff, Chuck Hess, and Don Weingarden who have been working together to free Pinball 2000 from the shackles of the dedicated hardware. As you might expect, you can find the backstory information about this here: Pinball News link and Big Guys Pinball website.
However, under the hood, they used QEMU 0.8.1, which as a whole is released under the GNU General Public License, version 2. The GNU community was upset, and I fully understand them. This is why a team released pinbox2000 in 2013, a copy of Nucore binaries but string edited to remove any references to Big Guys Pinball. The Big Guys Pinball team did not like it either and stopped releasing Nucore as a paid product, retired themselves, stopped responding, stopped support, and did not release the source code.
Nowadays, most people use pinbox ISO, which is a very old 32-bit Ubuntu crystallized with Remastersys. Even apt update
does not work anymore on this. Nucore was designed to run on Ubuntu / Lubuntu 32 bits and crashes on 64-bit distros due to a segmentation fault (SEGFAULT) I don’t fully understand.
The product, named ‘NUCORE,’ is now FREE CLOSED SOURCE, and I successfully installed it on a 32-bit modern Debian 12 last week.
As I managed to install a working instance of Nucore on Debian 32-bit, I could create my own crystallized pinbox based on a more modern Debian build, but I don’t like this approach: it would have exactly the same caveats of the mentioned pinbox ISO. Additionally, as a sign it is not a future-proof solution, Nucore requires usbmount which is not distributed anymore, fortunately, it is still quick and easy to build. Instead of having a distro in which I could not even do an apt update
in a few years, I’d be satisfied with an open-source solution, compilable on any architecture, making proper calls to QEMU to emulate XINU correctly, launch XINA software, and properly emulate the PRISM PCI card.
Adopting this approach is also a personal project to learn stuff. As a cybersecurity specialist, it implies a bit of retro engineering, and as a 30-year-old programmer, it also forces me to understand IT concepts from the 2000s, especially one that is still pretty obscure to me: ROMs. Indeed, there are base ROMs and BIOS that are loaded by the compiled Nucore emulator, which use internal features of QEMU through a chimeric “libqemu.so” which roughly exposes QEMU internals. However, I did not find the proper QEMU equivalent command line if it exists. In fact, this is even more sorcery to me, as I discovered there are some update ROMs which can be loaded by the system and sort of live-patch parts of the system, and even upgrade XINU OS. Once I’ve read about a guy calmly replacing ROMs from a system by another and writing about it working except for the sound of pinball being swapped. Another time I’ve seen a GitHub repository where a guy was concatenating ROMs, saying they were in the same memory so they deserved to be concatenated. As I know they come from different chips, this is, for me, pure sorcery.
I’d be very grateful to get any help or even the tiniest insight into my quest. Even to be able to read ROMs’ content as a filesystem would be a victory. Understand why I can’t start QEMU yet with the bios.bin file, understand in what memory and how to tell QEMU to load the ROMs. Understanding how update ROMs are able to patch XINU OS “on the go” and disappear once deleted, start the ROMs on XINU OS, or XINU OS, with XINA application running. I’m at the point where any insight might teach me a bunch of new things and open myself to new IT concepts I’ve not considered yet.
I’ve attached a list of all files from Nucore emulator.
You guessed it, I’d be happy to provide any of these files and any information if you want to wish to delve deeper.
Nucore binary imports folowing libs:
<EXTERNAL>
libc.so.6
libftchipid.so.0
libftd2xx.so.0
libltdl.so.3
libm.so.6
libmpg123_player.so
libpthread.so.0
libqemu.so
libSDL-1.2.so.0
libSDL_image-1.2.so.0
libSDL_mixer-1.2.so.0
libSFont.so
libz.so.1
NUCORE EMULATOR:
.
├── bin
│ ├── nucore
│ ├── nucore.225
│ ├── nucore.old
│ ├── n_update
│ ├── n_update.old
│ ├── pinbox
│ ├── run
│ ├── run_pb
│ └── watcher.sh
├── config
│ ├── leds.cfg
│ ├── pb2k.cfg
│ └── servers.txt
├── download
├── install
│ ├── install
│ ├── libs
│ │ ├── libftchipid.so.0.1.0
│ │ ├── libftd2xx.so.0.4.15
│ │ ├── libltdl.so.3.1.4
│ │ ├── libmpg123.la
│ │ ├── libmpg123.so.0.18.12
│ │ ├── libSDL_mixer-1.2.so.0.2.6
│ │ ├── libSDL_mixer.la
│ │ └── mpg123
│ │ ├── output_dummy.la
│ │ ├── output_dummy.so
│ │ ├── output_oss.la
│ │ ├── output_oss.so
│ │ ├── output_sdl.la
│ │ └── output_sdl.so
│ └── start
│ └── exec_nucore
├── music
├── resources
│ ├── config_menu
│ │ ├── config_menu_main.bmp
│ │ ├── config_menu_msg_ov.bmp
│ │ └── config_menu_sounds.cfg
│ ├── jukebox
│ │ ├── fonts
│ │ │ ├── arial.bmp
│ │ │ ├── arial_inverse.bmp
│ │ │ ├── arial.ttf_14_0_0_255_b.bmp
│ │ │ ├── arial.ttf_18_0_0_255_b.bmp
│ │ │ └── arial.ttf_22_0_0_255_b.bmp
│ │ ├── juke_modepic.bmp
│ │ ├── juke_playlist.txt
│ │ └── music_dir.txt
│ ├── load
│ │ ├── rfm
│ │ │ ├── rfm_load_screen_s0.bmp
│ │ │ └── rfm_load_sounds.cfg
│ │ └── swe1
│ │ ├── swe1_load_screen_s0.bmp
│ │ └── swe1_load_sounds.cfg
│ └── watermark
│ └── watermark.bmp
├── roms
│ ├── bios.bin
│ ├── rfm_nucore.bin
│ ├── rfm_pinbox.bin
│ ├── rfm_u100r2.rom
│ ├── rfm_u100.rom
│ ├── rfm_u101r2.rom
│ ├── rfm_u101.rom
│ ├── rfm_u102.rom
│ ├── rfm_u103.rom
│ ├── rfm_u104.rom
│ ├── rfm_u105.rom
│ ├── rfm_u106.rom
│ ├── rfm_u107.rom
│ ├── rfm_u109.bin
│ ├── rfm_u110.bin
│ ├── savedata
│ │ ├── rfm_15.ems
│ │ ├── rfm_15.flash
│ │ ├── rfm_15.see
│ │ ├── swe1_14.ems
│ │ ├── swe1_14.flash
│ │ └── swe1_14.see
│ ├── swe1_14f.cpu
│ ├── swe1_nucore.bin
│ ├── swe1_u100.rom
│ ├── swe1_u101.rom
│ ├── swe1_u102.rom
│ ├── swe1_u103.rom
│ ├── swe1_u104.rom
│ ├── swe1_u105.rom
│ ├── swe1_u106.rom
│ ├── swe1_u107.rom
│ ├── swe1_u109.rom
│ └── swe1_u110.rom
├── scripts
│ ├── 15khz-x11.sh
│ ├── autostart-disable.sh
│ ├── autostart-enable.sh
│ ├── confs
│ │ └── start-nucore.desktop
│ ├── crt-15khz-disable.sh
│ ├── crt-15khz-enable.sh
│ └── start-nucore.sh
└── update
├── rfm_15
│ ├── pin2000_50070_0224_bootdata.rom
│ ├── pin2000_50070_0224_game.rom
│ ├── pin2000_50070_0224_im_flsh0.rom
│ ├── pin2000_50070_0224_pubboot.rom
│ ├── pin2000_50070_0224_sf.rom
│ ├── pin2000_50070_0224_symbols.rom
│ └── rfm_15_update.bin
└── swe1_14
├── gamelist.txt
├── pin2000_50069_0150_07252000_B_10000000.exe
├── pin2000_50069_0150_bootdata.rom
├── pin2000_50069_0150_game.rom
├── pin2000_50069_0150_im_flsh0.rom
├── pin2000_50069_0150_pubboot.rom
├── pin2000_50069_0150_sf.rom
├── pin2000_50069_0150_symbols.rom
└── swe1_14_update.bin
Thank you for your reading. If you know THAT guy that might learn us stuff about this subject, I’d be happy to discuss with both of you.