Speedometer not at Zero

It would still zero out if the cable was bad.
The problem is in the speedo head. There is a disc and shoe that works similar to a centrifugal clutch. It is possibly binding in that area from dirt or corrosion between them. Pull the dash cluster and remove the speedometer and inspect and clean as necessary.
There is also a small clock spring that brings it back to set zero that may have broke. To fix that you'll need to remove the face which is held on by 3 small rivets remove 2 of them you can swivel it out of the way to inspect.

If the disc/shoe were really binding it most likely will also peg out fairly easy however if the spring were bad it wouldn't return the needle back.

You could just find a known good speedo head and replace it as well.

^^^ 5000% accurate.