I dont have any of my pascal source code available, but...
1) build an array CH of '0123456789ABCDF'
2) use two temp variables to hold 'high' and 'low' nybbles.
3) use two temp char variables to hold the two CH(high) and CH(low) chars.
return the 2-char value.
Easily modifiable for 16-bits...
Hope that helps!
Edit: Here is one for 16-bit values that is a bit more 'elaborate'...
MODULE DHCV;
VAR
AH : EXTERNAL STRING;
A : EXTERNAL INTEGER;
D : EXTERNAL REAL;
PROCEDURE DHCV;
VAR
X,Y : INTEGER;
X1,X2,X3,X4 : INTEGER;
Y1,Y2,Y3,Y4 : INTEGER;
N : STRING;
BEGIN
N := '0123456789ABCDEF';
Y := trunc(D);
Y1 := shr((Y & $F000),12);
Y2 := shr((Y & $0F00),8);
Y3 := shr((Y & $00F0),4);
Y4 := (Y & $000F);
AH := CONCAT(N[y1+1],N[y2+1],N[Y3+1],N[Y4+1]);
d := d + 1;
end;