MESS cartridge handling

From Ninerpedia
Jump to navigation Jump to search

For the MESS emulation of the TI-99 computer family we have two different cartridge handlings.

The RPK files are cartridges which contain the memory dumps as files and another file (layout.xml) which informs the emulation which file belongs to which part of memory. This was designed mainly by me at times where the user had to install the dumps at the proper locations himself.

RPK cartridges have to be installed by giving the path name of the file. That is, you would have to specify /home/michael/mess/carts/editor_assembler.rpk, just like a disk image file.

The ZIP files are a more recent format (and have become the standard MAME/MESS cartridge format) which merely differ from the RPK files by not including the XML file, but only the dump files. The layout is defined inside MAME/MESS. The file name is also defined in that file, so the name of the cartridge zip file must exactly match the name in the internal file.

Both formats have their pros and cons.

RomPacK cartridge images (RPK)

Concept

In early MESS releases, cartridges consisted of separate ROM dumps, namely for ROM and GROM. This requires the user to mount both dumps in one cartridge slot each. The current MESS releases have a different cartridge management that simplifies handling and allows for some additional features:

  • Cartridges which consist of multiple dumps (ROM, GROM) can now be stored in a single file.
  • Mounting of memory dumps is defined inside the file and is performed automatically after inserting.
  • Cartridges can contain RAM (volatile or NVRAM).

This package file (suffixed by .rpk) is essentially a ZIP file which contains all dumps and the information how to set up the cartridge in the emulation. You can use any unzip utility to unpack the RPK file, or to create it again. For instance, the Extended Basic RPK file contains these files:

extendedbasic.rpk:
   exbasicc.bin
   exbasicd.bin
   exbasicg.bin
   layout.xml

The "bin" files are ROM dumps. The layout.xml file defines the meaning of these dumps. For instance, it will declare that:

  • exbasicc.bin is the ROM dump of the CPU address area >6000 to >7FFF (bank 0)
  • exbasicd.bin is the ROM dump of the CPU address area >6000 to >7FFF (bank 1)
  • exbasicg.bin is the GROM dump. All GROM contents are stored in a single file, where each GROM must be padded to a size of 8 KiB.

The layout file defines the role of the respective ROM dumps, and selects one of five predefined handlers in the MESS emulator. This is an extensible concept, which means that as soon as we discover new cartridge types, more handlers can be added to the emulation.

This is the layout file for the Extended Basic cartridge:

<?xml version="1.0" encoding="utf-8"?>
<romset version="1.0">
   <resources>
      <rom id="gromimage" file="exbasicg.bin"/>
      <rom id="romimage1" file="exbasicc.bin"/>
      <rom id="romimage2" file="exbasicd.bin"/>
   </resources>
   <configuration>
      <pcb type="paged">
         <socket id="rom_socket" uses="romimage1"/>
         <socket id="rom2_socket" uses="romimage2"/>
         <socket id="grom_socket" uses="gromimage"/>
      </pcb>
   </configuration>
</romset>

The file contents is an XML document following these conventions:

  • The root element is <romset>
  • Each dump is found in a <rom> element in the <resources> section.
  • In the <configuration> section, the <pcb> element defines the cartridge type.
  • Each socket refers to exactly one resource defined above.

Types

The available cartridge types for the TI emulation are defined as follows.

PCB Type Meaning Sockets Used by
standard Cartridges with 0 or 1 ROM and 0 or 1 GROM dump. rom_socket, grom_socket Most cartridges
paged Cartridges with 2 ROMs and 0 or 1 GROM dump. Extended Basic is known to use this format. rom_socket, rom2_socket, grom_socket Extended Basic and many Atarisoft games
minimem Cartridges with 1 ROM (4K) and 1 persistent RAM (4K) and 0 or 1 GROM dump. rom_socket, grom_socket, ram_socket Mini Memory
super Cartridges with 1 RAM (32K) and 0 or 1 GROM dump. grom_socket, ram_socket SuperSpace II
mbx Cartridges with 1 ROM, 1 RAM (1K, persistent) and 0 or 1 GROM dump. rom_socket, grom_socket, ram_socket MBX cartridges
paged379i Cartridges with one ROM of 8K to 128K rom_socket New cartridges with LS379 selector
paged378 High-capacity cartridges with one ROM of up to 512 KiB. GROM space not supported yet. rom_socket New cartridges with LS378 selector
paged377 High-capacity cartridges with one ROM of up to 2 MiB rom_socket New cartridges with LS377 selector
pagedcru Cartridges with one ROM of 8K to 64K rom_socket Cartridges with CRU banking (like DataBioTics)
gromemu Paged cartridges with GROM emulation (full 8K) grom_socket, rom_socket, rom2_socket RXB and other cartridges with emulated GROMs

Examples

Editor/Assembler:

<?xml version="1.0" encoding="utf-8"?>
<romset>
   <resources>
      <rom id="gromimage" file="ed-assmg.bin"/>
   </resources>
   <configuration>
      <pcb type="standard">
         <socket id="grom_socket" uses="gromimage"/>
      </pcb>
   </configuration>
</romset>

MiniMemory:

<?xml version="1.0" encoding="utf-8"?>
<romset>
   <resources>
      <rom id="gromimage" file="minimemg.bin"/>
      <rom id="romimage" file="minimemc.bin"/>
      <ram id="bufferedRam" type="persistent" file="minimem.nv" length="4096" />
   </resources>
   <configuration>
      <pcb type="minimem">
          <socket id="rom_socket" uses="romimage"/>
          <socket id="grom_socket" uses="gromimage"/>
          <socket id="ram_socket" uses="bufferedRam"/>
      </pcb>
   </configuration>
</romset>

SuperSpace II (do not mount the supcartc.bin which can be found on some servers; it is just the image of the empty ram):

<?xml version="1.0" encoding="utf-8"?>
<romset version="1.0">
   <resources>
      <rom id="gromdump" file="supcartg.bin"/>
      <ram id="ssram" file="superspace.nv" type="persistent" store="external" length="32768" />
   </resources>
   <configuration>
      <pcb type="super">
         <socket id="grom_socket" uses="gromdump"/>
         <socket id="ram_socket" uses="ssram"/>
      </pcb>
   </configuration>
</romset>

Sewermania (although there may be better examples; I don't know whether it makes use of the RAM at all):

<?xml version="1.0" encoding="utf-8"?>
<romset version="1.0">
   <resources>
      <rom id="gromimage" file="sewermaniag.bin"/>
      <ram id="mbxram" store="external" type="persistent" file="sewermania.nv" length="1024" />
   </resources>
   <configuration>
      <pcb type="mbx">
         <socket id="grom_socket" uses="gromimage"/>
         <socket id="ram_socket" uses="mbxram"/>
      </pcb>
   </configuration>
</romset>

Do it yourself

If the cartridge which you want to use is not available as an RPK, just do the following:

  • Determine the type of the cartridge. This is something you have to figure out. If you find a *d.bin file, it is "paged"; the "minimem" type is only used by MiniMemory, and the "super" type belongs to SuperSpace II. That is, you need to check whether the cartridge is an MBX cartridge or not, and accordingly use the type "standard", "paged", or "mbx".
  • Create a layout file as shown above. Use the rom dump file names in the references. Name the file "layout.xml".
  • Create a ZIP archive file named mycartridge.rpk (or any other name). Put the ROM dumps and the XML file in the archive.

Usage notes

You can have several different instances of a cartridges. For example, you could have two different MiniMemories. Since the memory contents are stored in a file in the nvram folder and not in the RPK, you could modify the layout.xml of one cartridge and change the backup file name. That way, either cartridge has its own saved memory without overwriting one another. Also, you can easily change the cartridge contents, in particular when there are new releases. RXB is such a case. Also, not all RPK features have been included in the zip file handling, in particular we do not have NVRAM definitions, which are required by cartridges like MiniMemory or SuperSpace.

Note that names for RPKs are completely free to choose.

MAME cartridge format (ZIP)

Concept

The ZIP format is directly supported by the MAME core. In order to plug in a cartridge you have to specify the name of the cartridge, not the path name of the file.

Unlike the RPK format, the ZIP format only contains the ROM dumps (ROM or GROM), no XML files. Instead of layout.xml, the MAME emulator brings its own cartridge specification, called the software list or softlist. You can consider it to be a concatenation of all layout.xml contents.

Since this softlist is part of the emulator distribution, you cannot change it, especially not add any new cartridges. This must be done my the MAME maintainers. The background of this concept is that it shall be ensured that cartridge contents are preserved in an unchanged way (the archival concept of MAME). That is, the MAME core rejects cartridges that have modified contents, compared to the fingerprints inside the emulation.

Of course, this is only an advantage from the archival viewpoint; it does not consider "homebrew" software that is currently still being developed. Some discussion among the MAME developers mentioned a possible way to allow for a user-defined XML file (somewhat like the internal softlist, but editable and under user control). Other people voted for using the RPK system for this purpose. Until such a solution shows up, the RPK format will continue to be supported.

Types

The available cartridge types for the TI emulation with the ZIP format are defined as follows.

PCB Type Meaning Sockets Used by
standard Cartridges with 0 or 1 ROM and 0 or 1 GROM dump. rom_socket, grom_socket Most cartridges
paged Cartridges with 2 ROMs and 0 or 1 GROM dump. Extended Basic is known to use this format. rom_socket, rom2_socket, grom_socket Extended Basic and many Atarisoft games
gromemu Paged cartridges with GROM emulation (full 8K) grom_socket, rom_socket, rom2_socket RXB and other cartridges with emulated GROMs

As shown, many types are missing, in particular those which contain RAM (which is not yet supported in the ZIP system in MAME) and those that refer to new cartridges (mostly homebrew modules). For those you have to use the RPK system.

Usage notes

Using the ZIP system is more comfortable in many occasions; there is much less typing. To plug in the Editor/Assembler cartridge you just provide the name "editass", but you don't need to remember the file name of the RPK or where it is located. Moreover, the MAME core can look up the cartridge in case you do not know the exact name, and it tries some fuzzy search:

./ti99 -cart edit

"edit" approximately matches the following
supported software items (best match first):

* Software list "ti99_cart" (TI-99/4A cartridges) matches:
editass           Editor/Assembler
edasseb           Editor Assembler 1987 / Easy Debugger 2.1
speeched          Speech Editor
edupack           Edu-Pack
pertest           Peripheral Diagnostic Module
alienadd          Alien Addition
earlyrd           Early Reading
addseq            Milliken Math Sequences - Addition
perrecdi          Personal Record Keeping (German/Italian)
readadv           Reading Adventures
readflt           Reading Flight
readtrl           Reading Trail
centipd           Centipede
escape            Escape
blackhl           Black Hole
burgerbd          Burger Builder

FATALERROR: Device TI-99 cartridge load (edit) failed: File not found