Chapter 2. Variables, Constants, Aliases

2.1. Types

The following are the list of types understood by the JALv2 compiler.

Table 2-1. JALv2 Built-in Types

Type Description Range
BIT1 1 bit boolean value 0..1
SBIT1 1 bit signed value -1..0
BYTE1 8 bit unsigned value 0..255
SBYTE1 8 bit signed value -128..127
WORD 16 bit unsigned value 0..65,535
SWORD 16 bit signed value -32,768..32,767
DWORD 32 bit unsigned value 0..4,294,967,296
SDWORD 32 bit signed value -2,147,483,648..2,147,483,647

1base types

The larger types, [S]WORD, [S]DWORD are simply derived from the base types using the width specifier. For example, WORD is equivalent to BYTE*2, the later can be used interchangably with the former.

A note needs to be made concerning the BIT type. In the original JAL language, the BIT type acted more like a boolean -- if assigned 0, the value stored would be zero, if assigned any non-zero value, the value stored would be one. This convention is still used in JALv2.

However, JALv2 also understands BIT types more like C bitfields. If, instead of BIT one uses the type BIT*1, the value assigned would be masked appropriately (in other words BIT*1 y = z translates internally to BIT*1 y = (z & 0x0001).

Even though the predefined larger types use standard widths (2 and 4), there is no such requirement imposed by the language. If you need a three byte value, use BYTE*3. The only upper limit is the requirement that any value fit within one data bank.

Finally, BIT and BYTE are distinct, so defining a value of BIT*24 is not the same as defining a value of BYTE*3!