Skip to content

MFME - RetroBIOS

Type standalone
Classification Embedded HLE
Source https://www.desertislandfruits.com/
Upstream closed-source
Version 20.1
Profiled 2026-08-08
Cores mfme, mfme-windows
Systems fruitmachine
Technical notes

Closed-source Delphi emulator for fruit machine and slot machine hardware, written by Chris Wren (Wizard) and distributed as a Windows installer. MFME.exe carries FileVersion 20.1.0.0, FileDescription "Multiple Fruit Machine Emulator" and copyright "C.J.Wren 1997-2020"; the installer targets Windows 10, defaults to C:\MFME\v20 (history.txt:323) and writes HKCU\Software\CJW\MFME. The binary is ASPack compressed, imports dinput8, xaudio2_9, d2d1 and d3d11 for input, sound and the hardware accelerated scaler added in v19.0 (history.txt:8-9), and holds its layout engine in Delphi units around an EasyCompression Library core. Development ended with the author's death, and Update.exe, reached from File -> Check For Updates (history.txt:235), no longer finds a server. ES-DE calls MFME.exe with a .gam path and the working directory set to the emulator folder, through find rules MFME and MFME-WINDOWS, and runs it under Wine or Proton on Linux; .gam is in the arcade and mame extension lists.

A machine is a folder holding a .gam file, the .fml layout it names and the ROM set. The .gam is plain text: a System line naming the tech, DIP switch, reel, stake, jackpot, percentage and meter state, a Layout line naming the .fml, a Game line, and one ROM line per ROM file. Layouts before v5 used .dat and are converted by loading them in v5 or v6 and saving; v20 loads .fml only. The .fml is an AACS container whose password is derived from a four byte seed at the end of the file through a mixer, hashed with RIPEMD-128 into a Rijndael key, and each chunk is zlib compressed; it holds the Delphi layout stream with every bitmap embedded, carries no external file path, and text components name a font family rather than a font file. MFME.exe is started with the .gam path as its argument (history.txt:271).

ROM sets are per machine and self contained. Barcrest S4 and S5 sets are .LO and .HI program files with a .BIN sound ROM, MPU5 sets are .p1 to .p4, and other techs use .hex or .rom members named by the .gam. Fruit machine hardware has no system BIOS, so nothing is shared between machines, and sound ROMs belong to the machine as well: an S4 game whose sound ROMs are absent still runs and reports Wrong Snd Err (history.txt:301). v20.0 added an automatic ROM download for DIF legacy layouts (history.txt:293). Ctrl-K resets a game with its alternate ROM set (tips.txt).

Effect samples are the mechanical cabinet sounds MFME plays itself, distinct from the game audio the sound ROM produces. Each effect has a fixed filename resolved in the game folder first, then DefaultSounds\Custom\\, then DefaultSounds (DefaultSounds/Readme.txt:78-84), and files are opened when required rather than at layout load (history.txt:210-211). A preference forces the defaults over the ones a layout selects (history.txt:219). The distribution ships Custom folders for 40 techs: ACEVIDEO, ADDER5, ASTRASYSA1, BLACKBOX, COINMASTER, ELECTROCOIN, EPOCH, IGTS+, IGTS2000, IMPACT, INDER, M1AB, M1VIDEO, MACH2000A, MACH2000E, MACH2000S, MMM, MPS2, MPU2, MPU3, MPU4, MPU4PLASMA, MPU4VIDEO, MPU5, PCLMAXI, PHOENIX, PHOENIX2, PLUTO5, PROCONN, SCORPION1, SCORPION2, SCORPION4, SCORPION5, SRU, SYS1, SYS5, SYS83, SYS85, SYSTEM80 and spACE, with cabinet subfolders Eclipse for ADDER5, SCORPION4 and SCORPION5, Elegance for EPOCH, and Genesis for MPU4 and MPU5. DefaultSounds/Readme.txt:35-37 lists the electronic token mech effects as CoinInToken, CoinInTokenSwitch and CoinInTokenRejected; the files that ship and the entry that introduced them name them TokenIn, TokenInSwitch and TokenInRejected (history.txt:80).

Three shipped directories are enumerated rather than looked up by name and therefore expect no particular filename. DefaultBackdrops and DefaultTiles hold the images offered as a backdrop or tiled background in the full screen modes, picked at random when the preference is set (history.txt:48, 55-56), and ship one wallpaper and six tiles. DefaultSounds/MiscSounds holds alternate payout, coin and note recordings that a user copies over an effect name. Fonts is scanned for the fonts a layout names, so its contents grow with the layouts installed.

59 files | 1 required, 58 optional | 58 in repo, 1 missing Categories: 1 BIOS, 58 game data

PacDrive32.dll required in repo bundled
Ultimarc PacDrive, PacLed64 and UltimateIO output library

  • System: fruitmachine
  • Source: MFME.exe import directory, history.txt:278-279
  • Listed in the MFME.exe import descriptors, so the Windows loader resolves it at process start and MFME does not launch when it is absent from the application directory. Drives real cabinet lamps, hoppers and meters through Ultimarc boards; v20.0 updated the library and added PacLed64 and UltimateIO support.

LITHOGRB.TTF optional in repo game_data bundled
Lithograph Bold, the font layouts name for machine text

  • Path: Fonts/LITHOGRB.TTF
  • System: fruitmachine
  • Source: history.txt:38, history.txt:309
  • v19.0 moved font loading from installed system fonts to the Fonts folder where MFME is located. Layouts store a font family name, not a file: the decoded layout stream names Lithograph. A layout whose font is missing shows the name in red in the properties screen and renders with a substitute.

LITHOGRL.TTF optional in repo game_data bundled
Lithograph Light, the font layouts name for machine text

  • Path: Fonts/LITHOGRL.TTF
  • System: fruitmachine
  • Source: history.txt:38, history.txt:309
  • Same mechanism as LITHOGRB.TTF, the light weight of the same family.

MFME.ttf optional in repo game_data bundled
MFME segment and display font

  • Path: Fonts/MFME.ttf
  • System: fruitmachine
  • Source: history.txt:38, history.txt:168
  • Shipped font used by MFME's own displays, updated in v19.5.

ReelGradientMask.bmp optional in repo game_data bundled
Reel gradient mask applied to reel bands

  • Path: DefaultMasks/ReelGradientMask.bmp
  • System: fruitmachine
  • Source: DefaultMasks/Readme.txt:1
  • Used when the Default option is chosen for the mask in the reel properties window. A custom mask stored in the layout replaces it.

ReelLampMask.bmp optional in repo game_data bundled
Reel lamp mask applied to reel bands

  • Path: DefaultMasks/ReelLampMask.bmp
  • System: fruitmachine
  • Source: DefaultMasks/Readme.txt:1
  • Same mechanism as ReelGradientMask.bmp, for the reel lamp overlay.

2pSlide.wav optional in repo game_data bundled
2p payout solenoid

  • Path: DefaultSounds/2pSlide.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:9, history.txt:44

10pSlide.wav optional in repo game_data bundled
10p payout solenoid

  • Path: DefaultSounds/10pSlide.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:10

20pSlide.wav optional in repo game_data bundled
20p payout solenoid

  • Path: DefaultSounds/20pSlide.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:11

50pSlide.wav optional in repo game_data bundled
50p payout solenoid

  • Path: DefaultSounds/50pSlide.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:12

PoundSlide.wav optional in repo game_data bundled
One pound payout solenoid

  • Path: DefaultSounds/PoundSlide.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:13

TokenSlide.wav optional in repo game_data bundled
10p and 20p token payout solenoid

  • Path: DefaultSounds/TokenSlide.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:14

MiscSlide.wav optional in repo game_data bundled
Five by 50p slide

  • Path: DefaultSounds/MiscSlide.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:15

meter.wav optional in repo game_data bundled
Electromechanical meter step

  • Path: DefaultSounds/meter.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:17
  • Listed as Meter.wav in the readme, shipped as meter.wav.

ButtonDown.wav optional in repo game_data bundled
Layout button pressed

  • Path: DefaultSounds/ButtonDown.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:19
  • PROCONN ships its own copy under DefaultSounds/Custom/PROCONN/.

ButtonUp.wav optional in repo game_data bundled
Layout button released

  • Path: DefaultSounds/ButtonUp.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:20
  • PROCONN ships its own copy under DefaultSounds/Custom/PROCONN/.

HopperMotor1.wav optional in repo game_data bundled
Hopper 1 motor running

  • Path: DefaultSounds/HopperMotor1.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:22
  • Cabinet specific copies ship under DefaultSounds/Custom/ for ADDER5/Eclipse, EPOCH/Elegance, MPU4/Genesis, MPU5/Genesis, SCORPION4/Eclipse and SCORPION5/Eclipse.

HopperCoin1.wav optional in repo game_data bundled
Coin paid out from hopper 1

  • Path: DefaultSounds/HopperCoin1.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:23
  • Same cabinet specific copies as HopperMotor1.wav.

HopperMotor2.wav optional in repo game_data bundled
Hopper 2 motor running

  • Path: DefaultSounds/HopperMotor2.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:24
  • Same cabinet specific copies as HopperMotor1.wav.

HopperCoin2.wav optional in repo game_data bundled
Coin paid out from hopper 2

  • Path: DefaultSounds/HopperCoin2.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:25
  • Same cabinet specific copies as HopperMotor1.wav, plus an alternate in DefaultSounds/MiscSounds/.

NoteIn.wav optional in repo game_data bundled
Note inserted into the note acceptor

  • Path: DefaultSounds/NoteIn.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:27

NoteInReject.wav optional in repo game_data bundled
Note rejected by the note acceptor

  • Path: DefaultSounds/NoteInReject.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:28

NoteInStack.wav optional in repo game_data bundled
Note accepted and sent to the stacker

  • Path: DefaultSounds/NoteInStack.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:29

CoinIn.wav optional in repo game_data bundled
Coin inserted into a roll down electronic mech

  • Path: DefaultSounds/CoinIn.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:31

CoinInSwitch.wav optional in repo game_data bundled
Coin accepted by the mech

  • Path: DefaultSounds/CoinInSwitch.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:32

CoinInRejected.wav optional in repo game_data bundled
Coin rejected by the mech into the payout tray

  • Path: DefaultSounds/CoinInRejected.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:33

TokenIn.wav optional in repo game_data bundled
Token inserted into an electronic token mech

  • Path: DefaultSounds/TokenIn.wav
  • System: fruitmachine
  • Source: history.txt:80, DefaultSounds/Readme.txt:35

TokenInSwitch.wav optional in repo game_data bundled
Token accepted by an electronic token mech

  • Path: DefaultSounds/TokenInSwitch.wav
  • System: fruitmachine
  • Source: history.txt:80, DefaultSounds/Readme.txt:36

TokenInRejected.wav optional in repo game_data bundled
Token rejected by an electronic token mech

  • Path: DefaultSounds/TokenInRejected.wav
  • System: fruitmachine
  • Source: history.txt:80, DefaultSounds/Readme.txt:37

CoinInS1.wav optional in repo game_data bundled
Coin inserted in an S1 type mech

  • Path: DefaultSounds/CoinInS1.wav
  • System: fruitmachine
  • Source: history.txt:148

CoinInS1Switch.wav optional in repo game_data bundled
Coin accepted by an S1 type mech

  • Path: DefaultSounds/CoinInS1Switch.wav
  • System: fruitmachine
  • Source: history.txt:148

CoinInS1Token.wav optional in repo game_data bundled
Token inserted in an S1 token type mech

  • Path: DefaultSounds/CoinInS1Token.wav
  • System: fruitmachine
  • Source: history.txt:148

CoinInS1TokenSwitch.wav optional in repo game_data bundled
Token accepted by an S1 token type mech

  • Path: DefaultSounds/CoinInS1TokenSwitch.wav
  • System: fruitmachine
  • Source: history.txt:148

CoinInS10.wav optional in repo game_data bundled
Coin inserted in an S1 or S10 type mech

  • Path: DefaultSounds/CoinInS10.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:39

CoinInS10Rejected.wav optional in repo game_data bundled
Coin rejected from an S10 type mech

  • Path: DefaultSounds/CoinInS10Rejected.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:40, history.txt:47, history.txt:153

CoinInS10Switch.wav optional in repo game_data bundled
Coin accepted by an S1 or S10 type mech

  • Path: DefaultSounds/CoinInS10Switch.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:41, history.txt:47

CoinInS10Token.wav optional in repo game_data bundled
Token inserted in an S10 token type mech

  • Path: DefaultSounds/CoinInS10Token.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:43

CoinInS10TokenRejected.wav optional in repo game_data bundled
Token rejected from an S10 token type mech

  • Path: DefaultSounds/CoinInS10TokenRejected.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:44, history.txt:47, history.txt:153

CoinInS10TokenSwitch.wav optional in repo game_data bundled
Token accepted by an S10 token type mech

  • Path: DefaultSounds/CoinInS10TokenSwitch.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:45, history.txt:47

S1Locked.wav optional in repo game_data bundled
Coin refused by a locked out S1 mech

  • Path: DefaultSounds/S1Locked.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:50

CoinInDrop.wav optional in repo game_data bundled
Coin inserted in a comparator style mech

  • Path: DefaultSounds/CoinInDrop.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:47

CoinDropReject.wav optional in repo game_data bundled
Coin rejected from a comparator style mech

  • Path: DefaultSounds/CoinDropReject.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:48

LockoutOn.wav optional in repo game_data bundled
Lockout solenoid activated

  • Path: DefaultSounds/LockoutOn.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:52

LockoutOff.wav optional in repo game_data bundled
Lockout solenoid deactivated

  • Path: DefaultSounds/LockoutOff.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:53

Stepper.wav optional in repo game_data bundled
SRU, SYS80 and MPS2 200 step reel motor

  • Path: DefaultSounds/Stepper.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:55, history.txt:74
  • Shipped only as tech copies under DefaultSounds/Custom/ for ELECTROCOIN, MPS2, SRU and SYSTEM80, and as stepper.wav for M1AB. Reel effects were extended to Maygay M1a and made available to other techs in v20.0.

PrizeMotor.wav optional in repo game_data bundled
Prize vend motor started

  • Path: DefaultSounds/PrizeMotor.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:57

PrizeVend.wav optional in repo game_data bundled
Prize dispensed

  • Path: DefaultSounds/PrizeVend.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:58
  • Listed as Prizevend.wav in the readme, shipped as PrizeVend.wav.

PullHandleSlow.wav optional in repo game_data bundled
Pull handle drawn slowly

  • Path: DefaultSounds/PullHandleSlow.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:60, history.txt:207

PullHandleNormal.wav optional in repo game_data bundled
Pull handle drawn at normal speed

  • Path: DefaultSounds/PullHandleNormal.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:61, history.txt:207

PullHandleFast.wav optional in repo game_data bundled
Pull handle drawn quickly

  • Path: DefaultSounds/PullHandleFast.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:62, history.txt:207

PullHandleRelease.wav optional in repo game_data bundled
Pull handle released

  • Path: DefaultSounds/PullHandleRelease.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:63, history.txt:207

MotorOn.wav optional in repo game_data bundled
Reel motor activated on an EM machine

  • Path: DefaultSounds/MotorOn.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:68

Wiper.wav optional in repo game_data bundled
Reel with studs spinning on an EM machine

  • Path: DefaultSounds/Wiper.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:69

SolenoidOn.wav optional in repo game_data bundled
Reel solenoid activated on an EM machine

  • Path: DefaultSounds/SolenoidOn.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:70

SolenoidOff.wav optional in repo game_data bundled
Reel solenoid deactivated on an EM machine

  • Path: DefaultSounds/SolenoidOff.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:71

BellOn.wav optional in repo game_data bundled
Bell switched on

  • Path: DefaultSounds/BellOn.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:72

BellOff.wav optional in repo game_data bundled
Bell switched off

  • Path: DefaultSounds/BellOff.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:73

Buzzer.wav optional in repo game_data bundled
Nudge buzzer activated

  • Path: DefaultSounds/Buzzer.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:74

Sounder.wav optional missing game_data
Feature sounder activated on an EM machine

  • Path: DefaultSounds/Sounder.wav
  • System: fruitmachine
  • Source: DefaultSounds/Readme.txt:75
  • Effect name documented by MFME with no sample in the distribution.

Generated on 2026-08-23T16:12:06Z