Como os tipos básicos de Delphi se relaciona

Delphi há muito tempo suporta alguns tipos numéricos básicos e eu queria saber como eles estão relacionados entre s

o Delphi 2007, encontrei estas declarações (algumas são conflitantes, outras são meras pseudônimos

Types.pas:

DWORD = LongWord;
Largeint = Int64;

getmem.inc:

DWORD = Integer;

Windows.pas:

DWORD = Types.DWORD;
SHORT = Smallint;
UINT = LongWord;
ULONG = Cardinal;
LONGLONG = Int64;
TLargeInteger = Int64;
ULONGLONG = UInt64;

Isso me leva a pensar que os tipos numéricos assinados de base são SmallInt, Inteiro e Int64. Sem assinatura, há Byte, WORD e UInt64. Mas qual é a diferença entre Cardinal e LongWord? (A propósito, qual é o invólucro original e pretendido para esses tipos?)

E existe um tipo para números inteiros de 8 bits assinados (Int8

// Int8 = ?unknown?;
UInt8 = Byte;
Int16 = SmallInt;
UInt16 = Word;
Int32 = Integer;
UInt32 = LongWord;
// Int64 already exists
// UInt64 already exists

Em última análise, como devo definir Int e UInt, especialmente no que diz respeito à compatibilidade com C / C ++ e uma futura mudança para outras plataformas (possivelmente também de 64 bits)? (Uma questão relacionada é, obviamente, como os vários tipos numéricos serão definidos no Delphi de 64 bits?)