y=y/256;buf[1]=y%256;y-=buf[1];
y=y/256;buf[2]=y%256;y-=buf[2];
OUCH! Divide AND modulo! Woot! WORK THAT CPU BABY

Remembering that modulo is usually implemented as
while ( VAL > LIM )
VAL -= LIM ;
even in Microcode. So perhaps better written as
for ( int i =0 ; i < 8 ; ++i )
{
// Copy lower 8 bits
buf[i] = y & 0x255 ;
// And shift 8 bits down
y >>= 8 ;
}
or
buf[0] = y & 0xff ; y >>= 8 ;
buf[1] = y & 0xff ; y >>= 8 ;
buf[2] = y & 0xff ; y >>= 8 ;
buf[3] = y & 0xff ; y >>= 8 ;
buf[4] = y & 0xff ; y >>= 8 ;
buf[5] = y & 0xff ; y >>= 8 ;
buf[6] = y & 0xff ; y >>= 8 ;
buf[7] = y & 0x7f ; y >>= 8 ;
- Ol