Added an address offset option to the Assembler's 'DB and 'DW' commands, the offset is calculated as N * sizeof(TYPE); e.g. 'DB(4) 0 1 2 3 4' will increment the address by 4 bytes for each defined byte. 'DW(4) 0 1 2 3 4' would increment the address by 8 bytes for each defined word.
Added a simple audio wave editor for the inbuilt audio channels, allows more complex sound effects to be created, (see PucMon for an example); save in a trivial 64 byte binary format '.gtwav'.
Added the 'WAVE' option to 'LOAD', e.g. 'LOAD WAVE, , , '
Added 'CALL' 'PROC' and 'ENDPROC', these allow for procedures to be defined that can accept parameters and local variables.
Recursion will NOT work.
Total number of parameters PLUS local variables is limited to 8.
Calling different procedures within a procedure MAY work, as long as the called procedure does not use any local/param slots that the callee procedure is using; see PucMon for examples.
Gosub within PROCS works correctly.
Added 'LOCAL' for the defining of local variables within procedures; see PucMon for examples.
larger depending on your usage of procedures and temporary expression variables). Always assume it is limited to 16, so the maximum nested depth of GOSUB's/CALL's is 8, INCLUDING the runtime.
Added the 'tempVarSize' pragma, this allwows you to choose how large the temporary expression area is, (defaults to 8 bytes).
Added 'MIN()', 'MAX()' and 'CLAMP()' functions.
Added 'BCDCPY' for copying a source BCD numeric to a destination BCD numeric, both MUST be the same size.
Added the 'VARS' option to 'INIT', e.g. 'INIT VARS ', this will zero all user global variables starting at the optional start var and ending at the end of user var space.
Added extra emulator commands/keys for the image and audio editors, (CTRL + I and CTRL + A); the image editor is unfinished.
Added the printing of thunk and total thunk size stats to the compiler output.
Refactored the Keywords: module into seperate Operators:, Functions:, Keywords: and Pragmas: modules.
Added the 'MUSIC_NOTE' system variable to the 'GET' command; e.g. 'GET("MUSIC_NOTE", )' wehich does a ROM lookup and converts a standard 4 octave midi note byte, (0 <-> 127), into a Gigatron specific audio frequency value, (which can then be used with the 'SOUND' command; see PucMon for many examples.
Added the 'MUSIC' option to the 'PLAY' commmand, this uses music commands/data in the exact same format as the 'PLAY MIDI' command, but plays the stream modally rather than in the background; see PucMon for an example.
Added the Menu: and Dialog modules, which are simple UI code blocks designed to be used by various parts of the emulator, (editors, terminal, etc).
Changed the allocation of runtime memory to prioritise larger runtime subroutines over smaller ones, this gives the runtime a better chance of being loaded successfully as RAM size gets smaller and more fragmented.
Refatored test code out of the main modules into it's own specific Test: module.
Fixed Terminal mode so that it is more consistant when toggling with other system modules.
Rearranged zero page variables, minimum stack size is guaranteed to be 16 bytes.