On a 10-rank board MAXRANK = 9, so LASTRANK>>1 should be 4. That should give you 4 steps from the back rank (rank 0 for white and 9 for black). From their starting rank it should be 3 steps. I don't see anything wrong here. In particular, I don't see how white and black Pawns could behave differently.
Can the GAME-code variable 'lastrank' actually return the number of board files (minus 1)?
I don't understand that. The * range is encoded as -1 in the tables, which is then dynamically replaced by the actual range in the move generator:
In infix notation this reads
On a 10-rank board MAXRANK = 9, so LASTRANK>>1 should be 4. That should give you 4 steps from the back rank (rank 0 for white and 9 for black). From their starting rank it should be 3 steps. I don't see anything wrong here. In particular, I don't see how white and black Pawns could behave differently.
Can the GAME-code variable 'lastrank' actually return the number of board files (minus 1)?