The key to switch between Full Keyboard Mode and Partial Keyboard Mode is preset to Scroll Lock. If you want to map it to another key, simply define the uimodekey property in mame.ini.

Setting in mame.ini

uimodekey ENTER_PAD

This would change the menu key to the Enter key on the number keypad. You can choose any key from this set:

A, B, C, D, E, F, G, H, I,
J, K, L, M, N, O, P, Q, R, 
S, T, U, V, W, X, Y, Z, 0,
1, 2, 3, 4, 5, 6, 7, 8, 9,
F1, F2, F3, F4, F5, F6, F7, F8,
F9, F10, F11, F12, F13, F14, F15, ESC,
0_PAD, 1_PAD, 2_PAD, 3_PAD, 4_PAD, 5_PAD, 6_PAD,

If you do not yet have a mame.ini file in your folder, run MAME with the -createconfig option from a command shell:

mame -createconfig

Command line option

As with all settings in mame.ini, you can also provide this setting in the command line:

mame64 ti99_4a -uimodekey ENTER_PAD

The MAME emulator is operated via the keyboard and a graphic menu. However, the system that it emulates also make more or less extensive use of the keyboard, so we should expect conflicts.

Hence, MAME defines two operation modes and two layout modes of the keyboard:

  • Operation modes
    • Full keyboard mode
    • Partial keyboard mode
  • Layout modes
    • Emulated keyboard mode
    • Natural keyboard mode

You can change the key for switching between the modes if your keyboard does not have a Scroll-Lock key: Change the UI mode key.

 keyboard map t1

The natural keyboard

The natural keyboard posts complete strings for each keystroke but throttles the output.


  • © -> (C) (three characters)
  • ß -> ss
  • æ -> ae

Alpha Lock: Caution must be taken that Alpha Lock is in the release state when starting the emulation. The reason is that the Alpha Lock state cannot be changed in natural keyboard mode. Instead, the case is controlled by the PC keyboard and its Caps Lock state. If Alpha Lock is on (from the last emulation run with emulated keyboard), all characters appear as upper case, regardless of the Caps Lock setting.

We're going to describe a fast way to install MAME on your Windows computer. If you follow these steps closely, there should not be any problem getting it running.

Check your Windows release

You should run a post-XP version (Vista, 7, 8, or 10). Do not try any older release like Windows 98, ME, or 2000. Windows XP is not recommended for security reasons, and MAME is not tested to run on it.

Get the MAME package

Download the most recent MAME release from the MAMEdev website from the section Official Binaries. You should use the 64 bit version (unless you know that your computer is 32 bit only).

Please do not attempt to install an older release, particularly not if its release number is much smaller than the current one. There have been changes in the meantime concerning the ROM formats, and this may make it impossible to run MAME.

Install the files

Run the exe file; this is just a self-extracting archive file. Choose your target directory; for easier configuration, a simple path like C:\prg\mame is recommended. The extracted files will be located in that directory.

Note that MAME does not alter your registry file. This means you can at any time simply remove the MAME installation, install another one in a separate directory, or reinstall it if desired. Uninstallation means that you have to remove that directory.

Configure it once

Open a command shell and type (in black)

C:\Users\Whoever> cd \prg\mame
C:\prg\mame> mame64 -createconfig
C:\prg\mame> exit

This creates a file C:\prg\mame\mame.ini. Open it in some text editor.

In the second section ("CORE SEARCH PATH OPTIONS") you will find a setting rompath. This is relative to your base directory C:\prg\mame; typically, you will find the value roms (i.e. it will be C:\prg\mame\roms). This subdirectory is already created by unpacking the zip file. If you like, you can append ;cartridges or similar in order to separate between modules and system roms. You must make sure that there is a directory C:\prg\mame\cartridges; if needed, create a new folder of that name in your explorer.

Scroll down to "OSD VIDEO OPTION"; change window to 1 to get a windowed output, otherwise it is fullscreen. In the next section "OSD PER-WINDOW VIDEO OPTION" you should set the first resolution property to 640x480 or bigger, as you find suitable.

Note that this configuration is only done once, when you install MAME, as we show it here.

Install system ROMs and cartridges

Go to our WHTech repository and download from the directory /System ROMs/MAME. Unzip its contents into the roms subdir. Do not unzip the zip files inside.

Also from WHTech, download from /Cartridges/MAME. It contains a collection of zip files, each one for a cartridge; do not unpack these cartridge zips.

Store the cartridge zips into the cartridges subdir if you added that location to the rompath, otherwise move all cartridge zip files to the roms subdir, too.

Create a starter batch

Create a small batch file to launch MAME. You may drop that on your desktop. For that, open some text editor and type

cd \prg\mame
mame64 ti99_4a

Save it as ti99.bat to your desktop, or anywhere else as desired.

You can now edit this starter batch or create copies. You can change the system name (e.g. geneve, ti99_8), add cartridges (-cart exbasic) or peripheral devices (-ioport peb -ioport:peb:slot8 hfdc), and add floppy disks (-flop1 mydisk.dsk).

If you prefer the 32 KiB internal 16-bit RAM expansion, you can turn it on in the "System configuration" menu of the on-screen display (OSD). You then have to remove the 32kmem configuration below in all examples, however.

Example 1

Plain console, cassette file inserted

Important: This and the following examples will only work if you actually offer the specified disk or cassette image files at the indicated paths (or in the working directory if no path is specified).

cd \prg\mame
mame64 ti99_4a -cass1 cassette.wav

Example 2

External 32K memory expansion, TI floppy controller, myfloppyimage.dsk inserted in DSK1

cd \prg\mame
mame64 ti99_4a -ioport peb -ioport:peb:slot2 32kmem -ioport:peb:slot8 tifdc -flop1 myfloppyimage.dsk

Example 3

Cartridge Extended Basic, external 32K memory expansion, RS232 card, HFDC controller, one drive, myfloppyimage.dsk inserted

cd \prg\mame
mame64 ti99_4a -cart exbasic -ioport peb -ioport:peb:slot2 32kmem -ioport:peb:slot7 tirs232 -ioport:peb:slot8 hfdc -flop1 myfloppyimage.dsk

Example 4

Cartridge Editor/Assembler, external 32K memory expansion, Speech synthesizer, Horizon RAMDisk, HFDC, hard disk, one floppy image inserted

cd \prg\mame
mame64 ti99_4a -cart editass -ioport peb -ioport:peb:slot2 32kmem -ioport:peb:slot3 spchsyn -ioport:peb:slot4 horizon -ioport:peb:slot8 hfdc -ioport:peb:slot8:hfdc:h1 generic -hard1 myharddisk.hd -flop1 myfloppyimage.dsk

Example 5

P-Code system, external 32K memory expansion, TI floppy controller, one drive, Editor/Filer inserted from folder C:\prg\mame\disks\UCSD

cd \prg\mame
mame64 ti99_4a -ioport peb -ioport:peb:slot2 32kmem -ioport:peb:slot3 pcode -ioport:peb:slot8 tifdc -flop1 disks\UCSD\ucsd_pascal_editor_filer_1.dsk

Note: You must turn on the P-Code card in the DIP switches menu of the On-screen display (OSD). The card is turned off by default because it immediately takes over control on start.

Example 6

Geneve, Horizon RAMDisk, Speech, RS232, HFDC, one hard disk

cd \prg\mame
mame64 geneve -peb:slot4 horizon -peb:slot5 spchsyn -peb:slot6 tirs232 -peb:slot8 hfdc -ioport:peb:slot8:hfdc:h1 generic -hard1 myharddisk.hd


If you do not plan to change your configuration too often, you may want to set it inside MAME using the OSD. You can use the menu selection Slot devices to change the peripheral box contents, for example. Note that this change is only temporary until you leave MAME.

If you want to keep changes after stopping MAME, you must set readconfig and writeconfig to 1 in mame.ini.

When you use this setting, be aware that your command-line arguments may be overridden by what you had set in the OSD menu before you exited MAME the last time.

While the simulation of hardware circuits is in no way problematic with respect to copyright (since we produce a new system by observing the behavior of the original one), the distribution of memory contents is generally subject to copyright, and unlicenced distribution is considered an offense by most jurisdictions. Some countries know exemptions in the case of legacy software that is not runnable without the hardware, when the hardware is not available anymore. Other countries do not have corresponding exemptions. So you have to be aware of the following:

The emulator does not ship with any ROMs. There are ROMs available on some servers; use your favorite search engine. Keep in mind that most ROMs are distributed on the assumption that you have the original ROMs in hardware that you purchased. Downloading the ROMs of hardware that you do not have may be a copyright violation. In doubt, contact the copyright holders.

Consequently, I will not provide links for downloading these files. Find out by yourself how to get them. The safest way (from a legal standpoint) is to dump the contents from the real equipment if you own such a system.

At least for the TI-99/8 we have a written consent from TI that the ROM contents may be freely distributed. For TI-99/8 ROMs have a look at (login required).

Rumours are that you should also try the FTP site of WHTech.

The ROM dumps used for the TI emulations can be identified by this list. The required files must be present when starting the emulation. If an optional file is missing, the emulation will run, provided that the affected component that needs the ROM is not accessed. You will get a warning message stating that ROMs are missing and that the emulation will probably not run correctly.

Systems may be parents of others. In that case, the child systems borrow the ROM files from the parents if they do not have them in their own ZIP file. This means that if you have the file, you can always launch the European version ti99_4ae since all files are equal, and the ti99_4a is the parent of ti99_4ae.

  • ti99_4 is the parent of ti99_4e (european version)
  • ti99_4a is the parent of ti99_4ae and ti99_4ev
  • ti99_8 is the parent of ti99_8e

MAME is tolerant about the file names inside the ZIP files; the only important key is the hash code. ROM contents are compared by their hash code to make sure that the contents are authentic. Files may be renamed within the ZIP files.

The following table refers to MAME versions 0.212 and higher. The ROM dumps are distributed over a set of ZIP files. Each ZIP file corresponds to a single system or peripheral extension.

Main systems

These are the ROMs for the consoles, the Geneve, and the SGCPU.

TI-99/4A (ti99_4a)

Also comprises the European version (ti99_4ae)

File name CRC SHA-1 Description
994a_grom0.u500 2445a5e8 ea15d8b0ac52112dc0d5f4ab9a79ac8ca1cc1bbc GROM chip 0000-17ff
994a_grom1.u501 b8f367ab 3ecead4b83ec525084c70b6123d4053f8a80e1f7 GROM chip 2000-37ff
994a_grom2.u502 e0bb5341 e255f0d65d69b927cecb8fcfac7a4c17d585ea96 GROM chip 4000-57ff
994a_rom_hb.u610 ee859c5f a45245707c3dccea902b718554a882d214a82504 ROM chip 0000-1fff high bytes
994a_rom_lb.u611 37859301 f4e774fd5913b387a763f1b8de5524c54b255434 ROM chip 0000-1fff low bytes


TI-99/4A modified for use with EVPC (ti99_4ev)

Inherits from ti99_4a

File name CRC SHA-1 Description
994ev_grom1.u501 6885326d 1a98de5ee886dce705de5cce11034a7be31aceac Modified GROM chip 2000-37ff


TI-99/4QI (ti99_4qi)

Inherits from ti99_4a

File name CRC SHA-1 Description
994qi_grom0.u29 8b07772d 95dcf5b7350ade65297eadd2d680c27561cc975c Modified GROM chip 0000-17ff


Geneve 9640 (geneve)

File name CRC SHA-1 Description
genbt098.bin b2e20df9 2d5d09177afe97d63ceb3ad59b498b1c9e2153f7 Boot EPROM v0.98 ("Swan")
genbt100.bin 8001e386 b44618b54dabac3882543e18555d482b299e0109 Boot EPROM v1.00


Geneve 9640 modified (genmod)

Reuses the boot EPROM from the Geneve 9640 (v1.00)

File name CRC SHA-1 Description
gnmbt100.bin 8001e386 b44618b54dabac3882543e18555d482b299e0109 Boot EPROM v1.00


SNUG TI-99/4P aka SGCPU (ti99_4p)

Also requires a prepared HSGPL card and the EVPC.

File name CRC SHA-1 Description
sgcpu_hb.bin aa100730 35e585b2dcd3f2a0005bebb15ede6c5b8c787366 ROM 0000-7FFF high bytes
sgcpu_lb.bin 2a5dc818 dec141fe2eea0b930859cbe1ebd715ac29fa8ecb ROM 0000-7FFF low bytes


TI-99/8 (ti99_8)

May use the HX5102 as storage. TI-99/4A expansion cards are not guaranteed to work.

ROM file CRC SHA-1 Description
cd2325a.vsm 1f58b571 0ef4f178716b575a1c0c970c56af8a8d97561ffe Speech ROM chip 1
cd2326a.vsm 65d00401 a367242c2c96cebf0e2bf21862f3f6734b2b3020 Speech ROM chip 2
g0_f830.bin 1026db60 7327095bf4f390476e69d9fd8424e98ea1f2325a GROM 0 at address F830 (System)
g1_f830.bin 93a43d65 19be8a07d674bc7554c2bc9c7a5725d81e888e6e GROM 1 at address F830
g2_f830.bin 06f2b901 f65e0fcb2c63e230b4a9563c72f91259b94ce955 GROM 2 at address F830
g0_f840.bin 44501071 4b5ef7f1aa43a87e7ae4f02090944be5c39b1f26 GROM 0 at address F840 (Text-to-Speech)
g1_f840.bin 5a271d9e bb95befa2ffba2cc17ac437386e069e8ff621248 GROM 1 at address F840
g2_f840.bin d52502df 17063e33ee8709d0df8030f38bb92c4322d55e1e GROM 2 at address F840
g3_f840.bin 86c12396 119b6df9211b5399245e017721fc51b88b60879f GROM 3 at address F840
g4_f840.bin f17a2ef8 dcb044f71d7f8a165b41f39e35a368d8f2d63b67 GROM 4 at address F840
g5_f840.bin 7dc41301 dff714da68de352db93fba309db8e5a8ae7cab1a GROM 5 at address F840
g6_f840.bin 7e310a90 e927d8b3f8b32aa4fb9f7d080d5262c566a77fc7 GROM 6 at address F840
g7_f840.bin 3a9d20df 1e6f9f8ec7df4b997a7579be742d0a7d54bc8763 GROM 7 at address F840
g0_f850.bin 2d948672 cf15912d6dae5a450e0cfd796aa36ea5e521dc56 GROM 0 at address F850 (P-Code library 1)
g1_f850.bin 7d64a842 d5884bb2af21c8027311478ee506beac6f46203d GROM 1 at address F850
g2_f850.bin e5ed8900 03826882ce10fb5a6b3a9ccc85d3d1fe51979d0b GROM 2 at address F850
g3_f850.bin 87aaf19e fdbe163773b8a30fa6b9508e679be6fa4f99bf7a GROM 3 at address F850
g4_f850.bin d3e789a5 5ab06aa75ca694b1035ce5ac0bebacc928721388 GROM 4 at address F850
g5_f850.bin 49fd90bd 44b2cef29c2d5304a0dcfedbdcdf9f21f2201bf9 GROM 5 at address F850
g6_f850.bin 31bac4ab e29049f0597d5de0bfd5c9c7bfea902abe858010 GROM 6 at address F850
g7_f850.bin 71534098 75e87123efde885e27dd749e07cb189eb2cc45a8 GROM 7 at address F850
g0_f860.bin 0ceef210 b89957fbff094b758746391a69dea6907c66b950 GROM 0 at address F860 (P-Code library 2)
g1_f860.bin fc87de25 4695b7f979f59a01ec16c55e4587c3379482b658 GROM 1 at address F860
g2_f860.bin e833e350 6ffe501981a1112be1af596a489d96e287fc6be5 GROM 2 at address F860
u25a_pas.bin d7ed6dd6 32212ce6426ceccbff73d342d4a3ef699c0ae1e4 ROM (16K) containing Pascal support
u25_rom1.bin b574461a 42c6aed44802cfabdd26b565d6e5ddfcd689f11e ROM containing ROM1 (16K), Text-to-speech DSR (8K), Hexbus DSR (8K)
u4_rom0.bin 901eb8d6 13190c5e834baa9c0a70066b566cfcef438ed88a ROM0 (only used in 99/4A mode)


TI-99/4 (ti99_4)

Less successful predecessor of the TI-99/4A.

File name CRC SHA-1 Description
994_grom0.u500 aa757e13 4658d3d01c0131c283a30cebd12e76754d41a84a GROM chip 0000-17ff
994_grom1.u501 c863e460 6d849a76011273a069a98ed0c3feaf13831c942f GROM chip 2000-37ff
994_grom2.u502 b0eda548 725e3f26f8c819f356e4bb405b4102b5ae1e0e70 GROM chip 4000-57ff
994_rom_hb.u610 6fcf4b15 d085213c64701d429ae535f9a4ac8a50427a8343 ROM chip 0000-1fff high bytes
994_rom_lb.u611 491c21d1 7741ae9294c51a44a78033d1b77c01568a6bbfb9 ROM chip 0000-1fff low bytes

TI-99/2 24K (ti99_224)

Uses 24K ROM; earlier prototype. Does not support Hexbus.

File name CRC SHA-1 Description
rom0000.bin c57436f1 71d9048fed0317cfcc4cd966dcbc3bc163080cf9 ROM 0000-1FFF
rom2000.bin be22c6c4 931931d61732bacdab1da227c01b8045ca860f0b ROM 2000-3FFF
rom4000.bin 926ca20e 91624a16aa2c62c7ebc23128308709efdebddca3 ROM 4000-5FFF


TI-99/2 32K (ti99_232)

Uses 32K ROM; later prototype. May use HX5102 as storage.

File name CRC SHA-1 Description
rom0000.u2a 01b94f06 ef2e0c5f0492d7d024ebfe3fad29c2b57ea849e1 ROM 0000-1FFF
rom2000.u12 0a32f80a 32ed98481998be295e637eaa2117337cfa4a7984 ROM 2000-3FFF
rom4000a.u3 10c11fab d43e0952538e66e2cedc307b71b65cb388cbe8e3 ROM 4000-5FFF Bank 1
rom4000b.u2b 34dd52ed e01892b1b110d7d592a7e7f1f39f9f46ea0818db ROM 4000-5FFF Bank 2


Peripheral Expansion Cards

These are cards that are plugged into the Peripheral Expansion Box (PEB).

SNUG BwG disk controller (ti99_bwg)

File name CRC SHA-1 Description
bwg_dsr.u15 06f1ec89 6ad77033ed268f986d9a5439e65f7d391c4b7651 DSR ROM (4 banks)


SNUG Enhanced Video Processor Card (ti99_evpc)

Runs on ti99_4ev, sgcpu

File name CRC SHA-1 Description
evpc_dsr.u21 a062b75d 6e8060f86e3bb9c36f244d88825e3fe237bfe9a9 Card DSR


Myarc Hard and Floppy Disk Controller (ti99_hfdc)

Standard floppy and hard disk controller. Runs with TI-99/4A and Geneve. Supports 2 sides, single (9) and double (18) density, and 40 or 80 tracks.

File name CRC SHA-1 Description
hfdc_dsr.u34 66fbe0ed 11df2ecef51de6f543e4eaf8b2529d3e65d0bd59 Card DSR


Myarc Memory Expansion Card MEXP-1 (ti99_myarcmem)

Configured to run with Myarc Extended Basic II.

File name CRC SHA-1 Description
myarc512k_xb2_dsr.bin 41fbb96d 4dc7fdfa46842957bcbb0cf2c37764e4bb6d877a Card DSR


P-Code Card (ti99_pcode)

Card has a master enable/disable switch (check DIP settings).

File name CRC SHA-1 Description
pcode_grom0.u11 505e5df0 66911fba7599c64981180f8a673581f4b05941ff Card GROM 0000-17FF
pcode_grom1.u13 63b546d5 3d830c8bdac102275ec0702eff1ebf4b67484f52 Card GROM 2000-37FF
pcode_grom2.u14 28821e5c c147bd5d8d624caa690284bfc253c6699e3518d4 Card GROM 4000-57FF
pcode_grom3.u16 1db4a4a5 f7a0ba8050f00ccc1ee328c66df5cc4269748ced Card GROM 6000-77FF
pcode_grom4.u19 9618eb9b 1f223f3febcb93e648cefe49c83bfeac802be9d6 Card GROM 8000-97FF
pcode_grom5.u20 c47efe6d f5b56c7de1cb1e7345a0716d35f00a3a9722febe Card GROM A000-B7FF
pcode_grom6.u21 06a34c93 56172c56afa3868f2098328f81881022230d949d Card GROM C000-D7FF
pcode_grom7.u22 a09ca8d9 2ea33d875f9c8e7c00df023a0d8d4461d50f0a87 Card GROM E000-F7FF
pcode_rom0.u1 3881d5b0 a60e0468bb15ff72f97cf6e80979ca8c11ed0426 Card ROM 4000-4FFF
pcode_rom1.u18 46a06b8b 24e2608179921aef312cdee6f455e3f46deb30d0 Card ROM 5000-5FFF 2 Banks


TI Floppy Disk Controller Card (ti99_tifdc)

Supports 2 sides, FM recording (single density), and 40 tracks.

File name CRC SHA-1 Description
fdc_dsr.u26 693c6b6e 0c24fb4944843ad3f08b0b139244a6bb05e1c6c2 Card DSR 4000-4FFF
fdc_dsr.u27 2c921087 3646c3bcd2dce16b918ee01ea65312f36ae811d2 Card DSR 5000-5FFF


TI RS232/PIO Card (ti99_rs232)

Provides two serial interfaces and one parallel interface. May be used twice in the system to get two more serial interfaces and one more parallel interface. Check DIP settings for CRU base.

File name CRC SHA-1 Description
rs232pio_dsr.u1 eab382fb ee609a18a21f1a3ddab334e8798d5f2a0fcefa91 Card DSR 4000-4FFF


Other devices

GRAMKracker (ti99_gkracker)

To be used in the GROM port (cartridge slot).

File name CRC SHA-1 Description
gkracker.bin 86eaaf9f a3bd5257c63e190800921b52dbe3ffa91ad91113 GK loader


Speech Synthesizer (ti99_speech)

Also used as a peripheral card (using an adaptor card)

File name CRC SHA-1 Description
cd2325a.u2a 1f58b571 0ef4f178716b575a1c0c970c56af8a8d97561ffe Speech ROM 128 Kbit
cd2326a.u2b 65d00401 a367242c2c96cebf0e2bf21862f3f6734b2b3020 Speech ROM 128 Kbit


HX5102 Hexbus Floppy Drive (ti_hx5102)

Used with TI-99/8 and TI-99/2 32K. Supports 2 sides, single (9) or double density (16 sectors) and 40 or 77 tracks.

File name CRC SHA-1 Description
hx5102_rom1.u25 40621a77 1532f6f23e0104326c21909cb0ec46936242a12a Drive firmware 8K
hx5102_rom2.u29 57c2603b 2f1d01378943436f0abd5b20710f6c8c175fde13 Drive firmware 8K

Here are some instructions for building MAME from source.





Linux and other Unix variants

If you decide to build MAME from source code in Linux, you should probably directly use the git repository on Github since bugs are corrected very quickly (and new ones are as quickly introduced ...).

Version 0.210 and higher

You need

  • gcc / gcc-c++ version 7 or higher
  • git
  • make
  • Development package of alsa
  • Development package of gconf2
  • Development package of gtk2
  • Development package of the SDL2 library
  • Development package of the SDL2_ttf library
  • Development package of the Qt5Core library
  • Development package of Pulseaudio (since 0.230)

Use git to clone the repository to your local drive:

git clone


Ubuntu users need to make use of the apt-get command or check the software repository tools.

For Ubuntu 18.04 and newer, the following packages are required:

sudo apt install git
sudo apt install qt5-default
sudo apt install libsdl2-ttf-dev
sudo apt install libfontconfig1-dev
sudo apt install python

This set of package installations also imports gcc/gcc-c++ and make. You may put all package names in one single apt install call.


For an openSUSE installation, either use YaST or (if not already installed) follow this path:

sudo zypper install git-core
sudo zypper install gcc-c++
sudo zypper install libqt5-qtbase-devel
sudo zypper install xorg-x11-devel
sudo zypper install alsa-devel
sudo zypper install libSDL2_ttf-devel
sudo zypper install fontconfig-devel
sudo zypper install python-xml
sudo zypper install libpulse-devel


You can just build the complete MAME package by running make.

If you only want the TI systems to be included, you may specify them in the command line:

make -j4 SOURCES=src/mame/drivers/ti99_4x.cpp,src/mame/drivers/ti99_4p.cpp,src/mame/drivers/ti99_8.cpp,src/mame/drivers/geneve.cpp,src/mame/drivers/ti99_2.cpp REGENIE=1 TOOLS=1

REGENIE should be specified, since the GENie project generator tool is used for building. TOOLS will generate the additional helpers imgtool, chdman, and others. You probably don't need them if you use TIImageTool.

The -j4 switch is used to start 4 build jobs concurrently, which speeds up the compilation considerably. You must make sure that your build environment is not too old. GCC should be at least version 7. You can also use clang by


When you want to get a current version, use the git pull command. Cleaning the build environment is optional, but if you experience problems when compiling, try to clean first.

git pull
make clean

After compiling has finished, you should have a freshly built mame64 executable file.

Actually, all Linuxes are alike. Almost. In the end, you run into problems because one system is by default installed with some library that another does not use. Since these libraries are installed only once, the challenge is to find out which libraries need to be installed and which are already there, and this is again different from system to system.

Thus, not the Linuxes are different, but their installation evolves over time. I will give some hints for installing MAME on different systems on this page.

Running MAME

MAME is dynamically linked against some libraries which may not be installed on your machine.

But fixing this is a simple job which you have to do only once. The following commands have been tested on a fresh installation. After installing, you should be able to run MAME. (Please report if you find a different situation.)

Unfortunately, different Linux flavors come with different package installers. And to make things worse, they use different package names for the same libraries.


openSUSE Tumbleweed

sudo zypper install libSDL2_ttf-2_0-0
sudo zypper install libQt5Widgets5


Ubuntu 19.10, 20.04

Linux Mint 19.3

sudo apt install libsdl2-ttf-2.0-0
sudo apt install libqt5widgets5

Important changes

MESS/MAME has undergone some rare, but important changes in usage that users should be aware of. In particular, when many releases are skipped, things may suddenly appear broken, but there may have been a change a while back.

These changes may require you to modify your existing MAME setup to achieve the same behaviour as before the release.

Version Changes
0.229 The main executable is now called mame(.exe), not mame64(.exe), for all architectures.
0.227 Reimplemented Horizon RAMdisk may fail to load the older NVRAM file; backup to disk and restore recommended
0.213 The Geneve/EVPC mouse is unplugged by default; must be explicitly attached to the colorbus.
0.199 Geneve BIOS must be selected by the switch "-bios x.xx", not by DIP switches
0.199 GenMod is now a separate machine, not a configuration of the Geneve. Has its own ROM zip file (
0.186 The I/O port of the 99/4A is explicitly emulated. Device paths must be prefixed with "ioport" (like -ioport:peb:slot2).
0.174 ROM dumps are reorganized; requires to use new system ROM zips and cartridges. Older dumps are not accepted anymore.
0.174 The cartridge type "paged" is replaced by "paged12k" and "paged16k". Requires to replace affected RPKs.
0.165 The internal 16-bit 32K memory expansion is now off by default. Use the PEB card or turn it on in the OSD.
0.131 Cartridges are emulated by RPK files. Plain dumps ("cartc.bin", "cartg.bin") are not accepted anymore.


Detailed history

This version log of MAME specifically lists all TI-related changes in the code.


Release date Git Revision New features Fixes Bugs or Regressions
0.245 ? ? - Added AMA/B/C dec to DDCC-1, req by Genmod; fixed tipi async mode -
0.244 2022-05-25 bcf77373a5f - 9995 decrementer; cartridges with smaller ROMs than 8K; gromemu now allows up to 4096 banks -
0.243 2022-04-29 addbb8ab40b TIPI async mode TIPI debugging, stability; TMS9901 counter update by S0 -
0.242 2022-04-01 e8166b52740 TIPI emulation Geneve/Genmod debugging -
0.241 2022-02-24 31f001e5019  - DSK4 motor now operated by DDCC1; P-Code card works in debugger Debugger does not work in Genmod ("Bad RAM")
0.240 2022-01-26 f0ab44fe1c8 - - -
0.239 2021-12-29 80bcaea1ed9 WHTech SCSI card (without Block mode DMA); new Geneve boot EPROM 2.0 - No reading/writing to DSK4 at DDCC1
0.238 2021-11-24 fb21b789040 - - -
0.237 2021-10-26 34d8357465c - - -
0.236 2021-09-29 5e865af5405 - - -
0.235 2021-08-31 ec9ba6fa76c - - -
0.234 2021-07-28 2633c19a68f - - -
0.233 2021-07-01 05d0cf61e7f - HFDC hangs with not connected drives; now also using timed steps for sector I/O instead of buffered steps only -
0.232 2021-05-27 2b0f01bc3ae - - -
0.231 2021-04-28 1f221136613 - Changed default floppy step rates and Corcomp monoflop config -
0.230 2021-03-31 943c06cba08 - IDE card AME/AMD decoding -
0.229 2021-02-24 4322eaae9d6 - Debugger write for Geneve -
0.228 2021-01-27 140f4469331 - - ARM build broken (Raspi), fixed with fd5fb05acee
0.227 2020-12-31 d85735634cd -

Horizon RAMDisk reimplemented; paged378 cartridges mirror smaller ROMs; corrected fill byte after data CRC in HFDC

0.226 2020-10-28 3c56452b07a - BQ4847 is correctly detected by IDEDSR -
0.225 2020-09-29 5a1fd0cc172 SID Master 99 Gromemu type allows for bank-switched ROMs Horizon RAMDisk broken
0.224 2020-08-25 5892c78a152 - - -
0.223 2020-08-06 c55a261d26d TI-99/2 Expansion port and 32K expansion Debugger write to PEB from TI-99/4A (regression from release 0.173) -
0.222 2020-06-26 6d50d60a43b - Changed default switch setting in IDE controller; fixed some issues in clock chips -
0.221 2020-05-19 e8a0e0469b0 PGRAM(+) card, IDE controller with clock chip selection IDE controller with RTC-65271 -
0.220 2020-04-05 c5c5723b9d5 CorComp and Myarc DDCC-1 floppy controllers, FORTi card Stale datamux byte cleanup -
0.219 2020-02-29 221f0064426 Selectable EVPC memory size - -
0.218 2020-02-02 0e2a252d309 Low-level emulation of the Geneve mainboard (Gate Array, PAL, Genmod)

TI-99/2 floppy loads program files with more than 1 sector; fixed datamux so that Ambulance runs again;

Cassette working again

0.217 2019-12-25 13997a8f317 - Sound wait states -
0.216 2019-11-27 b8b7c7e232 - - -
0.215 2019-10-30 e9ef4808dd - - -
0.214 2019-09-25 24d07a12d7 Pluggable keyboard for the Geneve - -
0.213 2019-09-04 f7172322a2 Mouse optional for EVPC and Geneve, must be plugged explicitly. This prevents mouse pointer capturing in Windows when mouse is not needed. - -
0.212 2019-07-31 1182bd9325 - CRU base address setting for RS232 Cassette operations
0.211 2019-06-27 1b969a8acb - - -
0.210 2019-05-30 ad45c9c609 - TMS9901 counter now counts at all times, not only when set to non-null. -
0.209 2019-04-24 2b317bf296
gcc < 9

Fixed CRU multi-bit operations with *Rx+; fixed TI FDC issues with Geneve GPL mode; fixed SGCPU regression with CRU operations

0.208 2019-03-27 9483624864 - Fixed Geneve GPL mode, fixed status bits (C and OV) for SLA and INV -
0.207 2019-02-27 40fc33967c - - Geneve GPL mode lockup (e12e17ce8)
0.206 2019-01-30 cf02fe333a - - Changes in key mappings (757436bbfb)
0.205 2018-12-26 b691c38273 - Reject cartridges with more than 2 MiB dump size to avoid mem corruption Cassette operations broken in 99/8 (since 0.198)
0.204 2018-11-28 c6150e7542 - - -
0.203 2018-10-31 b57a140101 - - -
0.202 2018-09-26 856478fbda - - -
0.201 2018-08-29 4dc302ed05 All disk formats (DSK, DTK, HFE) allow for 16 sectors/track; HX5102 working with 99/2 Formatting works in 99/8 (also when changing densities); track dumps now working safely in PC99. Full cassette support for 99/2(32K). Unneeded cassette channel (Ch.1) removed. -
0.200 2018-07-25 ff19cd3977 - - -
0.199 2018-06-27 f2e805a153 BIOS selection for Geneve; GenMod now a separate driver (check ROM zips) Double density for HX5102 (HFE format only) -
0.198 2018-05-30 c5f6a62d59 TI-99/2 running; HX5102 can host two drives Fixed interrupt latching in 9995 (for 99/2); OSD blank disk creation; double-sided disks with HX5102 HX5102 cannot handle double density
0.197 2018-04-25 74293f8247 Hexbus floppy HX5102 working Read track for TIFDC; can now load Diskassembler from MG HX5102 cannot handle double-sided disks
0.196 2018-03-28 e8f2016076 - - -
0.195 2018-02-28 e44e85b8ef - - -
0.194 2018-01-31 5be2496d0c Selectable VRAM size for Geneve Debugging in cartridges, esp. MiniMemory -
0.193 2017-12-27 bf28b347fb - Removed auto-waitstates from Geneve -
0.192 2017-11-29 d771f54227 - - -
0.191 2017-10-25 a5db728b9c - - -
0.190 2017-09-27 f57574c238 - - -
0.189 2017-08-30 2beedc540f - - -
0.188 2017-07-26 7b45ec19f1 Hexbus WIP - -
0.187 2017-06-28 1d9648b01c Hexbus early WIP; new cartridge type "paged7" for TI-CALC - -
0.186 2017-05-31 e4c6cb15e0 Rearranged bus/ti99 source subtree; introduced ioport as a slot (PEB must now be plugged in) - -
0.185 2017-04-26 fe01a1342c - - -
0.184 2017-03-29 7768128734 Bus mouse is a separate device, can be used with EVPC now TI-99/4 crashes; jerky Geneve mouse; debugging for TI-99/8; sector read on HFDC -
0.183 2017-02-22 c207031 - - -
0.182 2017-01-25 dc374ba - - -
0.181 2016-12-27 bbeda6a - - -
0.180 2016-11-29 cfc8419 - Fixed state saving -
0.179 2016-10-26 32b7e58 - - -
0.178 2016-09-28 012d47d HxC HFE format support, MAME state save capability; improved performance for 99/8 Tag for MEXP-1 RAM (led to error on start) TI-99/4 unstable, presumably buffer overflow
0.177 2016-08-31 1ecb023 New floppy sounds Stuck INT line in TMS9902; RS232 line mapping; issues with deleted marks in single density; double stepping; debugger access to cartridge -
0.176 2016-07-27 4887ce1 - - -
0.175 2016-06-29 63f9a01 - - -
0.174 2016-05-25 68785dc Per-chip system ROM dumps, new cartridge ZIP files (download from WHTech), split "paged" into "paged16k" (Atarisoft) and "paged12k" (Extended Basic); Fixed GROMEMU, fixed MBX, multi-cart can be switched without reset -
0.173 2016-04-27 cfee536 GROMs rewritten as synchronous devices; TI-99/8 mainboard rewritten; Horizon with 8M setting HOLD behavior of TMS9995; issues with paged37x cartridges; missing AlphaLock on SGCPU GROMEMU cartridges broken
0.172 2016-03-30 913ab1e - - AlphaLock does not work for SGCPU
0.171 2016-02-24 3abcaee - - -
0.170 2016-01-27 b1d6f6d - - -
0.169 2015-12-30 4afd75e - - -
0.168 2015-11-25 0825ce4 - - -
0.167 2015-10-28 47f5637 - Speech working again -
0.166 2015-09-30 8e4ced4 - - Speak command only works after preceding Speak External
0.165 2015-08-26 efa3a67 PFM512 support for Geneve; Floppy drive sounds; Cartridge types paged377, paged378 (no GROM yet); HFDC switch "wait for HD" (TB 3) Track dump images working again. 32K expansion mod is off by default now (turn on in OSD menu or choose 32kmem card) -
0.164 2015-07-29 1b452e3 Modern low-level MFM hard disk emulation. Removed legacy floppy emulation. PIO fixed (no more lockups) Track dump images (dtk) may show CRC errors.
0.163 2015-06-24 d1583b9 Removed legacies 'tifdcleg' and 'bwgleg' - -
0.162 2015-05-27 64e16ca MAME and MESS distributed as one single application - -
0.161 2015-04-29 76b978d - - -
0.160 2015-03-25 0147bb4 Added a non-toggling Alphalock key for use with physical keyboards UCSD Pascal disks do not crash the emulation anymore -
0.159 2015-02-25 6ae44e4 - - -
0.158 2015-01-28 26e7a17 - - -
0.157 2015-01-03 e6f78d5 - - -
0.156 2014-11-26 ebeaa95; switched from svn - - -
0.155 2014-10-15 svn 32761 - BwG saves double density data again -
0.154 2014-07-23 31396 Modern floppy emulation for HFDC (old one remains 'hfdc', new one is 'hfdcnew') - -
0.153 2014-04-07 29406 Modern floppy system for TI FDC and BwG (old ones renamed to 'tifdcleg' and 'bwgleg') Several fixes in HSGPL HSGPL still found to crash when initializing GRAM; new BwG corrupts image on write (MFM) - bwgleg still working
0.152 2013-12-24 26738 TI-99/8 with working Pascal Fixed BwG double density and TI FDC issues -
0.151 2013-11-09 26005 Improved timing by split memory access tms9995: Fixed decrementer bug; improved debugger access -
0.150 2013-09-17 25362 TI-99/4QI available BwG controller DIP setting defaults to DSK1-DSK4. HSGPL SCON subprogram now working. RS232 dropouts fixed. -
0.149 2013-06-12 23624 (Almost) All cartridges available via software list Introduced a new cartridge type "gromemu" which allows for 8K "GROM emulations" DSK2 and DSK3 yield IO error 6 with tifdc. BwG corrupts file on write.
0.148 2013-01-11 20193 Accepts TI99-PC disk images with bad sector map TMS99xx overflow bit; HDC9234 flag for setting delete mark -
0.147 2012-09-17 17960 Cycle-precise CPU; LOAD interrupt; configurable RESET trigger in cartslot; VDP memory now visible in Debugger READY line-driven speech output -
0.146 2012-05-21 17371 (u5) MAME / MESS merge - - 8K GROM cartriges stopped working (e.g. RXB)
0.145 2012-02-07 - Complete architectural redesign - -
0.144 2011-11-15 - - Fixed problems with GRAM Kracker -
0.143 2011-06-29 - Full RS232 connectivity HSGPL flashing; SAMS fix; no more HSGPL crash with plugged-in cartridge -
0.142 2011-04-04 - Configurable v9938 RAM (128/192), MEMEX emulation Multicolor mode -
0.141 2011-01-09 - - - HSGPL flashing does not work
0.140 2010-10-31 - - - -
0.139 2010-08-01 - GRAM Kracker. Paged379i cartridges can now host 128 KiB. EVPC fully configurable. HSGPL, SGCPU, EVPC. Lots of small fixes, now all working properly. IDE support (required rewrite)
0.138 2010-05-22 - Reorganized configuration; selectable speed for disk drives HFDC and its chipset are completely rewritten. No more crash when formatting disks/hd with HFDC. Changed speech processor to TMC 0285. HSGPL and SGCPU (TI-99/4P) broken
0.137 2010-03-14 - Track dump disk images ("PC99") Defineable noise (-4/-8) corrected -
0.136 2010-01-10 - - Noise generator adjusted for preset noises -
0.135 2009-11-07 - New cartridge types: paged379i and pagedcru; chdman now allows to create uncompressed writeable images. - -
0.134 2009-09-15 - - Fixed chdman; hard drive images stay writeable -
0.133 2009-07-23 - P-Code card ROM-only modules are usable with the automatic cartridge selector -
0.132 2009-06-16 - - - chdman sets hard drive to read-only after conversion
0.131 2009-05-03 - Multi-cartridge handling with complex images Port control fixed (CRU); TI-99/8 declared working again. -
0.130 2009-03-10 - - - TI-99/8 locks up on startup. Declared GAME_NOT_WORKING.
0.129 2009-01-06 - Geneve got a dip switch to toggle between the version 0.9 ("Swan") and version 1.0 boot eprom. - -
0.128 2008-10-20 - - Geneve hard disk regression fixed. Real-time clock init fixed (DOW was incorrectly set). Natural keyboard now takes F12 as QUIT instead of ESC (TI-99) -
0.127 2008-08-25 - - - Geneve can't read hard drive images.
0.126 2008-07-08 - Mini Memory keeps contents in NVRAM. Peripheral cards (including floppy controllers) work again; mem_mask processing fixed -
0.125 2008-05-10 - - Natural keyboard arrow keys, delete key. Peripheral cards (including floppy controllers) deactivated.
0.124 2008-03-25 - - - Floppy controllers broken due to mem_mask inverted; natural keyboard arrow keys do not work.
0.123 2008-02-09 - - Mechatronic mouse axis swapping resolved; more floppy cleanups; fixed TI99_8 regression and made the floppy drive usable. -
0.122 2007-12-30 - - Refactorings and code cleanups -
0.121 2007-11-24 - - Border is displayed again. -
0.114 2007-04-12 - - Fixed assertion failure for ti99/4a and ti99/8 -
0.98 2005-07-10 - - - Floppy access broken.