- Details
- Category: Setup
The TI-99/4A emulation offers two kinds of cartridge formats:
- the common ZIP format for ROM packages in MAME
- the RPK format
The first format is used throughout MAME for bundling ROM dumps that belong to some collection, for example, all ROMs for a computer system. In the same way, all ROMs of a cartridge are stored in a single ZIP file, which must be added to the software list, a XML file in the hash subdirectory. For the TI, this would be the file ti99_cart.xml.
The second format was the result of an earlier attempt to find a format for cartridges. Later, the ZIP format became the recommended format for cartridges, but it has a shortcoming: It depends on an update of the mentioned XML file. The RPK format, on the other hand, allows the user to set up a self-contained cartridge package that can be used right away. For this reason, the RPK format was kept in MAME.
I will elaborate on the details of both cartridge formats in a separate document.
Creating a ZIP cartridge
to be added
Creating a RPK cartridge
There are some points to follow, but this is not really difficult.
- You have to collect all dumps that shall be part of the cartridge. These are the dumps of memory in ROM space and in GROM space. Also, you need to check whether the cartridge offers RAM space or NVRAM space (which is saved on shutting down).
- You have to determine the type of the cartridge. The type is relevant for the function of the cartridge board where the ROMs are located.
- Now you have to set up the defining XML file called layout.xml. It must be part of the cartridge package. This is an example for a "gromemu" type:
<?xml version="1.0" encoding="utf-8"?>
<romset version="1.0">
<resources>
<rom id="gromimage" file="TETRISg.bin"/>
</resources>
<configuration>
<pcb type="gromemu">
<socket id="grom_socket" uses="gromimage"/>
</pcb>
</configuration>
</romset>
The most important parts are marked up in magenta. The PCB type is gromemu, and the ROM dump file is called TETRISg.bin. It is referenced by the "gromimage" tag, and the "socket" element declares it to be a GROM image by using the ID "grom_socket". You can use any other tag for "gromimage", and the file may also have any name.
Note that there is no format for the dump file name; the "g.bin" at the end of the file name has no special meaning for MAME. This is different to other emulators where the file name also determines its type; in the RPK format, the meaning of the dump file is determined by the socket element.
- Create a ZIP file from the dump files and the layout.xml. All these files must be part of the package.
- Change the suffix of the ZIP file to "rpk".
- Details
- Category: Setup
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.
If your system does not have the required libraries, you will see an error message like this:
$ ./mame ti99_4a
./mame: error while loading shared libraries: xxxx: cannot open shared object file: No such file or directory
The xxxx is the file name of the missing library file. The package name is usually slightly different.
openSUSE Tumbleweed
(July 2023)
sudo zypper install libSDL2_ttf-2_0-0
Ubuntu 22.04 LTS
sudo apt-get install libsdl2-2.0-0
sudo apt-get install libsdl2-ttf-2.0-0
sudo apt-get install libqt5widgets5
Installing the TTF lib will also install the SDL2 base lib, so you may skip the first command.
Linux Mint 19.3
sudo apt install libsdl2-ttf-2.0-0
sudo apt install libqt5widgets5
- Details
- Category: Setup
I will give some hints for installing MAME on a Raspberry Pi 4.
Keep in mind that MAME requires a lot of performance from the CPU. As shown in the Requirements section, you will need at least a Raspberry Pi 4.
Running MAME
MAME is dynamically linked against some libraries which may not be installed on your machine.
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.)
Raspberry Pi OS
Debian version 11 (bullseye)
sudo apt install libsdl2-ttf-2.0-0
- Details
- Category: Setup
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, 10, 11). 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. Uninstalling means that you just remove the MAME directory.
Configure it once
Open a command shell and type (in black)
C:\Users\Whoever> cd \prg\mame
C:\prg\mame> mame -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 ti99_complete.zip from the directory /System ROMs/MAME. Unzip its contents into the roms subdir. Do not unzip the zip files inside.
Also from WHTech, download all_carts.zip 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.
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
c:
cd \prg\mame
mame 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 the specified disk or cassette image files are actually present at the indicated paths (or in the working directory if no path is specified).
c:
cd \prg\mame
mame ti99_4a -cass1 cassette.wav
Example 2
External 32K memory expansion, TI floppy controller, myfloppyimage.dsk inserted in DSK1
c:
cd \prg\mame
mame 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
c:
cd \prg\mame
mame 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
c:
cd \prg\mame
mame 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
c:
cd \prg\mame
mame 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
c:
cd \prg\mame
mame geneve -peb:slot4 horizon -peb:slot5 spchsyn -peb:slot6 tirs232 -peb:slot8 hfdc -ioport:peb:slot8:hfdc:h1 generic -hard1 myharddisk.hd
Reconfiguration
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.
- Details
- Category: Setup
There are good reasons to install MAME from the distributions or from the website as is, but also a lot to build it from the source code.
- Details
- Category: Setup
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 ...).
As Raspberry Pi OS is just a Debian Linux, you will find instructions for both platforms on this single page.
Required libraries
The following descriptions apply to MAME release 0.256 and higher.
You need
- gcc / gcc-c++ version 10 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)
Ubuntu
Ubuntu users need to make use of the apt(-get) command or check the software repository tools.
For Ubuntu 22.04 and newer, the following packages are required:
sudo apt install git
sudo apt install make
sudo apt install g++
sudo apt install qtbase5-dev
sudo apt install libsdl2-ttf-dev
sudo apt install libfontconfig-dev
or with a single line:
sudo apt install git make g++ qtbase5-dev libsdl2-ttf-dev libfontconfig-dev
openSUSE
(July 2023)
For an openSUSE installation, either use YaST or (if not already installed) follow this path:
sudo zypper install git-core
sudo zypper install make
sudo zypper install gcc-c++
sudo zypper install libSDL2_ttf-devel
sudo zypper install alsa-devel
sudo zypper install fontconfig-devel
sudo zypper install libqt5-qtbase-devel
sudo zypper install libXi-devel
sudo zypper install libpulse-devel
sudo zypper install libXinerama-devel
or with a single line:
sudo zypper install git-core make gcc-c++ libSDL2_ttf-devel alsa-devel fontconfig-devel libqt5-qtbase-devel \\
libXi-devel libpulse-devel libXinerama-devel
Raspberry Pi OS
Debian version 11 (bullseye)
Building on the older Raspbian OS is not possible after release 0.254.
The following description refers to the Raspberry Pi OS with desktop installation. You need to use the apt(-get) command or check the software repository tools.
git, make, g++ are already available.
The following packages are required:
sudo apt install qtbase5-dev
sudo apt install libsdl2-ttf-dev
sudo apt install libfontconfig-dev
or with a single line:
sudo apt install qtbase5-dev libsdl2-ttf-dev libfontconfig-dev
Getting the sources
Use git to clone the repository to your local drive:
git clone https://github.com/mamedev/mame.git
This will create a mame directory containing a ready-to-use makefile.
When you want to get a current version, use the git pull command.
git pull
If you want to build a specific release or based on a particular commit, use git checkout.
git checkout b41370db026
This will set your repository to the state when the 0.256 release was published. Alternatively, you can use the tag mame0256:
git checkout mame0256
Compiling
A makefile is included with the MAME distribution so you can easily start the build process with make.
Cleaning the build environment is optional, but if you experience problems when compiling, try to clean first.
make clean
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 10. You can also use clang by
OVERRIDE_CC=clang OVERRIDE_CXX=clang++
(possibly with version number, like clang-13, clang++-13)
After compiling has finished, you should have a freshly built mame executable file.
Special comments for Raspberry Pi
Although the Raspberry Pi 4 is the most powerful Raspberry computer, it will run into heavy thrashing during the build process, which means it seems to make no more progress after some time. Do not stop the it. It may take some hours until the process is complete, but it will eventually reach its goal.
One particular slow point during compilation occurs when compiling the files src/emu/emumem_*.
One thing you can do is to tell your Raspberry to avoid swapping as long as possible. The parameter for this is called swappiness, and it is set to 60 by default. Maybe try 25 or lower. You can make this change permanent. Add the following line to the /etc/sysctl.conf file:
vm.swappiness=25
Many sources recommend not to increase the swap space on the Raspberry Pi, as this swap space is located on the SD card, and this will lower the lifetime of the flash memory on the card. However, I noticed that during building, all of the 4 GiB of main memory was used up, and the small swap space (100 MiB) was also gone, and from here, the system dropped into thrashing hell. So I increased the swap size to 1 GiB, and the atop tool showed me that the build process drew another 600 MiB from the swap file. But then, it continued.
Also, while you should make use of the -j parameter for Linux on PCs, you may get better results on a Raspberry Pi with fewer processes. If your Raspberry Pi gets stuck in thrashing, try building with a single job (just leave away the -j option). Also, once the emumem files have been built, you may interrupt the process and restart it with more parallel processes.