NewRisingSun
Member
- Joined
- May 21, 2013
- Messages
- 46
The PC version of MicroProse's Gunship in version 429.04 includes an advertisement for a sound card called "The Entertainer". Until now, no information on what it is and what it sounds like has been available. Having disassembled the game executable, it becomes obvious that The Entertainer must have been an earlier (but not completely compatible, see below) version of the Innovation SSI-2001, the sound card with the SID chip from the C64. As the "Entertainer" predates the Innovation by about a year, it would be the earliest PC sound card (save for the Mindscape Music Board, which seems to have been bundled with the only game that supports it).
The Innovation SSI-2001 has all 29 SID registers individually mapped at jumper-selectable I/O addresses 0x280-0x29D (default), 0x2A0-0x2BD, 0x2C0-0x2DD, 0x2E0-0x2FD. It also has a game port at the usual I/O address 0x201, which can be disabled.
The Entertainer on the other hand must have had all the SID registers fixed at 0x280-0x29D, as the game has those values hard-coded into the program code. But unlike the Innovation SSI-2001, it also must have had an I/O address for autodetection purposes: reading from I/O address 0x200 will return the value 0xA5. It is this value that causes Gunship to output data to the SID chip, with any other value returned causing it to play PC speaker (or Tandy/PCjr) sound instead. Since the Innovation SSI-2001 does not have this autodetection feature, Gunship does not use its SID chip. By patching the game's program files EGAME.EXE/CGAME.EXE/TGAME.EXE and TITLE.EXE replacing BA 00 02 EC with B8 A5 00 90, SID music can be heard with the Innovation SSI-2001 as well as DosBox SVN's emulation of the latter board. This patching method only works with game version 429.5 because previous versions have their program files encrypted as part of the copy protection scheme. (It will work with 429.4 once the encrypted program files have been decrypted.) The same patching procedure seems to work with all versions of Pirates! that I have checked (432.1, 432.2, and 432.3).
DosBox SVN's Innovation emuation should be updated to support said autodetection feature. This should be simple enough: when Innovation emulation is enabled, just make reads from I/O address 0x200 return 0xA5.
The Innovation SSI-2001 has all 29 SID registers individually mapped at jumper-selectable I/O addresses 0x280-0x29D (default), 0x2A0-0x2BD, 0x2C0-0x2DD, 0x2E0-0x2FD. It also has a game port at the usual I/O address 0x201, which can be disabled.
The Entertainer on the other hand must have had all the SID registers fixed at 0x280-0x29D, as the game has those values hard-coded into the program code. But unlike the Innovation SSI-2001, it also must have had an I/O address for autodetection purposes: reading from I/O address 0x200 will return the value 0xA5. It is this value that causes Gunship to output data to the SID chip, with any other value returned causing it to play PC speaker (or Tandy/PCjr) sound instead. Since the Innovation SSI-2001 does not have this autodetection feature, Gunship does not use its SID chip. By patching the game's program files EGAME.EXE/CGAME.EXE/TGAME.EXE and TITLE.EXE replacing BA 00 02 EC with B8 A5 00 90, SID music can be heard with the Innovation SSI-2001 as well as DosBox SVN's emulation of the latter board. This patching method only works with game version 429.5 because previous versions have their program files encrypted as part of the copy protection scheme. (It will work with 429.4 once the encrypted program files have been decrypted.) The same patching procedure seems to work with all versions of Pirates! that I have checked (432.1, 432.2, and 432.3).
DosBox SVN's Innovation emuation should be updated to support said autodetection feature. This should be simple enough: when Innovation emulation is enabled, just make reads from I/O address 0x200 return 0xA5.