Quick Question About FEAL

The official paper on FEAL doesn't have any detailed algorithm
description, and instead only has annoying diagrams. So I'm not sure I
have it correct. Does this pseudo-code accurately represent the FEAL f-

-a0 denotes the first byte of a, a1 denotes the second, a2 the third,
-Since my keyboard has no exclusive-or key, I am using the ^ symbol to
represent exclusive-or.
- <<< denotes left rotation.

function f (int a, short b) {
a1 = a1 ^ b0 ^ a0;
a2 = a2 ^ b1 ^ a3;

a1 = S(a1, a2, 1);
a0 = S(a0, a1, 0);
a2 = S(a2, a1, 0);
a3 = S(a3, a2, 1);

return a;

function S (byte x, byte y, bool delta) {
return ((x + y + delta) mod 256) <<< 2;