Your itoa()
function is broken for non-negative numbers:
char* itoa(int a, char* buffer, unsigned char radix){
if(a<0){
*buffer = '-';
a = -a;
}
ultoa(a, buffer + 1, radix);
return buffer;
}
You probably want something like (I haven’t tested this):
char* itoa(int a, char* buffer, unsigned char radix){
char *wrkbuf = buffer;
if(a<0){
*wrkbuf++ = '-';
a = -a;
}
ultoa(a, wrkbuf, radix);
return buffer;
}