Source: http://www1.cs.columbia.edu/~sedwards/classes/2013/4840/reports/6502.pdf