Wilbert Pol is an emulation enthusiast who has worked on several MESS drivers.
Wilbert is planning to work some more on:
Stuff to work on for the PC drivers:
Important achievements for the PC drivers will be:
A short overview of different IBM PC models:
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:
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:
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
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.
The following directory/file structures can be used:
Where 'roms' is a folder pointed to by the rompath configuration from the ini file(s).
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_ENDTODO '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