I've been trying to reset an Arduino using software, as a last resort when
it all goes to rats. The 'usual' method seems to be an assembly language
jump into the bootloader code, but in the examples I've found the jump's
destination can be either 0x0000 or 0x7C00. I guess 0x0000 is the
bootloader start point, but does anyone know what lives at 0x7C00,
or why two different addresses may be used?
The “usual” way is not to jump to a location, but to make use of the hardware watchdog facility.
The “proper” way is to enable the watchdog and keep resetting it regularly. If you stop resetting it, the watchdog reboots the Arduino.
If you just want an arbitrary reset at a specific point in your code, you turn on the watchdog with a timeout big enough to get past the bootloader and don’t reset it. The board resets by itself then, and then in your setup() you turn off the watchdog (or it’ll keep resetting itself).