Download Change log for MMBasic Ver 4.5

Transcript
Change log for MMBasic Ver 4.5

Implemented the ability to decode Sony compatible infrared remote control signals (see the
IR command).

Implemented the ability to generate a Sony compatible 12-bit infrared remote control signal
for communicating between another Maximite or Micromite or a Sony product using 12-bit
commands.

Implemented the DISTANCE command to get a distance measurement from a HC-SR04
ultrasonic distance sensor.

Implemented the LCD command to display data on 1, 2 and 4 line LCD display modules.

Added the EXIT DO command which is the recommended method for an early exit of a
DO LOOP.

Changed the composite video driver to output one extra scan line for odd fields. This helps
cheap composite LCD monitors (as used with vehicle reversing cameras) to lock onto the
video signal (previously with this type of monitor the video image would slowly roll up the
screen).

The watchdog timer will now be turned off if the break character (normally CTRL-C) is
used to interrupt a running program.

Added the ability to PEEK or POKE a variable using the VAR keyword.

Extended the PORT command and function to act on a number of groups of pins. Also, an
error will now be generated if any pin is invalid or not configured correctly.

The SETPIN command will now accept mnemonics for the pin configuration (eg, DIN,
AIN, etc). These are easier to remember but the command will still accept numbers as used
in previous versions of MMBasic.

Added the ability to generate an interrupt on a pin going both high and low (ie, on any
change). See the keyword INTB in the SETPIN command.

Changed the syntax and command names of the I2C commands and functions to be
compatible with the Micromite. Refer to Appendix B of the MMBasic Language Manual
for details. If you have an existing program that makes heavy use of the I2C protocol it
might be worth not upgrading if you do not need any of the other features that this version
offers.

Changed the syntax and command names of the 1-Wire commands and functions to be
compatible with the Micromite. Refer to Appendix C of the MMBasic Language Manual
for details.

In the DuinoMite version fixed an issue with COM3: where extra characters could be
inserted in the received data stream.

Corrected an issue which caused the editor to crash when the video was turned off.

Fixed a bug which caused the default PWM duty cycle to be incorrect.

Fixed a bug that could cause the count on a counting pin to start with a count of one.

Fixed a bug which could cause some string functions to return an incorrect string.

Corrected a bug which allowed the RND() function to return the number 1 (the specifications state that it must return a number from zero to less than 1).

Fixed a bug which caused MMBasic to remember old labels when using the CHAIN
command.

Corrected a bug that caused an error when the LENGTH keyword was used when defining a
string array using the LOCAL command.

Updated the MMBasic Language Manual to V4.5. This includes a correction to the PWM
command (the order of the parameters has been changed) and the new features listed above.

TFT Maximite only:
o On version 1.3 of the printed circuit board (PCB) pin 20 is disabled due to a design
fault. However additional I/O pins D0 to D4 are available on connector PL7 and D8
to D13 are available on PL9 (refer to the schematic for specific pin details).
o On version 1.4 of the printed circuit board (PCB) the pin 20 issue has been corrected.
In addition D4 to D7 are available on PL9. This means that with the combination of
PL7 and PL9 there are 14 additional I/O pins available ranging from D0 to D13
(refer to the schematic for specific pin details).
o Fixed a bug which caused the TOUCH CREATE r, x, y command to throw a
syntax error (used to create a touch sensitive area on the screen).
o A new command TOUCH DISABLE will disable a touch item without removing it
from memory. Disabled items are automatically shaded grey (dimmed) and will not
respond to touch.
o A new command TOUCH ENABLE will enable a touch item that has been
previously disabled. This redraws the item at its old coordinates. Newly created
items are enabled as default.
o TOUCH REMOVE works as before but also clears the item from screen and sets the
space occupied by the item to the current background colour.
o The keyword ITEM which was optional in touch commands now cannot be used (ie,
TOUCH ITEM CREATE will cause an error, use TOUCH CREATE instead).
o Updated the TFT Maximite Manual to V4.5 of MMBasic and PCB Rev 1.3 and 1.4.
Change log for MMBasic Ver 4.4B

Added the CONFIG FONT command to set the default font.

Added support for the TFT Maximite published by c't Hardware Hacks magazine (in
Germany). See http://geoffg.net/tft-maximite.html for details.

On a PS2 keyboard the Caps Lock and Num Lock LEDs now illuminate to indicate the state
of the keyboard. The Num Lock key will now switch the keypad between editing keys and a
numeric keypad; it no longer generates a code.

Fixed a bug which caused MMBasic to hang when the right Alt key on non US keyboards
was used.

Fixed a bug which could cause I2CRCV and I2CSRC to throw an error when the receiving
variable was a normal variable (not an array).

Updated the MMBasic Language Manual to V4.4B (added the CONFIG FONT command).
Change log for MMBasic Ver 4.4A

Fixed a bug that caused I/O pin 17 to be set high whenever a PS2 keyboard key was pressed.
Change log for MMBasic Ver 4.4

Added the LIBRARY LOAD and LIBRARY UNLOAD commands which provide the
ability to add libraries of user defined commands or functions to MMBasic from within a
running program.

Added the SEEK command and the ability to use random read/write binary file I/O by
opening a file as RANDOM. See Appendix I in the MMBasic Language Manual for more
details.

Updated the LOC() and LOF() functions to return the current read/write position and file
length for use with random access files.

In the DIM command added the ability to specify the maximum length of each element in a
string array (using the LENGTH keyword). MMBasic will use this parameter when
allocating memory thereby reducing the amount of memory required compared to the
default allocation of 255 characters per element. This parameter can be set to any number
from 1 to 255. See the DIM command for more details.

Implemented the WATCHDOG command. This can be used to automatically restart the
Maximite in the event that a programming or other fault occurs while running a program.

Implemented the ON KEY target command which will cause an interrupt to be generated
whenever there is one or more characters waiting in the input buffer for the keyboard, USB
or serial console.

All commands that use an interrupt (eg, SETTICK, ON KEY, etc) can now specify a user
defined subroutine an addition to a label or a line number. The interrupt subroutine will
return control to the main program on an END SUB or EXIT SUB (ie, IRETURN should
not be used in the subroutine).

Upgraded the SETTICK command to support up to four tick timers running simultaneously.

Added the SPRITE COPY command to aid in producing multiple animated sprites.

Added the SPRITE PASTE command which copies a sprite to the video without saving the
background.

Turning off a sprite that was not on will now not cause an error.

Added support for the Spanish keyboard. Thanks to Alberto Leibovich for this contribution.

When run on the flash file system (drive A:) the FILES command now produces a list that is
similar to the listing of the SD card. In particular, it now includes the size of the file.

When run on the SD card the FILES command now lists the number of directories and files
found.

Added the option to generate two stop bits on the serial interfaces.

When listing or saving a program the ? shortcut is now listed as the command PRINT.

Modified the CHAIN command to automatically run the RESTORE command (reset the
DATA pointer) following the successful chain to a new program.

Increased the amount of memory available in the DOS version.

If the range of pins specified by the PORT command and function includes pin(s) are not
valid or not properly configured an error will not be raised. Instead the pin will be ignored
or return a zero bit.

A background pulse can now have its timing changed on the fly or can be terminated early
(see the PULSE command for details).

Fixed a bug in the CHAIN command that could throw an error indicating too many
GOSUBS, FOR LOOPS, DO LOOPS or similar.

Corrected a bug when copying or renaming a file on the flash file system (drive A:) which
sometimes corrupted the flash file system.

Corrected a bug which limited the resolution of the PWM duty cycle to 1% (it is now 0.1%
or better).

Fixed a bug where sometimes the CLR$() function (generate colour codes on the Colour
Maximite) produced random characters.

Fixed a bug which caused the composite video on the Colour Maximite to be shifted to the
right on the screen.

Improved the recovery from an error caused by a lack of space on drive A:

PLAYMOD will now play a file correctly after the previous attempt to play a file failed.

Updated the MMBasic Language Manual to V4.4.
Change log for MMBasic Ver 4.3A

Added the implied RUN command. At the command line it is possible to omit the RUN
keyword and MMBasic will search the default drive and directory for a matching program
and if found, it will be run. See the implied RUN command at the start of the Commands
listing in the MMBasic Language Manual for more details.

Added the predefined automatic variable MM.CMDLINE$. This holds any text that was on
the command line when the implied RUN command is used.

The aspect ratio can now be specified when drawing a circle. Because the Maximite's pixels
are rectangular an aspect ratio of 0.833 will result in a perfect circle on most monitors.
Other ratios can be specified for a variety of ovals. If 'aspect' is not specified the default is
1.0 which is backwards compatible with early versions of MMBasic. Thanks to Rob
Severson for pointing out how it could be implemented.

Changed the way the KEYDOWN command works so now it will clear the keyboard input
buffer whenever it is used.

Fixed an issue in the PRINT and LIST commands for the DOS version where an end of line
was printed as CR, CR, LF. Now it is the correct CR, LF.

Fixed a bug where the PEEK and POKE commands could corrupt the video output.

Fixed a number of issues with the READ/DATA commands. Especially where incorrect
syntax could cause the interpreter to crash.

Fixed a bug where entering 0 (numeric zero) followed by Enter at the command prompt
could cause the interpreter to crash if no program was in memory.

If an attempt to dimension an array fails because of insufficient memory, all reverences to
the array are now correctly removed.

Fixed a bug where the read-only variable MM.DEVICE$ did not work in the DOS version.

Fixed a bug where the interpreter incorrectly reported an error when an opening or closing
bracket was inside a quoted string in an expression.

Removed the RENUMBER command.

Updated the MMBasic Language Manual to V4.3A.
Change log for MMBasic Ver 4.3

Made a number of improvements to the handling of sprites:
o The SPRITE ON and SPRITE MOVE commands can optionally specify a background
colour and MMBasic will use that rather than copying the video background. This is
faster and easier to manage when sprites overlap and a solid background is used.
o The SPRITE OFF command can use a comma separated list of sprites to turn off or the
single keyword ALL.
o The SCOLLISION() function has been implemented to detect if a sprite has collided
with the edges of the screen or another sprite.

Implemented the command OPTION BREAK nn which will set the break key (the key
normally used to interrupt a running program) to the keystroke with the numeric value nn.
The break key is always set to CTRL-C on startup.

Modified the CHAIN command so that it will automatically close all interrupts when
chaining to a new program. This avoids confusing the interpreter if an old interrupt fires
while executing the new program.

Modified CLS to take an optional argument which is the colour to use when clearing the
screen. Thanks to "Cosmic Frog" for the suggestion.

Fixed a bug where the KEYDOWN command sometimes returned zero for a short time
when keys were pressed in quick succession.

Fixed a bug in the COPY command when a file path was used in the source and A: was used
as the destination.

Updated the MMBasic Language Manual to V4.3 to include the new features listed above.
Change log for MMBasic Ver 4.2

Added to the OPEN command the ability to specify a Data output Enable (DE) signal on
COM1: for RS485. This signal will go high just before a byte is transmitted and will go low
when the last byte in the transmit buffer has been sent.

Implemented the CAN (Controller Area Network) module written by John Harding. This
will run on the Colour Maximite and DuinoMite Mega and is a different firmware update to
that used for the standard Colour Maximite and DuinoMite. The Colour Maximite must be
fitted with the PIC32MX795F512L processor and a separate driver chip will be required
(see http://www.thebackshed.com/forum/forum_posts.asp?TID=5249&PN=1). Go to
http://geoffg.net/maximite.html#Downloads to download the CAN version.

Implemented the KEYDOWN function. This will return the decimal ASCII value of the
PS2 keyboard key that is currently held down or zero if no key is down.

Implemented the CHAIN command. This allows a program to load and run another
program while retaining the current state of the program (ie, the value of variables, open
files, loaded fonts, open COM ports, etc). As long as a program can be broken down into
modules this command allows programs of almost unlimited size to be run, even with
limited memory.

Changed the PULSE command to run pulses of less than 3mS in blocking mode. Pulses
greater than this will run in the background. Using blocking mode for short pulses allows
for greater resolution (±1µS) which is useful for controlling servos. Thanks to Peter Mather
for the suggestion.

Colour Maximite: On exiting a running program the foreground and background colours
will now be reset to that in force before the program was run. Thanks to Nick Marentes for
the suggestion.

Fixed a bug in the PLAYMOD command where it did not correctly set the MM.ERRNO
read only variable when OPTION ERROR CONTINUE was in force.

Fixed a bug in the DOS version that caused the interpreter to crash when NEW was used
after MMBasic reported "Not enough memory".

Updated the MMBasic Language Manual to V4.2 to include the new features listed above.
Change log for MMBasic Ver 4.1

Quote marks around a file name are now optional for all commands used at the command
prompt. Note that symbols (such as +, -, *) and valid keywords in an unquoted file name
will cause an error and in that event quotes will have to be used. Quotes are always required
if the command is used within a program or if the parameter is not a file name.

Added the PORT command and function. Used as a command this can simultaneously set
the outputs of up to 23 I/O pins in one operation. Used as a function it can read the values
of up to 23 I/O pins in one operation.

Corrected an issue with the Colour Maximite version of 4.0B which caused white text on the
VGA output to show a coloured fringe.

Improved the full screen editor's efficiency when working over USB or a serial console.
Thanks to Bryan Rentoul for the contribution.

Corrected a bug in the monochrome Maximite version that caused some sprites to display
incorrectly.

Corrected a bug that caused a corrupt VGA image on the Colour Maximite following CLS
when Mode 4 with a background colour was selected.

Updated the MMBasic Language Manual and the relevant hardware manuals to V4.1 to
include the new features listed above.
Change log for MMBasic Ver 4.0B

Corrected a bug that caused XModem transfers to fail (thanks to TassyJim for the fix).
Change log for MMBasic Ver 4.0A

Colour Maximite only: To avoid compatibility issues with some VGA monitors that use pin
9 on the VGA connector for other purposes, versions 4.0A and later will default to having
the composite video feature turned off. To enable composite video connect to the Colour
Maximite via USB and issue either one of the following two commands:
CONFIG COMPOSITE PAL -or- CONFIG COMPOSITE NTSC.
Either of these two commands will enable the composite detect (pin 9 on the VGA
connector) and select the correct video timing. The command only needs to be run once and
will be remembered even with the power turned off.

DuinoMite only: Composite video is also disabled by default on the DuinoMite. To enable
it, follow the instructions above or refer to the ReadMe file.

When using the RUN, SAVE or LOAD commands quote marks are no longer required
around the file name. They are still required if the command is used within a program.

Fixed a bug that caused sprites on the monochrome Maximite to not display.
Change log for MMBasic Ver 4.0

Added support for colour on the Colour Maximite. New commands include COLOUR to
set the foreground and background colours, MODE to set the display mode (number of
colours) and SCANLINE to set specific scan lines to a colour. See the section "Graphics
and Working with Colour" in the MMBasic Language Manual.

Extended the commands that deal with external I/O to address the Arduino compatible I/O
pins on the Colour Maximite.

Added support for the battery backed clock on the Colour Maximite.

Implemented a music synthesiser (the PLAYMOD command). It will play high quality
stereo music and sound effects on the Colour Maximite and mono on the Maximite.

Implemented the TONE command which will generate a pure sine wave on the sound output
(on the Colour Maximite the frequency of each stereo channel can be different).

Implemented support for two channel pulse width modulation (PWM) outputs on the Colour
Maximite and a single channel on the Maximite (replacing the SOUND command).

Added the BLIT command. This will make a high speed copy one area of the video screen
to another (the areas can be overlapping). This is useful in games and for scrolling the
display to simulate a strip chart or ECG type display.

Added the SPRITE command to load and manipulate sprites on the screen. Sprites are
16x16 pixel objects that can be moved about on the screen without erasing or disturbing text
or other graphics that may be in the background.

Implemented the LOADBMP command. This will load a BMP formatted image and display
it on the video screen (the reverse of SAVEBMP).

Added the ability to use keywords with the PEEK and POKE commands. These keywords
can be used to specify memory areas within MMBasic in a portable manner.

Added the read only variables MM.HPOS and MM.VPOS to return the current print or
graphic location on the video screen.

Added support for the UK keyboard (CONFIG KEYBOARD UK).

Implemented interrupts for COM3 and COM4 on the DuinoMite.

Corrected a bug that prevented FONT 3 from printing a space.

Corrected a bug where two or more consecutive colons would be treated as the program end.

Fixed a bug that caused the PIC32 to throw and exception when using CWD$ with no SD
card and OPTION ERROR CONTINUE active.

Corrected a bug that occurred when spaces followed the last parameter in a parameter list.

Implemented more careful error checking in expressions. This might cause an error in
programs that contain an illegal sequence which was ignored in earlier versions.

To support the PLAYMOD command it no longer possible to append to files on the flash
file system (drive A:). Hopefully this feature will be reinstated at a later date.

Updated the MMBasic Language Manual and the relevant hardware manuals to V4.0 to
include the new features listed above.

The BootLoader.exe program (for Windows users) will now reprogram all hardware
platforms (Colour Maximite, monochrome Maximite, DuinoMite and UBW32). It is
recommended that this program be used instead of mphidflash which can accidently
overwrite the boot load routine in the PIC32 making rendering the computer inoperable.
Change log for MMBasic Ver 3.2C

Added support for control keys in the EDIT command and the command line editor. These
work in addition to the normal function and arrow keys and are intended for use with
terminal emulators that cannot generate VT100 code sequences. The key associations are:
LEFT Ctrl-S
RIGHT Ctrl-D
UP
Ctrl-E
DOWN Ctrl-X
HOME Ctrl-U
END
Ctrl-K
PageUp Ctrl-P
PageDn Ctrl-L
DEL
Ctrl-]
INSERT Ctrl-N
F1
Ctrl-Q
F2
Ctrl-W
F3
Ctrl-R
ShiftF3
Ctrl-G
F4
Ctrl-T
F5
Ctrl-Y

Added support for I/O pin 7 (with caveats) on the DuinoMite. This pin can also be used to
measure frequency, period and for counting.

Corrected an issue on the DuinoMite that prevented the SD card from operating when the
video was disabled.

Corrected a bug that caused MMBasic to hang if the right ALT key was pressed on a PS2
keyboard configured as the standard US default layout.

On the DuinoMite the reset button will now clear an exception (ie, internal) error message.

Fixed a bug that caused MMBasic to crash if an empty DATA statement was placed before
all other DATA statements.

Corrected a bug that caused the LINE command to sometimes throw the error "Expected
opening bracket".
Change log for MMBasic Ver 3.2A

The COPY command can now copy files with both the source and destination on drive A:.

Baud rates for the hardware serial ports of the DuinoMite can now be set to any speed (ie,
they do not have to be multiples of 300).

Fixed a bug that prevented a line longer than the current screen width from being entered at
the command prompt or with AUTO and INPUT.

Fixed a bug that caused MMBasic to freeze when the baud rate was specified for COM3:
and COM4: (DuinoMite only).

Fixed a bug that could corrupt drive A: when the NAME command was used.

Fixed a bug that caused numeric variables separated by spaces in the PRINT command to
not print correctly.
Change log for MMBasic Ver 3.2

Added defined functions using the FUNCTION and END FUNCTION commands. These
compliment defined subroutines and allows the programmer to add a function to MMBasic
that operates the same as the built in functions. See the separate document "MMBasic 3.X
Features.pdf" for a tutorial on defined functions.

Added support for a DOS version of MMBasic. Note that the DOS version does not support
features of the Maximite version that are dependent on the Maximite hardware. This
includes external input/output, graphics, special keyboard keys, full screen editor and line
editing. See the "DOS MMBasic ReadMe.pdf" for details.

Added dynamic memory management which greatly expands the amount of usefully
available memory. Now memory for all functions (program, variables and general use) is
automatically allocated from a central pool which can be as large as 109KB.

Added support for the hardware serial interfaces (COM3: and COM4:) on the DuinoMite.
They operate exactly the same as the standard ports but support speeds up to 460800 baud.

Added support for I/O pins 11 and 12 (with caveats) on the DuinoMite.

Implemented a reliable method of detecting when the micro SD card has been removed or
changed on the DuinoMite. It is now no longer necessary to reset the DuiniMite when
changing the SD card.

Added support for measuring the battery voltage on the DuinoMite. This can now be read
using the virtual PIN(21). SETPIN is not required before reading from this pin.

Rewritten the SPI function to improve performance and provide much needed features. The
transmission mode and the number of bits to send and receive can now be set. The clock
speeds have been increased to: 3MHz (H setting), 500KHz (M setting) and 50KHz (L
setting). See the updated Appendix D in the MMBasic Language Manual for details.

Added support for the Italian and Belgium keyboards (CONFIG KEYBOARD IT or BE).
Thanks to Fabrice Muller for the contribution.

Added the @() function to the ? shortcut for PRINT.

Improved the performance of the COPY command. It is now up to 100 times faster.

Corrected a number of issues with the UBW32 version that required a rearrangement of the
I/O pin allocations. As a result I2C now works with SDA on pin 12 (A15) and SCL on pin
13 (A14). Also, pins 11 (E8), 12 (A15), 13 (A14) and 14 (E9) work as frequency/counting
inputs. Refer to the README.TXT file included with the UBW32 MMBasic upgrade for
details.

Fixed a bug that caused PAUSE 0 to pause for about 4½ seconds.

Fixed a bug in the I2C functions that prevented CTRL-C from interrupting a hung session.

Fixed a bug that prevented CTRL-C from interrupting COM2: when opened as console.

Fixed a bug that caused issues when referring to the root (\) in a file spec (ie, "B:\T.BAS").

Modified handling of the prompt so that if an error occurred while evaluating the prompt
string it will be reset to the standard prompt (> ). This prevents a re occurring error which
would lock up MMBasic.

Doubled the time that XMODEM waits for a remote communication before giving up.

Changed the default baud rate for serial communications to 9600 baud (was 1200).

Forced the sound output to stop when an error occurs.

Updated the MMBasic Language Manual and the relevant hardware manuals to V3.2 to
include the new features listed above.
Change log for MMBasic Ver 3.1

Added defined subroutines using the SUB and END SUB commands. See the separate
document "Defined Subroutines.pdf" for a tutorial on defined subroutines.

Added the command LOCAL for declaring a variable that is local to a subroutine.

Added support for the 1-Wire protocol. Thanks to Gerard Sexton for the contribution.

Added support for the DuinoMite series of boards from http://olimex.com. The
DuinoMite version uses a different .hex file from the Maximite version. Check the readme
file supplied with the upgrade for details.

Added the PULSE command to generate a pulse (positive or negative) on an output pin.
The pulse duration can be as short as 2µS or as long as 49 days.

Modified the PAUSE command so that the pause interval can be a fraction. For example,
PAUSE 0.2 is equal to a delay of 200 µS.

Added the CONFIG TAB command to set the number of spaces for each tab column. The
syntax is:
CONFIG TAB 2 or 4 or 8.
The default is 2.

Changed the repeat find function in the full screen editor to use the key SHIFT-F3 (before it
used two F3s). So, F3 will search and SHIFT F3 will repeat the search using the last text
used in a search.

In the full screen editor added intelligent backspace so that if the line is indented the
backspace key will backspace over the indented area in tab increments.

Added the @(x,y) function to the PRINT command to position the cursor.

Added support for French and German keyboards. To select these keyboard layouts use the
command:
CONFIG KEYBOARD US or FR or GR
Thanks to Fabrice Muller for the contribution.

Added "16 = Flash memory write failure" to MM.ERRNO.

Fixed a minor bug that caused the full screen editor to occasionally lose track of the cursor.

Fixed a bug that prevented the NAME command from renaming files on drive A:

Fixed a bug that caused MMBasic to crash when CONFIG VIDEO OFF was used.

Fixed a bug that prevented the full screen editor from working when the video output was
set to composite.

Fixed a bug that caused the AUTO command to overwrite a line if a blank line was entered.

Fixed a bug that caused an error when a line number or label was used with the SETPIN
command.

Fixed a bug that caused an error if there were an odd number of blank lines before a LOOP,
NEXT, ENDIF, DATA, WHILE or WEND statement.

Moved the hardware details of the Maximite and UBW32 to separate manuals. Created a
language reference manual to concentrate on MMBasic. There are now three manuals:
MMBasic language reference:
MMBasic Language Manual
Maximite and mini Maximite:
Maximite Hardware Manual.
UBW32 experimenter board:
UBW32 MMBasic Manual

Updated the MMBasic Language Manual to V3.1 to include the new features listed above.
Change log for MMBasic Ver 3.0

Removed the need for line numbers in MMBasic programs. Blank lines are also allowed
making it easier to format programs for readability. Line numbers are still accepted and old
programs using line numbers should run as before.

Implemented labels as targets for GOTO, GOSUB and any other commands that previously
used a line number as a destination. A label has the same specifications (length, character
set, etc) as a variable name. When used to label a line the label must appear at the beginning
of a line but after a line number (if used) and be terminated with a colon character (:). For
example:
GOTO Label
...
Label: PRINT "We have jumped to here"
The location of labels in the program are remembered while the program is running so the
command GOTO label is much faster than GOTO linenumber (which every time it is used
forces a linear search through the program looking for the line number).

Changed the EDIT command to a full screen editor for editing program memory and files.
The editor will work equally well using the video output (VGA or composite) or a vt100
terminal emulator using USB or a console over a serial communications link.

Changed the way the AUTO command works. With no arguments this command will take
lines of text from the keyboard or USB and append them to program memory without
modification. This is useful for adding program lines that do not have line numbers. It also
allows a program without line numbers to be edited on a PC then sent to MMBasic via the
paste text function of a USB terminal window. To terminate the auto entry mode use
Control-C.
When supplied with arguments (ie, start and increment numbers) the operation of the AUTO
command is unchanged.

Commands that work with filenames will now accept a full directory path as part of the file
specification. For example: RUN "\BASIC\TEST\FILE1.BAS" or FILES "DIR1\DIR2"
will now work as expected. The only exception is the NAME command which will not
accept a full pathname (you must change to the relevant directory first).

Implemented the CONFIG command to reconfigure MMBasic. This command differs from
other options in that it permanently reconfigures MMBasic and only needs to be run once
(ie, the setting will be remembered even with the power turned off). The power must be
cycled after changing a configuration setting for the change to take effect.
At this time there are three configuration settings that can be set:
CONFIG CASE UPPER or LOWER or TITLE.
The default is TITLE.
CONFIG COMPOSITE NTSC or PAL.
The default is PAL.
CONFIG VIDEO OFF or ON.
The default is ON.

Altered the way memory is allocated for the video buffer. Now, if the video is turned off or
a mode such as composite is selected the unused memory (compared to VGA) is added to
the general memory pool which in turn allows larger arrays to be declared.

Added the DIR$(fspec, type) function to search an SD card for directories and files. 'fspec'
is a wildcard (eg, "*.*") and 'type' is one of VOL, DIR or FILE for the type of entry to be
returned. The function will return the first entry found. To retrieve subsequent entries use
the function with no arguments. ie, DIR$( ).

Added the COPY command to copy files with a new name and/or between drives. Thanks
to Bryan Rentoul for the contribution.

Added the functions DEG(radians) and RAD(degrees) to convert between degrees and
radians. Added the function PI to return the value of pi. Thanks to Alan Williams for the
contribution.

Added the BIN$(number) function to convert a number to a binary string.

Modified the LOCATE command to also send the appropriate cursor locate commands to a
vt100 terminal emulator on the USB interface. Thanks to Bryan Rentoul for the
contribution.

Cosmetic changes to the way files are listed using the FILES command.

Modified the cursor behaviour when editing a command line. The cursor will now
automatically switch to the insert mode when the cursor is moved from the end of the line
(for example, by using the left arrow key).

Added the ability to invert the pixels when using the graphic drawing commands by using
colour as -1. Thanks to Alan Williams for the contribution.

Fixed a bug which caused the RUN command to throw an error when accessing a file on a
drive that was not the default.

Fixed a bug associated with assigning a string longer than 11 characters to a programmable
function key.

Fixed a bug which wrote incorrect data to a file on the internal flash drive that was opened
for APPEND.

Fixed a bug in the interface to the SD card in the UBW32 version of MMBasic.

Corrected an issue which could cause the PIC32 to hang while writing to the internal flash
drive.

Improved the speed of writing to the internal flash drive. An average mix of read/writes is
now twice as fast as the same operations on an SD card.

To allow space for the full screen editor the amount of space reserved for the internal flash
drive has been reduced slightly to 212KB.

Updated the User Manual to V3.0 to include the new features listed above.
Change log for MMBasic Ver 2.7A

Implemented the ability to selectively switch the program output to the USB and video
interfaces off and on. Note that the output is always restored at the command prompt.
The commands are: OPTION USB ON
OPTION USB OFF
OPTION VIDEO ON
OPTION VIDEO OFF.

Fixed a bug which corrupted a file of more than 4076 bytes written to the internal flash
drive A:.

Fixed a number of issues with the INPUT command when used on a serial port. Now the
command will wait indefinitely until a carriage return character is received.

The INPUT and LINE INPUT commands will now set the variables to zero or a null string
if there is insufficient data to fill them.

Fixed a bug which caused the LIST command to scroll too far if lines were longer than the
screen width or if the LOCATE command had been used.

Version 2.7 of the User Manual remains valid and has not changed.
Change log for MMBasic Ver 2.7

Optimised several areas within MMBasic to improve speed of execution. This speed
improvement will depend on the type of program running but it should be about 40% faster
than version 2.6.

Implemented an additional flash drive using the PIC32’s internal flash memory. This drive
is referred to as A: while the SD card is B: The drive A: is useful with the mini Maximite
(see Silicon Chip November 2011) and the UBW32 as both of these do not have a SD card.
See the functional summary in the “Maximite User Manual” for more details.

Implemented a number of additional video fonts and provided the ability to switch between
them using the FONT command. Multiple fonts can be displayed simultaneously on the
screen and custom fonts can be loaded from internal flash or SD card.

Implemented the XModem protocol (in the XMODEM command) for copying data to and
from drive A: or B:.

Upgraded the EDIT command to use the editing keys (arrow, insert, home, end, etc) on a
keyboard. The EDIT command has may extra features such as the ability to go direct to a
line that has caused an error. The old editing keys have been discontinued.

MMBasic is now always in editing mode when entering text at the command prompt or the
INPUT or LINE INPUT commands. This means that the editing keys can be used at any
time to correct entered text.

Changed the codes generated by the special keys on a keyboard (arrow keys, function keys,
etc). These are unique and generate different codes if the control, shift or both keys are held
down. See Appendix E of the Maximite User Manual.

Added mapping of vt100 escape codes generated by terminal emulators such as Terra Term
and Putty to the codes generated by a directly connected keyboard. This means that a key
press on the terminal emulator will have the same effect as the same key on the Maximite's
keyboard.

Modified the CLS command to also generate the clear screen codes for an attached vt100
compatible terminal emulator.

Added the AUTO command to automatically generate line numbers when entering a
program.

Added programmable function keys. The keys F1 to F12 can now be programmed to
generate a string of characters when pressed. See the OPTION command for details.

To suit the new editing functions the cursor has been changed to a blinking underline.

The SAVE command has been modified so that the file name is optional and if omitted the
last filename used in SAVE, LOAD or RUN will be automatically used. A predefined and
read only variable MM.FNAME$ will contain this automatic filename.

Added the ability of the VAL() function to accept strings starting with &H (hex), &O (octal)
and &B (binary).

Created a separate version of MMBasic for the UBW32 experimenter’s board. This is fully
compatible with the Maximite version but uses a different hex file from the Maximite
version so that it can be loaded using the UBW32 bootload program. See
http://geoffg.net/ubw32.html for details.

Fixed a bug which corrupted some transmitted characters when the serial port COM1: was
opened as console.

Fixed a bug where serial port COM1: always had flow control enabled, regardless of the
“,FC” option.

Fixed an issue where Control-C on a serial port opened as console would not interrupt a
running program.

Fixed a bug which caused the SAVEBMP command to fail with a confusing error message
when a file or COM port was open as file number #1 or #2.

Fixed a bug which prevented the RUN "filename" command from throwing an error if the
file did not exist.

Fixed a bug that caused the LOF() function to return an invalid value.

Updated the User Manual to V2.7 to include the new features listed above.
Change log for MMBasic Ver 2.6

This version is 30% faster when running a program compared to Ver 2.5. This is a result of
optimising the video generation routines. Other benefits include faster scrolling and the
elimination of noise which sometimes appeared on the VGA video output.

Implemented asynchronous serial capability. Two serial ports are available with speeds up
to 19200 baud with hardware flow control, configurable buffer sizes and interrupt on buffer
full. For a full description see Appendix A of the Maximite User Manual

Implemented the Serial Peripheral Interface (SPI) communications protocol. Any number of
SPI devices can be interfaced on any I/O pins with speeds up to 500KHz baud. For a full
description see Appendix C of the Maximite User Manual.

Modified the SOUND command so that the duty cycle can be specified and the output
frequency can be set as high as 1MHz. These changes allow the sound output to be used as
a precision Pulse Width Modulation (PWM) output for driving analogue circuits.

Implemented the LOG() function (it was documented but not implemented in Ver 2.5).

Changed the DATE$ = statement to allow a two digit year. In this case MMBasic will
automatically add 2000 to the year.

The USB driver in MMBasic has been modified to reduce the number of characters lost
when sending data to a slow host.

Fixed an issue where the video output would blank while large amounts of data were being
received on the USB interface.

Fixed a bug that prevented MMBasic from responding to an interrupt if a previous interrupt
routine had been halted while running (by an error or CTRL-C).

Fixed a bug which prevented MMBasic from reading and writing data to the SD card and
USB interface that contained a byte with the value of zero (ie, CHR$(0)).

Fixed a bug where the STRING$() function would cause MMBasic to crash if it was
supplied with the wrong number of arguments.

Updated the “Maximite User Manual” to V2.6 to include the new features listed above.
Note that currently the RENUMBER command does not renumber line numbers used in the open
commands for the I2C and serial port interfaces.
Change log for MMBasic Ver 2.5

Added the EDIT command to allow convenient editing of program lines held in memory.

Added the OPTION PROMPT command to enable customisation of the command prompt.

Added the function CWD$ which returns the current working directory on the SD card.

Added PEEK/POKE commands for manipulating memory within the PIC32 processor.

Added a preset read only variable MM.VER which returns the version number of the
firmware.

Added the COPYRIGHT command to list all contributors to the software and summarise the
copyright.

Integrated support for I2C (written by Gerard Sexton). This fully supports master and slave
operation, 10 bit addressing, address masking and general call, as well as bus arbitration (ie,
bus collisions in a multi master environment). The description of these commands is
contained in Appendix B of the Maximite User Manual.

Allowed the function PIN() to return the digital value of a pin that is configured for open
collector output. This is useful when the pin is shared with other devices that might also
pull the voltage on the pin low.

Changed the maximum line number that can be used in a MMBasic program to 65000.

Fixed a bug where the MOD operator did not throw an error on an attempted divide by zero.

Fixed a bug with the DATE$ function not rolling over month end correctly.

Fixed a bug where a character with the decimal value of 255 could not be stored in a file.

Fixed a bug related to indexing into an array with Option Base 1 in effect.

Fixed a bug which caused a crash when 10 files were simultaneously open.

Fixed a bug when resolving constant values with a floating point exponent (ie, 5.32e-12).

Updated the “Maximite User Manual” to V2.5 to fix many typographical errors and include
the new features listed above. Thanks to all the Maximite users who proofread this
document and alerted me to its faults.
Change log for MMBasic Ver 2.4

Fixed an issue which caused glitches or noise on the video output while a BASIC program
was running. This particular issue caused random horizontal lines of pixels to be
intermittently shifted 8 pixels to the right when MMBasic was running a program (ie, not
waiting for user input).

A bug which caused the unary negation function to fail has been fixed.
For example, PRINT –SIN(2) now works.

Fixed a bug which caused the RENUMBER command to miss renumbering a GOSUB
embedded in an IF…THEN…ELSE command.

Fixed a bug which caused negative numbers in DATA statements to be returned as positive
numbers. As a side result you can now use numeric expressions (eg, 8 * 60) in DATA
statements.

The RUN “file” command now checks if “file” exists before clearing the program currently
in memory. This means that if used with OPTION ERROR CONTINUE you can recover
from an error when tying to run one program from within another.

The semicolon character (;) is now optional between expressions in the print statement.
For example, you can now use: PRINT “Voltage is “ x “mV”
This was added to improve Microsoft compatibility.

Updated the “Maximite User Manual” to V2.4 to include the new features listed above
Change log for MMBasic Ver 2.3

The internal mechanism for tokenising keywords (ie, command names, etc) has been
changed to allow more keywords to be added to the language in the future. As a side effect
the rules for naming variables has been relaxed (See the “Maximite User Manual V2.3” for
details). In particular, it is now valid to have a variable name which is the same as a
command name.

Added the function PIXEL(x,y) to find the value of a pixel on the VGA or composite screen
and the statement PIXEL(x,y) = to turn a pixel on or off. This supersedes the PSET and
PRESET commands that are now only included for Microsoft compatibility.

Added the command SAVEBMP file$ which will save an image of the current VGA or
composite screen as a BMP file on the SD card.

Added the command RENUMBER which will renumber the program currently held in
memory including all references to line numbers in commands such as GOTO, GOSUB,
ON, etc.

Added the ability to use a line number with the RUN command to start the program at a
specified line number (this was documented in V2.2 but not implemented).

Added the question mark symbol (?) as a shortcut for the PRINT command/keyword.

Fixed a timing error which caused all timed functions (date, time, pause, etc) to run fast.

Fixed a bug in the SOUND function which caused a greater than usual error in the frequency
of the sound.

Fixed a bug where UNTIL was not recognised in the LOOP command.

Fixed a bug which in some circumstances could cause an exception (a reset) when loading a
program that was too large for the program space.

Fixed a bug which occasionally caused the EXIT FOR command to fail.

Fixed a bug which caused IRETURN to fail when returning from an interrupt which had
interrupted a PAUSE command.

Updated the “Maximite User Manual” to V2.3 to include the new commands and other
changes.
Change log for MMBasic Ver 2.2

The MEMORY command has been added. This will list the three memory segments used
by MMBasic and the amount of spaced used in each.

An error is now thrown when concatenating two strings with a combined length of greater
than 255 characters (previously this would cause the interpreter to crash).

MMBasic now throws an error when presented with an input line of greater than 255
characters (previously it just discarded the extra characters).

Fixed a bug in the PRINT command which caused an intermittent crash on the construct:
PRINT #n (ie, no following comma)

On an internal crash (caused by a bug in MMBasic) the Maximite will now restart with a
suitably apologetic error message.

The keyboard is now checked every 20µS (previously it was every 25µS) to improve
reliability in detecting keystrokes.

The Maximite User Manual has been updated to version 2.2. This contains minor updates to
clarify some parts of the text and add the MEMORY command. Other than this there has
been no significant change to the description of the commands or functions used in
MMBasic.