Watchdog

From NeoGeo Development Wiki
Revision as of 20:16, 9 May 2019 by Furrtek (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The watchdog can be physically disabled for troubleshooting purposes by connecting pin DOGE (watchDOG Enable, NEO-B1 pin 94, J2 jumper on some boards) to ground.

The watchdog is an automatic reset system to prevent games from freezing due to a bug or a hardware fault. It's a common feature of arcade hardware and many electronic systems.

On the NeoGeo, it consists of an internal frame counter which resets the whole system if it goes over a certain value. To avoid this, the software needs to regularly reset the counter by writing any value to REG_DIPSW (to "kick" the watchdog). VBlank routines typically take care of this task, so care has to be taken when the interrupt is disabled.

A constantly resetting system produces the click of death: a typical clicking sound, giving a clue for solving boot issues.

The NeoGeo CD 2 also has a watchdog timer ?

Timings

This isn't verified.

Charles mvstech.txt specifies this:

/RESET low          3 244 030 cycles
/RESET high         8 120 860 cycles
Total time         11 364 890 cycles

MAME's source says that a 0.128762s long loop sometimes resets the system.

The counter is clocked by the CHBL signal.

  • 3244030 cycles corresponds to 8 frames.
  • 8120860 cycles corresponds to 20 frames (- 7 lines).
  • 128762µs is 3090288 cycles, which corresponds to about 7.6 frames.

A looping watchdog reset gives a steady 3.7Hz RESET signal, matching the duration of 2 times 8 frames (135.17ms).

As a security measure

The watchdog is used as a form of protection on a number of games, previously this was implemented as a specific hack which locked a single address of SRAM. If the game doesn't find valid data in the backup ram it will initialize it, then sit in a loop. The watchdog should then reset the system. If the watchdog fails to reset the system the code will continue and set a value in backup ram to indiate that the protection check has failed.