have you lubed your speedometer cable at all? with age the same old oil and old dirt can cause it to bind. it's possible to remove the cable fro m it's housing, it slips out the speedometer end if I remember correctly.
remove both ends of the cable assembly, remove the cable itself from the jacketing, place one end in a jar and spray wd-40 or something down through the housing to clean out all of the old lube and crud. when the wd-40 begins to come out clean...you're done. clean the cable with more wd-40 and a clean rag then reinsert it into it's jacketing and attach it to the speedometer and the speedometer drive and go test it out.
it may not be the cause, but speedometer cables sometimes will be broken inside their jacketing, they'll read sporadically sometimes or just not read at all, this way you'll know for sure.
-Alan