「Linuxから目覚めるぼくらのゲームボーイ」p52 dungeon.c 解析

このプログラムのキモは、仮想マップを実際のタイルマップに変換することで、61行目から73行目となっている。
大体のアルゴリズムは把握できたのだが、64行目の

d = (v / (BG_WIDTH / 2)) * BG_WIDTH + (v % (BG_WIDTH /2)) * 2;

のエレメントからのタイル定義からタイル番号をdに代入する一行なのだが、
BG_WIDTH は、16 で、
d = (v / 8) * 16 + (v % 8) * 2;
となり、v は23行目からの vmap 配列の要素(0〜7)が入る。
となると、マクロ展開したあとのリストの、「v % 8 」って、vは8より小さいわけだから、全て0になってしまうと思うのだが。
どなたか、わかる人に教えていただきたい。