It seems like it's an unsigned int. Look at MAME's LR35902 CPU emulator, they use UINT8 for the immediate.
Some relevant code:
/* ... */
case 0xC6: /* ADD A,n8 */
x = mem_ReadByte (cpustate, cpustate->w.PC++);
ADD_A_X (x)
break;
/* ... */
#define ADD_A_X(x) \
{ \
register UINT16 r1,r2; \
register UINT8 f; \
r1=(UINT16)((cpustate->b.A&0xF)+((x)&0xF)); \
r2=(UINT16)(cpustate->b.A+(x)); \
cpustate->b.A=(UINT8)r2; \
if( ((UINT8)r2)==0 ) f=FLAG_Z; \
else f=0; \
if( r2>0xFF ) f|=FLAG_C; \
if( r1>0xF ) f|=FLAG_H; \
cpustate->b.F=f; \
}
Now, the routine for LD HL,SP+n8
is
case 0xF8: /* LD HL,SP+n8 */
/*
* n = one UINT8 signed immediate value.
*/
{
register INT32 n;
n = (INT32) ((INT8) mem_ReadByte (cpustate, cpustate->w.PC++));
Here the immediate is cast to an signed 8-bit int (INT8)
, so I imagine it's otherwise unsigned.