Added 'BCDADD', 'BCDSUB' and 'BCDINT' to the BASIC compiler; these commands provide basic arithmetic for unpacked BCD, (one digit per byte), of any length, (until you run out of RAM). Great for scores and high score tables.
Added an overlap option to sprites, this allows sprites to be drawn with widths that are NOT a multiple of six. The artist is required to allow for the overlap when generating sprite images.
Added the 'POLYR' keyword, this is a relative coord system version of 'POLY' that allows for offsets and symmetry flipping in the X and Y directions. Great for generating symmetrical and instanced levels that require vector graphics.
Added byte arrays to the BASIC compiler, they work exactly the same way as normal 16 bit integer arrays except that their syntax requires a '%' in the DIM statement; e.g. DIM test%(10). Note the '%' is ONLY required in the DIM statement and is not used again.
Added fast boolean conditionals to the expression handler, you can now create code like this 'IF &(a) THEN blah'. This generates a branch that tests for equality to zero without requiring a call to a relational operator handler. Brackets around the expression are ALWAYS required when using this optimisation, (0 = false, !0 = true). The BEQ is subject to the same limitation that all other BRA's are subject to, namely they cannot cross 256 byte page boundaries; the validator will inform you if page crossings occur.
Added optimised GOSUB's using the following syntax, 'GOSUB &label', this optimisation foregoes that 'PUSH' preamble within the called subroutine; used for leaf subroutines, vertical blank handlers, ASM subroutines, etc. When using this, you MUST use 'RET' and NOT 'RETURN' when exiting your subroutine.
Added the 'FOREVER' keyword to 'REPEAT', this is another way of creating a 'GOTO' loop, but without the requirement of a label.
Added optimisation sequences for byte arrays.
Added maxNumSprites pragma so that >48 sprites can be used on 32K RAM systems, this MUST be set to the exact number of sprites you have defined, whether instanced or not. (It defines the size of the sprite dictionary and allows it to be pre-allocated before contiguous sections of RAM larger than 96 bytes are no longer available).
Array size parsing was limited to literals, it has now been upgraded to allow full constant expressions, e.g. 'DIM test(NUM_ENTRIES*2 - 1)'.
Fixed nested 'IF ENDIF' pairs, 'ENDIF' label lists are now assigned per 'IF ENDIF' pair, rather than as a global list, (nasty bug).
Fixed a rare bug in the pragma parser.
Fixed two array optimisation sequences that were not being activated correctly.
Ver 0.9.9B, (Beta)