Site Map | Contact Info | Home  
  
 Home
Products
 
Kangaroo FREEPLAY
   Dragon's Lair Enhancement
   Space Ace Enhancement
   Phoenix FREEPLAY
   Frogger FREEPLAY
   Donkey Kong Foundry
   DigDug FREEPLAY
   D2K Jumpman Returns
 ROMHACK Toolbox
 Ordering Info
 Code Disassembly
 My Gameroom
 Links

 

 
Freeplay for DigDug | Technical | Ordering Info   
  

Number of ROMs to replace:

Technical

 


ATARI locations: 6C (type 1) and...
   
...ATARI locations: 6L, 6M, 6R (type 1)
 photo
s 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)


 

HOME  

 ROMHACK 2009