Reset Switch
Project: Switch for resetting the C64
Target : C64, VC20, SX64
Time : 15 min.
Cost : ~ 1 US$
Use : - enhancing the computer's lifetime
- no need to reload assemblers, etc. after crash
- possibility to start monitor at any time within program
Summary
Push-button switch between
Details
Pin 3 (/RESET) of the user port is connected with pin 40 (/RES)
of the CPU. Pulling this line to LOW
(with a switch) makes the
processor getting the address stored in $fffc / $fffd (RESET vector) on
the next "0"-"1" transition of this line and thus jumping to the reset
routine located at $fce2 (original ROM). The difference between a power
on and a reset is that the latter leaves memory unchanged except
for some zeropage locations, thus not destroying any programs.
For reviving BASIC programs, you first have to restore the
BASIC pointers, as they have been reset during the BASIC cold
start executed by the kernal's reset routine:
(pO = p [Shift] o; pE = p [Shift] e)
pO2050,8:sys42291:pO46,(pE(35)-pE(781)>253):pO45,pE(781)+2and255:clr
The reset switch also enables you to have a quick look at any
program with an ML monitor by resetting the C64 and loading the
monitor with the appropriate start address. This is necessary for
programs unpacking theirselves prior to execution, for example.
The switch you will build into your C64 is for connecting the
reset line briefly to ground, which gets the mechanism described
above going.
Commodore stated in 1984 that simply shortcutting these pins via a
switch has caused harm to the C64 in some cases [1], but to
my knowledge, this simple construction serves well in hundred thousands of
C64s (or how many there are still in the field), including my own.
Note #1: You can also connect the reset switch to pin C (/RESET)
and pin A (GND) of the expansion port, but since they are both on
the backside of the PCB, this method is probably only good for
upgrading an expansion port module with a reset switch. If pin
A is absent, take pin Z, pin 1 or pin 22 instead.
Note #2: In case you have an old board where the serial reset line
is directly connected to pin 40 of the CPU, too, you can also build a
serial reset switch.
Ingredients
- 1 single-pole push-button switch (normally open)
- ~40cm of two-core cable
Instructions
- Remove all cables, then open case.
- Solder cable to switch (middle and outer pin, if there are three).
- On the other end of the cable, solder one wire to pin 1, the other one
to pin 3 of the user port. DO NOT
solder them directly onto the contact area, try soldering them to the
nearest visible bare point connected to the above pins instead.
- Connect power plug.
- Switch your C-64 on and wait for the startup screen. Then
press [SHIFT]-[CLR].
- Press the reset button. After a short delay the startup
screen should show up again.
- If everything seems fine, attach the switch to the case and close it
again. If possible, place the cable above the screening cardboard, not
beneath it.
Possible failures
- Are you sure that the push-button switch is normally OPEN?
- If resets occur occasionally when they should not, this could
be due to interferences, see section
'Fix reset problems'.
Important note! It is wise to choose a color for the reset button
which your pet does not dislike, as it is likely that it otherwise
will approach it with the intention to imPRESS it.
[1] Computer Schau, Sonderheft Nr. 201, p.60, "Resetschalter"
Updated: September 16th, 1997
Created: January 29th, 1997
Status : Verified on September 16th, 1997
Site copyright © 1997 by Marc-Jano Knopp
This document is part of MJK's Commodore 64 & LCD Page
Brought back to life by Peter Schepers, Dec 10, 2005 because I really liked this site!