Wilbert Pol

Wilbert Pol is an emulation enthusiast who has worked on several MESS drivers.

Current Focus

  • Modernize CPU cores
  • Rewrite the TIA code to use a state machine so it will work like the actual hardware.

Other Drivers

Wilbert is planning to work some more on:

  • Fix the gameboy driver. Making nice progress already.
    • Add support for MBC7 mapper to the gameboy drivers
    • Add support for TAMA3 mapper to the gameboy drivers
  • Fix the color gameboy driver. The color gameboy has already seen some improvements because of the improvements made to the gameboy driver
  • Replace the current super gameboy driver by a combination of the snes and gb drivers
  • Continue work on the Tiger Game.com driver
  • Improve the Wonderswan drivers
  • Improve the TG16/PC Engine driver(?)
  • Add tms1xxx/tms12xx cpu core
  • Making more cpu cores cycle exact
  • Clean up old mess drivers(?)
  • Possibly work on the 3DO driver

PC Drivers

Stuff to work on for the PC drivers:

  1. Add 8087 FPU support.
  2. Add 80287(?) FPU support.
  3. Fix cpu core issues.
  4. Add proper MCGA support.
  5. Add proper EGA support.
  6. Update pc_aga video code to use the mc6845 device. pc_aga is a combined Hercules and Plantronics graphics card.
  7. Finish/fix EGA (scrolling doesn't work right in Commander Keen 4 or Bio Menace, could be other issues) and VGA support
  8. Dual head support for IBM 5150.

Goals

Important achievements for the PC drivers will be:

  1. Clean drivers.
  2. Clean graphics card implementations.
  3. Working AT HDD emulation.
  4. IBM PC Jr POST passing without errors
  5. IBM AT POST passing without errors
  6. Windows 3.1 working.
  7. DMESS running inside MESS. :)
  8. Windows 95 working.
  9. VGA test suite passing.

IBM PC Models

A short overview of different IBM PC models:

  1. 1981, IBM 5150 PC, 4.77Mhz 8088
  2. 1983/1984, IBM PCjr, 4.77Mhz 8088
  3. 1983, IBM 5160 XT, 4.77Mhz 8086, 10MB hard disk
  4. 1984, IBM 5155
  5. 1984, IBM 5170 AT, 6Mhz 80286
  6. 1986, IBM AT, 8Mhz 80286
  7. 1986, IBM XT, 80286, 20MB hard disk
  8. 1987, IBM PS/2 Model 30, 8Mhz 8088, MCGA
  9. 1987, IBM PS/2 Model 50/60, 10Mhz 80286, VGA
  10. 1987, IBM PS/2 Model 80, 20Mhz 80386, VGA
  11. 1987, IBM PS/2 Model 25, 8Mhz 8086
  12. 1988, IBM PS/2 Model 70, 16Mhz/20Mhz/25Mhz 80386
  13. 1988, IBM PS/2 Model 30 286, 10Mhz 80286, VGA, 20MB hard disk
  14. 1990, IBM PS/1, 10Mhz 80286, VGA

Adding "Supported Software" to the MESS/MAME Framework

Document well-known/supported software for a machine driver using XML files. The XML structure is slightly more complex than the XML structure used for the current hashfiles.

For each piece of software the following information is included:

  1. name + description
  2. publisher
  3. year (as seen on title screen)
  4. software part information
    1. rom/file information: size, crc, sha1, etc

The XML file will only store basic information about the software title. Advanced information like local release names, exact release dates, serial number, per country release dates, etc can be stored and maintained in other external resources. It's MESS's responsibility to provide basic documentation of the software and make sure it can emulate the software; other people are more knowledgeable on specific details on software for specific systems.

Examples:

  1. mess machine_name -cart1 software_name
  2. mess machine_name -cart1 software_name -cart2 software2_name
  3. mess machine_name -cart1 cd_bios_software_name -cdrom1 /path/to/my/created.chd
  4. mess machine_name -cart1 /path/to/my/other/software.zip
  5. mess machine_name -cart1 software_name -cart2 /path/to/my/other/software.zip

Interface Check

When specifying a software part to load for a particular device (cartridge slot, cassette player, floppy drive, etc) the emulator will always perform an interface check. This interface check will verify that the interface of the software part will match the interface specified for the particular device. The check will only be performed when there is an interface specified for the particular device.

This check will not allow a user to insert a gameboy cartridge in the megadriv cartridge slot and it will also not allow a user to insert a 3.5” floppy disk in a 5.25” floppy drive

Software naming

str1:str2:str3

This form is explicitly telling the emulator to look in software list 'str1' for software named 'str2' and to open the software part named 'str3'. Before actually loading the software part the emulator will first perform an interface check.

When no matching software part could be found the emulator will fall back to the old way of loading.

str1:str2

Firstly the emulator will go through the software lists configured in the driver looking for software named 'str1' with a part named 'str2'. Before actually loading the software part the emulator will perform an interface check.

When no software part could be found the emulator will look for software named 'str1' with a part named 'str2' in the software list with the same name as the driver. Before actually loading the software part the emulator will perform an interface check.

When no software part could be found the emulator will look in software list 'str1' for software named 'str2'. The emulator will go through all software parts and select the first part that passes the interface check.

When still no matching software part could be found the emulator will fall back to the old way of loading.

str1

Firstly the emulator will go through the software lists configured in the driver looking for software named 'str1'. The emulator will go through all software parts and select the first part that passes the interface check.

When no software part could be found the emulator will look for software named 'str1' in the software list with the same name as the driver. The emulator will go through all software parts and select the first part that passes the interface check.

When still no matching software part could be found the emulator will fall back to the old way of loading. Software loading

Each 'dataarea' of a software part will be loaded as a separate rom region. To prevent clashes with the names of other rom regions the names of the rom region will be created by concatenating the device tag, a colon, and the name of the 'dataarea'.

If the same software part is attached twice to different devices then this will cause the software part to be loaded twice.

Directory/File structure - old

The following directory/file structures can be used:

  1. roms/machine_name.zip
  2. roms/machine_name/machine_rom.rom
  3. roms/machine_name/software_name.zip
  4. roms/machine_name/software_name/software_rom.rom

Where 'roms' is a folder pointed to by the rompath configuration from the ini file(s).

Adding software to the source code - old

TODO

static SOFTWARE_LIST_START(list_name)
  SOFTWARE_IMPORT_LIST( other_list )
 
  /* software_name - short reference name for the software */
  /* cloneof - software is a clone of a different piece of software */
  /* releasedate - yyyy, or yyyy-mm, or yyyy-mm-dd */
  /* fullname - full name of the software */
  SOFTWARE( software_name, cloneof, releasedate, companies, fullname, flags )
 
    /* Add possibility to set some system additional information tags for region, language, etc? */
 
    /* re-use rom_load/rom_region macros here? Be wary of creating duplicate rom_region names here (eg when loading 2 carts) */
 
    SOFTWARE_ITEM_CARTRIDGE( "cartridge", 0 )
      SOFTWARE_PCB( "pcb_type" )
      ROM_REGION( rom_size, "rom", 0 )
      ROM_LOAD( "rom_name", rom_size, CRC(crc) SHA1(sha1) )
 
      ROM_REGION( rom2_size, "vrom", 0 )
      ROM_LOAD( "rom2_name", rom2_size, CRC(crc) SHA1(sha1) )
 
 
    SOFTWARE_ITEM_DISKETTE( "floppy1", FLOPPY_525_HD_SS )
      ROM_REGION( disk1_size, "floppy1", 0 )
      ROM_LOAD( "disk1_name", disk1_size, CRC(disk1_crc) SHA1(disk1_sha1) )
 
 
    SOFTWARE_ITEM_DISKETTE( "floppy2", FLOPPY_35_DD_DS )
      ROM_REGION( disk2_size, "floppy2", 0 )
      ROM_LOAD( "disk2_name", disk2_size, CRC(disk2_crc), SHA1(disk2_sha1) )
 
 
    SOFTWARE_ITEM_CD( "cd", 0 )
      DISK_REGION( "cd" )
      DISK_IMAGE( "cd_name", 0, cd_hash )
 
  ....
 
SOFTWARE_LIST_END
TODO 'how': How to handle multi device software titles (games on 3 floppies, or a cassette image with side A and side B) ?

Example for the epoch game pocket:

static SOFTWARE_LIST_START( gamepock )
    SOFTWARE( astrobom, 0, "198x", "Epoch", "Astro Bomber", 0 )
        SOFTWARE_ITEM_CARTRIDGE( "cartridge", 0 )
            ROM_REGION( 0x2000, "rom", 0 )
            ROM_LOAD( "astrobom.bin", 0, 0x2000, CRC(b0fd260f) SHA1(453a0f3c0952ebd8e691316c39960731f1996c09) )
    SOFTWARE_END
 
    SOFTWARE( blockmaz, 0, "198x", "Epoch", "Block Maze", 0 )
        SOFTWARE_ITEM_CARTRIDGE( "cartridge", 0 )
            ROM_REGION( 0x2000, "rom", 0 )
            ROM_LOAD( "blockmaz.bin", 0, 0x2000, CRC(cfb3291b) SHA1(50dc5736200986b326b372c17c233c4180474471) )
    SOFTWARE_END
 
    SOFTWARE( pokemahj, 0, "198x", "Epoch", "Pokekon Mahjongg", 0 )
        SOFTWARE_ITEM_CARTRIDGE( "cartridge", 0 )
            ROM_REGION( 0x4000, "rom", 0 )
            ROM_LOAD( "pokemahj.bin", 0, 0x4000, CRC(5c3eed48) SHA1(918e1caa16cfae6b74da2026f3426d0a5818061c) )
    SOFTWARE_END
 
    SOFTWARE( pokereve, 0, "198x", "Epoch", "Pokekon Reversi", 0 )
        SOFTWARE_ITEM_CARTRIDGE( "cartridge", 0 )
            ROM_REGION( 0x2000, "rom", 0 )
            ROM_LOAD( "pokereve.bin", 0, 0x2000, CRC(1c461f91) SHA1(ead4a4efe5439e2ec1f6befb50c350f73919da8d) )
    SOFTWARE_END
 
    SOFTWARE( soukoban, 0, "1985", "Epoch", "Soukoban - Store Keepers", 0 )
        SOFTWARE_ITEM_CARTRIDGE( "cartridge", 0 )
            ROM_REGION( 0x2000, "rom", 0 )
            ROM_LOAD( "soukoban.bin", 0, 0x2000, CRC(5d6f7819) SHA1(61ef6483e8f9935dd8b6351fd2bdfda3af3899bd) )
    SOFTWARE_END
SOFTWARE_LIST_END