The vexed problem of generating delays in a CP/M program

from blog Kevin Boone's website, | ↗ original
CP/M has no timing or delay functions, because CP/M never stipulated that compatible hardware have any kind of clock. So how do we implement short (fractions of a second) delays in a CP/M program?