I usually use the cross product of the directions to two other points close to the current vertex. In your case one could of course simplify that a bit. No idea if it fits into the shadermodel though...
If I didn´t confuse a1-3 and b1-3 something like this should do the job:
float height = sin((vecTime.w + inPosition.x) * 0.1) * 8;
float heightnext = sin((vecTime.w + inPosition.x+VERTDISTINX) * 0.1) * 8;
inPosition.y += height;
inNormal = normalize(float3((heightnext-height)*VERTDISTINX, -VERTDISTINX*VERTDISTINX, 0.0));