The real problem is gcc here. When not -mshort even short int are handled
as longs (ie. they take 4 bytes of memorry (2 of them unused)), and all
operation of them are in fact 32 bit (move.l instead move.w for example).
The problem arises when dealing with TOS syscals that use 16bit arguments
everywhere. The workaround for this is using packed structures where short
ints are real short ints, but it is a hack. I belive there was work done
on this in FreeMiNT and I do not know if it is finished. You would need to
ask on MiNTlist.