-------------------------------------------------------
*** WPC / WPC95 Lamp Matrix Driver Rom patcher ***
(c) John Honeycutt, http://emmytech.com/arcade
This program will update the lamp matrix driver code for WPC &
WPC95 game roms to eliminate 'ghosting' when using LEDs
-------------------------------------------------------
Credits:
Thanks to Matthias "Maddes" Buecher, http://www.maddes.net/
I used his WPC_Tool Java source to understand how WPC
version codes are done and how the ROM checksum is handled.
--------------------------------------------------------
**********************************
*** Important READ LICENSE.TXT ***
**********************************
If this program is going to be of use to you, you will
be burning and installing a new rom in a pinball machine.
There is always a chance of unexpected things happening.
It is advisable to test any rom updated by this program using pinmame.
Use at your own risk.
*** Important READ LICENSE.TXT ***
--------------------------------------------------------
This program has been verified to compile under linux gcc 4.2.4
and win32 (mingw 2.0.0-3) gcc 3.2.3
http://www.mingw.org/
--------------------------------------------------------
syntax: wpclp [-f] [-e] [-n]
'-f' Optional 'force' parameter to continue even if original rom checksum
is wrong.
'-n' Optional 'no-patch' parameter to skip the patching phase.
Can be used to just update rom version and checksum without patching
the driver.
'-e' Optional 'extra-delay' parameter.
Without this option a 30uS delay will occur between clearing the
matrix row/column and writing for the next period.
(30uS is the delay inserted by the newer williams driver code.)
Specifying this option causes an extra 26 to 33uS delay to be inserted
instead of 26uS. The extra delay might help with problem boards.
-f: force option
This option is useful of the ROM has been manually modified and the
checksum is not valid.
An example is manually modifying the rom with a hex editor to
change strings, etc...
-n: no-patch option
The '-n' option can be used with the '-f' to update the checksum
and version number for a manually modified rom without attempting
to install the lamp driver patch.
-e: extra-delay
Adds an additional 30uS of delay between clearing the row/column
and writing the new row/column values.
It may help with problem boards that still exhibit ghosting even
with the updated driver.
----------------------------------------------------------
Example output:
honeycut> wpclp creat_l4.rom creat_m4.rom
==============================================================
*** WPC / WPC95 Lamp Matrix Driver Rom patcher ***
version 1.0
(c) John Honeycutt, http://emmytech.com/arcade
honeycutt7483@gmail.com
This program will update the lamp matrix driver code for WPC &
WPC95 game roms to eliminate 'ghosting' when using LEDs
==============================================================
Rom Info
--------
File: creat_l4.rom
Size: 4 M-bits (512K-Bytes)
Checksum Valid: f804
System Version: 2.52
Game Version (Old format): L-4
System ROM Offset: 00078000
---------------------------
Patching Lamp Matrix Driver...
FOUND Lamp Driver Signature at address 0x0007dc39
Done
The original ROM Version is: REV. L-4
A new version should be assigned to distinguish the new
rom from the original rom.
The format entered should be: - can be A to Z except P
can be 1 to 99
example: VERSION>M-25
Enter VERSION>m-4
Updating ROM versioning and checksum...
Writing output file: creat_m4.rom
Updated ROM file write complete.
Validating Updated ROM file...
Updated ROM Validation Passed!
Rom Info
--------
File: creat_l4.rom
Size: 4 M-bits (512K-Bytes)
Checksum Valid: fb04
System Version: 2.52
Game Version (Old format): M-4
System ROM Offset: 00078000
---------------------------
Done.
----------------------------------------------------------------
Entering the new ROM version
After starting the program it will prompt the user to enter a new ROM version.
What is being prompted for here is the ROM revision that will be displayed
when the game is powered on and when entering the service menu.
Example prompt for an L-4 ROM:
The original ROM Version is: REV. L-4
A new version should be assigned to distinguish the new
rom from the original rom.
The format entered should be: - can be A to Z except P
can be 1 to 99
example: VERSION>M-25
Enter VERSION>
Williams used serveral different formats for their ROM versioning.
* P-n Prototype eg: P-2
* L-n Production eg: L-4
* L(x)-n Another form of production or ?home use? eg: LH-1, LX-2
* major# . minor# Production eg: 1.06, 9.04
The user can update these versions as follows:
* P-n: The number portion can be updated. The letter P can not. eg: update P-2 to P-3
* L-n or L(x)-n: The letter L can be changed to any letter other than P.
The number can be updated. The second letter '(x)' portion can
not be changed.
* major# . minor#: The major number 'x' and the minor number 'y' can be changed.
----------------------------------
Revisions:
6/15/2010
1.0: Initial release
6/21/2010
1.1 -Fix little endian x86 macro check for linux 64-bit OS's.
Code wasn't properly defining hton(x) / ntoh(x) macros for 64-bit os.
-Fix command line -e option parsing.
-Add support for early driver code.
This appears to apply to ROMs whose last update was in the 1st half of 1992
or earlier. Code refers to these driver variants as 1A, 1B, & 1C.
Games with this early driver code include HD L-3, Hurricane L-2, PZ F-4, BoP L-6.
1.2 -Add support for 4th driver version seen in FT L-5
1.3 -Make code that looks for free space to patch with at end of rom smarter.
-Fix some issues with Prototype rom versioning
1.4 -Fix game versioning problem intrduced in version 1.3