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!