|
|
Number
of ROMs to replace:
|
|
ATARI locations: 6C (type 1) and...
...ATARI locations:
6L, 6M, 6R (type 1)
photos
thanks to Gamefixer
|
ROM Version Info
DigDug Freeplay
is available for both the ATARI and NAMCO versions of
the rev 1 ROMs (digdugb, digduga1). Please specify
your version when ordering. The versions are
different in that they display different copyright
text. Ordering the wrong version will cause a ROM
error to be displayed at power-up.
Hardware
Compatibility
DigDug Freeplay
works with
both NAMCO and ATARI hardware versions.
For some reason these Freeplay ROMs don't play to well
with MAME and the emulation of the Custom IO chip.
The inputs stop responding randomly.
When
Freeplay is enabled the START LEDs do not flash. |
|
Product Info
EPROM type: |
2732
4k x 8 |
Freeplay
DIP Setting: |
at
2C/D
(1 Coin/7 Credits)
DIP1=ON
DIP2=ON
DIP3=ON |
Replaces:
136007.101
136007.102
136007.104
136007.105 |
NAMCO Locations:
3P,
3M, 2L, 3F
ATARI locations:
6L, 6M, 6R, 6C (type 1)
2C/D, 2E, 2A, 2P (type 2) |
|
Custom I/O
Hardware
One of the hardest parts of adding Freeplay to DigDug was getting
around the special Custom I/O chip. This chip handles all of
the addition/subtraction of coins/credits. It also reads all
the inputs (joystick, pump, start buttons) and controls outputs
(start lamps, coin counter). There's some info out there
about this chip but not much. Early versions of MAME had
this emulated all wrong but it looks like that's changed in the
later versions.
Since the Custom I/O chip had so much control, it was necessary to
by pass it completely (sort of). Instead of relying on this
chip to start the game, I had to put it into "switch
mode" and read the raw inputs myself. Then it was
necessary to put the inputs into the wacky format that the game
wants to see. All in all a pretty wacked-out solution to a
pretty wacked-out game program flow. My hats off to the
original programmers that managed to make such a mess out of this
game's program! It's pretty amazing that it all comes together and
works.
Oh and having three different programs running in three different
micros didn't make things any easier either. I've never
really understood why they needed to use three micros AND a Custom
I/O chip. Seems like way overkill for a game as simple as
DigDug.
Peek at the Code
Here is a grab of DigDug
code
;----------------------------------------------------
; Only do BONUS when not in Attract Mode
;----------------------------------------------------
LD A,(08657h) ; Get DEMO Control Byte
BIT 0,A ; Is DEMO/Attract being run by CPU#1?
RET NZ ; Yes, so leave
;----------------------------------------------------
; Check for 1st BONUS Threshold
;----------------------------------------------------
LD A,(087C0h) ; Get BONUS setting
AND A ; Is there a BONUS Threshold?
RET Z ; No, so just return
;----------------------------------------------------
; Check which player is playing
;----------------------------------------------------
LD HL,08400h ; HL = Which Player is playing
BIT 1,(HL) ; Is Player2 playing?
JR NZ,L0CC0 ; Yes, so skip ahead
;----------------------------------------------------
; Check Player1 Score
;----------------------------------------------------
LD HL,08414h ; HL = Current Player1 Score
LD DE,08411h ; DE = Temp Score location
CALL L0D54 ; Copy score to temp (HL -> DE)
LD HL,0862Dh ; HL = Player1 Score
LD DE,08633h ; DE = Temp Score location
CALL L0D54 ; Copy score to temp (HL -> DE)
LD HL,08402h ;
LD (085F6h),HL ;
JR L0CD8 ; Skip ahead and check threshold
;----------------------------------------------------
; Check Player2 Score
;----------------------------------------------------
L0CC0: LD HL,08417h ; HL = Current Player2 Score
LD DE,08411h ; DE = Temp Score location
CALL L0D54 ; Copy score to temp (HL -> DE)
LD HL,08630h ; HL = Player2 Score
LD DE,08633h ; DE = Temp Score location
CALL L0D54 ; Copy score to temp (HL -> DE)
|