This is the conversion from the "low cam" 8-bit RPM values used for VTEC crossover points and in the low-cam tables.

It involves some modular arithmetic, so it's easier to break it up into a couple extra steps.

# Y = input value, 0 to 256
# let H = floor(Y/64) ''Where floor(x) = trunc(x) = int(x) = integer part of x. Fractional part truncated. Whatever you want to call it''
# let L = Y - (H-1)*64
# RPM = 1875000 * L * 2^H / 240000

You can also do it this way, using the modulo operator:
# Y = input value, 0 to 256
# Q = Y div 64 ''(integer division, same as floor(Y/64) above)''
# R = Y mod 64 ''(modulus, i.e. remainder after division)''
# RPM = (2^Q)*(floor(R*500/64) + 500)

This turns out to be a piecewise linear scale:

- 00h-40h = 500-1000 RPM
- 40h-80h = 1000-2000 RPM
- 80h-C0h = 2000-4000 RPM
- C0h-100h = 4000-8000 RPM

EDITED COMMENT: <---- Linear scale??? yeah right!...this formula need to go back to the "drawing board". The values below shows a perfect exponential scale! I have trying this equation and it does not get exact values. Ben's equation on BRE are more accurate at least on test values...( I don't know the formula for BRE))
That's ''piecewise''-linear. Four linear ranges. It's not a smooth exponential curve. The first formula fairly closely follows the OBD1 code, while the second is a simplification which gets slightly different results with integer math. By what measure do you consider which is more accurate? See http://pgmfi.org/phorum/read.php?f=13&i=3314&t=2968 for reference. --AndySloane