Repository navigation
Releases
Colour Maximite 2 MMBasic 7.00.00RC6 (release candidate)
Colour Maximite 2: MMBasic 7.00.00RC6 (release candidate) release notes
13 November 2026. Compared with 7.00.00RC5, the last version released. The full notes, from 5.07.02, are in Release_Notes_7.00.00.md.
This is the seventh release candidate of MMBasic 7.00 for the Colour Maximite 2. Unless problems are found in it, it will become 7.00.00. Please report problems on the Back Shed forum.
It adds SQL databases to BASIC: SQLite, the database engine, through a new command SQL and a new function SQL(, with the rows of a table going into and out of variables, arrays and structures.
The same firmware file runs on both the Generation 1 and the Generation 2.
Before you update
Writing the firmware erases the options. Save them first, and load them again afterwards:
OPTION DISK SAVE "A:/myoptions"
Then write the firmware, and:
OPTION DISK LOAD "A:/myoptions"
The console runs at 115200 baud until the options are loaded. The library, the variables saved with VAR SAVE and the files on the SD card are kept.
Copy the new CMM2_Programs_7.00.00RC6.zip to the card as well: the sql folder is new, and SQL needs it.
What is new
-
SQL databases. A database is a file on the SD card or USB flash drive, which a program opens with SQL OPEN and works on with statements in SQL, the standard language for databases:
SQL OPEN "A:/data/club.db" SQL EXEC "CREATE TABLE IF NOT EXISTS member(id INTEGER PRIMARY KEY, name TEXT, born INTEGER)" SQL EXEC "INSERT INTO member(name, born) VALUES(?, ?)", n$, year% SQL QUERY "SELECT name, born FROM member WHERE born > ? ORDER BY born", 1950 DO WHILE SQL(NEXT) PRINT SQL(1), SQL(2) LOOP SQL CLOSE- Values from the program go into a statement by its ? parameters, so a string needs no quoting.
- SQL(n) gives a column as an integer, a float or a string, as the column holds it; SQL(SELECT puts a query's rows into an array; SQL(COLUMNS), SQL(NAME n), SQL(ISNULL n), SQL(ROWS) and SQL(ID) tell the rest.
- Rows go into and out of MMBasic structures by matching the members' names with the columns': SQL CREATE makes a table from a TYPE, SQL INSERT adds a structure or a whole array of them (giving each its new key), SQL(FETCH reads a row into a structure, and a structure among a statement's values gives its :name parameters.
- Errors are MMBasic errors, "SQL: " with the database's own message, so ON ERROR SKIP catches them; Ctrl-C stops a long statement.
- The database engine, SQLite 3.47.0, is not in the firmware: it is the module A:/sql/sql.mod in the zip's sql folder, which SQL OPEN loads and SQL CLOSE unloads. On a Generation 2 it runs in the memory kept for loadable programs, with about 7MB for it, and BASIC keeps all of its own memory; a BASIC program with a database open cannot run a loadable program (.app) until it closes it. On a Generation 1 it has 1MB, taken from BASIC's memory while the database is open: fast with databases up to about 1MB, but slow with large ones, where whole-table work (unindexed sorts, GROUP BY, DISTINCT, big joins) can take minutes. The manual's new chapter, SQL Databases, explains.
- The sql folder has a sample database of home computers, computers.db, and the chapter's example program for it, computers.bas, which reads its rows into a TYPE Computer. It also has sql.app, which runs SQL statements (or a file of them) at the command prompt: RUN "A:/sql/sql.app", A:/sql/computers.db "SELECT name, year FROM computer".
-
For programmers:
- Version 19 of the services: file_truncate, a file cut short at its position, and the tools' ftruncate() with it.
- Modules: build.py --module makes an image the firmware loads beside a BASIC program and calls (the SQL module is the one there is: the firmware loads modules for its own commands only).
- The tools (tools/sdk), since RC5: errno reaches programs, a steady clock and POSIX's clocks, --libc full (the whole C library, for its wide-character functions), getcwd(NULL, 0) allocates, and readdir gives "." as well as "..".
What behaves differently
- A loadable program that sets a screen mode now leaves BASIC's screen clear when it ends, in BASIC's own mode too, as a MODE would. Before, its last picture could stay behind in BASIC's colours.
- In BASIC translated by the C compiler (CC), MODE with one number is the Colour Maximite 2's own, as in the interpreter: MODE 9 used to stop the program, and MODE 1 gave 640 x 480 in one bit rather than 800 x 600.
- The manual now says exactly what a single line IF with ELSE does: one statement after THEN, one after ELSE, and any statement after that on the line runs either way. MMBasic itself is unchanged.
- The new function SQL( takes the name from programs: an old program with an array named SQL() must rename it.
- MM.VER is 7.000056 for RC6.
The programs
- sql is new: sql.mod (the SQL command's module), sql.app, computers.db and computers.bas.
- bbc and wordgrinder are as the RC5 zip has had them since 13 November: bbc.app no longer stops about 18 minutes after it starts, and WordGrinder's message when its memory is damaged stays on the screen until a key is pressed. The zip downloaded before then had the first versions.
- Every other program in the zip is unchanged.
Tested
On a Generation 2 and a Generation 1, with this firmware and the zip's sql folder:
- SQL: a test of the commands and functions (rows into variables, string and integer arrays and arrays of structures, structures inserted with their new keys, FETCH, :name values, NULLs, errors caught by ON ERROR SKIP, CLOSE and OPEN again), all passed on both; a thousand inserts in one transaction 0.32 seconds on the Generation 2 and 0.38 on the Generation 1, one committed on its own 17 and 23 milliseconds.
- computers.bas on the sample database, and sql.app.
- A loadable program run from a BASIC program with a database open: on the Generation 2 the error "SQL CLOSE first"; on the Generation 1 it runs in the memory left, and sql.app, which needs more, did not start ("Needs 1608 KB"). After SQL CLOSE it ran on both.
- The single line IF with ELSE, as the manual now describes it.
On a Generation 2 (the same SQL in a build of the firmware before this one):
- The database left open by a program, at the prompt.
- SQL on a table of 50,000 rows (6.5MB, with a 6MB index): PRAGMA integrity_check 32 seconds, count(DISTINCT) 34 seconds, CREATE INDEX 21 seconds; a thousand inserts in one transaction from BASIC 0.33 seconds, one committed on its own 18 milliseconds. A rollback that made a database longer cuts it back. A crash in a transaction is undone at the next open (tried on a PC with the same engine and settings).
- SQL with a Generation 1's 1MB (on a Generation 2 given that memory): the same 50,000 rows work, slowly: integrity_check 160 seconds, count(DISTINCT) 460 seconds, CREATE INDEX 23 seconds.
Known problems
- SQL: on a Generation 1 a large database is slow (above). Only one database is open at a time (ATTACH reaches others through it). A statement is a string, so at most 255 characters. Stopping a statement with Ctrl-C has not been tried by hand.
- The known problems of 7.00.00RC5 remain.
The manual
The User Manual has a new chapter, SQL Databases, with SQL and SQL( in its Commands and Functions, and says exactly what a single line IF with ELSE does. Colour_Maximite_2_Loadable_Programs.pdf adds services version 19 and build.py's --module, and Colour_Maximite_2_C_Compiler.pdf lists an array of a TYPE whose size can change (REDIM, or bounds that are not constants) among what the compiler refuses.
Licences
SQLite is in the public domain. The SQL module's settings follow usqlite's (Elvin Slavik), under the MIT licence; the module and the SQL command are the firmware's own. The licences folder of the zip has them, and its README lists every program's licence.
Colour Maximite 2 MMBasic 7.00.00RC5 (release candidate)
Colour Maximite 2: MMBasic 7.00.00RC5 (release candidate) release notes
10 November 2026. Compared with 7.00.00RC4, the last version released. The full notes, from 5.07.02, are in Release_Notes_7.00.00.md.
This is the sixth release candidate of MMBasic 7.00 for the Colour Maximite 2. Unless problems are found in it, it will become 7.00.00. Please report problems on the Back Shed forum.
It adds two emulators to the programs, an Amiga 500 and an Apple //e, from 11 November 2026 a third, the TRS-80, from 12 November a fourth, the BBC Micro, on 12 November a word processor, WordGrinder, and on 13 November a spreadsheet, sc-im. For the Amiga, the firmware gives loadable programs their sound by DMA, a copy without the cache's write-back, and the fast internal memory. MODE 8 now runs at 60Hz.
The same firmware file runs on both the Generation 1 and the Generation 2.
Before you update
Writing the firmware erases the options. Save them first, and load them again afterwards:
OPTION DISK SAVE "A:/myoptions"
Then write the firmware, and:
OPTION DISK LOAD "A:/myoptions"
The console runs at 115200 baud until the options are loaded. The library, the variables saved with VAR SAVE and the files on the SD card are kept.
Copy the new CMM2_Programs_7.00.00RC5.zip to the card as well: the amiga, apple2, trs80, bbc, wordgrinder and scim folders are new.
What is new
-
An Amiga 500 emulator (Generation 2), in the folder amiga: pico-amiga, drewpo28's emulator for the RP2350, with Karl Stenerud's Musashi 68000. It is an Amiga 500 with 1MB of memory and its original chipset, a PAL Amiga at its own 50 frames a second in 720 x 576, with its sound; -ntsc gives an NTSC Amiga at 60 frames a second in 640 x 480. The mouse is the Amiga's mouse and USB gamepads its joysticks. F11 brings up a menu of the disks on the card at any time, to boot one, to put it in the drive when a game asks for its next disk, or to put it in DF1, the second drive; it makes blank disks too. What the Amiga writes to a disk goes into its .adf file on the card, as onto a real disk, so saved games and your own work last; a read-only file, or -wp, is a write-protected disk. Ctrl+Alt+Del resets the Amiga. The heaviest demos tried keep up, with the sound on.
It needs a Kickstart ROM and disk images of your own: Kickstart is still copyright and does not come with it. If you have no Amiga of your own to take them from, Cloanto's Amiga Forever (www.amigaforever.com) is the legal way to get them, and costs little: its Value Edition has Kickstart 1.3, the Workbench 1.3 disk and over 50 games and demos. Copy Shared\rom\amiga-os-130.rom from its Amiga Files folder to A:/amiga, keeping its name, and the .adf disk images you want, then choose a disk from the menu:
CHDIR "A:/amiga" RUN "amiga.app"The App User Guide has a chapter on it, with how to take Amiga Forever's games and demos out of their .rp9 files.
On 11 November 2026 the zip's amiga.app was replaced (the firmware is unchanged): a jump to an odd address now gives the 68000's address error, as some copy protections expect, and a disk's data now arrives as the disk turns, as some loaders expect. Super Cars (Gremlin), which stopped with Guru Meditation #0000000B, now loads.
On 12 November 2026 it was replaced again (the firmware is unchanged): HAM7, the trick of seven bitplanes in HAM mode, where the Amiga fetches four planes and takes the other two from fixed words the program writes, is now shown as an Amiga shows it. Desire's Inside the Machine (2024) showed its HAM7 scenes, its metallic one among them, as a mush of pixels; they now look as they should.
-
An Apple //e emulator, in the folder apple2: frank-apple, rh1tech's port of Michel Pollet's MII. An enhanced Apple //e with 128K, an 80-column card, two Disk II drives and two hard disks, at the Apple's 60 frames a second in MODE 8, with its screen at full resolution. The Apple's ROMs are built in. The App User Guide has a chapter on it.
-
A TRS-80 emulator, in the folder trs80 (added to the programs on 11 November 2026: the firmware is unchanged): sdltrs, Mark Grebe's and Jens Guenther's emulator, from Tim Mann's xtrs. It is the TRS-80 Model I, III, 4 and 4P, with floppy and hard disks, cassettes, sound, a joystick, a mouse, a serial port and sdltrs's own menu (F7), on both generations. The Model 4's 80 x 24 screen fills MODE 8. What the TRS-80 writes to a disk goes into its file on the card. The ROM's MEMORY SIZE? and a DOS's date and time are answered for you, the last two from the clock.
No Tandy ROM comes with it. The Model 4P needs none: its free boot ROM is built in, and starts a Model 4 system disk such as LS-DOS 6.3.1, which may be copied freely and is at www.tim-mann.org/trs80.html. The Models I, III and 4 need level2.rom or model3.rom of your own in the folder; copies are at github.com/asig/xtrs-roms (level2rom.hex and romimage.m3, to be renamed), to download and use at your own risk:
CHDIR "A:/trs80" RUN "trs80.app", -model 4p -disk0 ld4-631.dskThe App User Guide has a chapter on it.
-
A BBC Micro emulator, in the folder bbc (added to the programs on 12 November 2026: the firmware is unchanged): frank-micro, rh1tech's port of Tom Walker's B-em by way of Graham Sanderson's B-em for the Pico. It is the BBC Micro Model B and the BBC Master 128, at the BBC's own 50 frames a second in 720 x 576 on both generations, with the BBC's ROMs built in, two disc drives whose discs are written to their files on the card, sound and a gamepad. Discs (.ssd, .dsd, .adf, .adl) go in A:/bbc/disk and are chosen with F11. The USB keyboard types what is printed on its keys. Sideways ROM images in A:/bbc/roms go into its sideways RAM as it starts, on either model, and *SRLOAD loads one from a disc:
CHDIR "A:/bbc" RUN "bbc.app", disk/elite.ssdThe App User Guide has a chapter on it.
-
A word processor, WordGrinder, in the folder wordgrinder (added to the programs on 12 November 2026: the firmware is unchanged): David Given's WordGrinder 0.8, for writing. It keeps to the words and their structure (headings, lists, quotations, bold, italic and underline) and exports them as ODT for Microsoft Word or LibreOffice, and as HTML, Markdown, LaTeX, Troff or plain text. It uses the video mode MMBasic is in, from 640 x 400 to 1920 x 1080, with a font chosen to suit; Alt+= and Alt+Minus change them as it runs. Its documents can be on the SD card or a USB flash drive. On a Generation 2 it checks spelling against a whole English dictionary, British or American, with the memory MMBasic lends it; on a Generation 1 there is not the room, and it says so and carries on. It runs on PDCursesMod, with a new screen and keyboard for the Colour Maximite 2:
CHDIR "A:/wordgrinder" RUN "wordgrinder.app", letter.wgThe App User Guide has a chapter on it.
-
A spreadsheet, sc-im, in the folder scim (added to the programs on 13 November 2026: the firmware is unchanged): Andrés Martinelli's sc-im 0.8.6, a spreadsheet worked from the keyboard as the vi editor is. It has formulas with over 60 functions, several sheets in a file, number and date formats, sorting, filters, undo and colours. It keeps its sheets in its own text format (.sc), formulas and all, and reads and writes CSV files from and to Microsoft Excel and LibreOffice (CSV UTF-8 or Excel's plain CSV), tab-separated files and Markdown tables. A USB mouse moves to a cell with a click, types a cell's name into a formula, and scrolls with its wheel. Like WordGrinder, it uses the video mode MMBasic is in, and Alt+= and Alt+Minus change the mode and the font. Its CSV reading and writing were mended for Excel's files: the mark at the start of a CSV UTF-8 file, quotes inside text, and the accented letters of a plain CSV file:
CHDIR "A:/scim" RUN "scim.app", budget.scThe App User Guide has a chapter on it, with a first sheet to make step by step.
-
Going up a folder in the Atari's and the TRS-80's lists of files (on 12 November 2026 the zip's atari800.app and trs80.app were replaced: the firmware is unchanged). [..] at the top of each folder's list (<..> on the TRS-80) now goes up a folder, as far as A:/. Before, once in a folder, the Atari could go up only with Backspace, and the TRS-80 not at all.
-
MODE 8 is 640 x 480 at 60Hz, the standard VGA timing, where it was 75Hz. Its GETSCANLINE counts to 524. The other modes are unchanged.
-
For programmers:
- Version 17 of the services: video_mode and video_scaled take depth 12, a screen of 4,096 colours as ARGB4444 on one layer, each pixel 0x0RGB as an Amiga's colour registers hold them.
- Version 18: dma2d_copy_nc, a DMA2D copy that does not write its source back from the cache first, for a second copy of the same rows.
- The sound stream (audio_start) now goes to the DACs by DMA, with no interrupt for each sample: in the Amiga emulator the sound's cost fell from 0.75ms a frame to 0.15. Programs need no change.
- build.py's new options --axi and --itcm put a program's hottest code and data in the processor's AXI RAM and in the ITCM above the firmware's code (0xA000 to 0xFFFF), on a Generation 2. The firmware keeps that ITCM free from this version on.
- From 12 November the tools' readdir gives ".." first in a folder below a drive's top folder, as Linux's does, and stat and opendir take names with "." and ".." in them, on exFAT cards too.
What behaves differently
- MODE 8 runs at 60Hz, not 75Hz. A program that times itself by the frame (with the frame interrupt of MODE, or GETSCANLINE) runs at 60 frames a second in MODE 8.
- MM.VER is 7.000055 for RC5.
The programs tested
On a Generation 2 unless it says otherwise:
- amiga:
- Mental Hangover (Scoopex) and Arte (Sanity), the heaviest demos tried, at 50 frames a second all through with the sound on.
- The Workbench 1.3 desktop with the mouse an...
Colour Maximite 2 MMBasic 7.00.00RC4 (release candidate)
Colour Maximite 2: MMBasic 7.00.00RC4 (release candidate) release notes
9 November 2026. Compared with 7.00.00RC3, the last version released. The full notes, from 5.07.02, are in Release_Notes_7.00.00.md.
This is the fifth release candidate of MMBasic 7.00 for the Colour Maximite 2. Unless problems are found in it, it will become 7.00.00. Please report problems on the Back Shed forum.
It adds an Atari 8-bit emulator to the programs, lets a program set OPTION PICOMITE for itself alone, gives programs a gamepad's right stick and analogue triggers, and accepts the USB serial bridge on a Generation 1 (the Microbridge).
The same firmware file runs on both the Generation 1 and the Generation 2.
Before you update
Writing the firmware erases the options. Save them first, and load them again afterwards:
OPTION DISK SAVE "A:/myoptions"
Then write the firmware, and:
OPTION DISK LOAD "A:/myoptions"
The console runs at 115200 baud until the options are loaded. The library, the variables saved with VAR SAVE and the files on the SD card are kept.
Copy the new CMM2_Programs_7.00.00RC4.zip to the card as well: atari800 is new, and the c64 folder was added to RC3's zip on 8 November.
What is new
-
An Atari 8-bit emulator. atari800 7.2.1, the Atari800 development team's emulator, in the folder atari800: the Atari 400 and 800, the XL and XE computers and the 5200 console, at the Atari's own speed in MODE 7, with its own menus (F1) for disks, cartridges, tapes and the machine. AltirraOS and Altirra BASIC, Avery Lee's free replacements for Atari's ROMs, are built in, so it needs nothing else; Atari's own ROMs are used if you put them in its folder. USB gamepads are its joysticks, with a single pad's right stick as the second joystick for twin-stick games, and the mouse can be paddles, an ST or Amiga mouse, a trak-ball, a light pen or a Koala pad. The keys follow OPTION USBKEYBOARD. The App User Guide has a chapter on it.
CHDIR "A:/atari800" RUN "atari800.app"It runs on the Generation 1 and the Generation 2.
-
The Commodore 64 emulator, added to RC3's zip on 8 November, is in this zip too: frank-c64, a PAL C64 with its 1541 disk drive, in the folder c64. It runs on the Generation 1 and the Generation 2.
-
zeptoforth 1.17.2, Travis Bemann's release of 9 November, in place of the development version in RC3's zip: its fixed-point exp and expm1 are more accurate, and its own fix for the cursor on leaving zeptoed replaces ours. Its saved Forth systems are new, so copy the whole zeptoforth folder.
-
OPTION PICOMITE in a program is for that program. At the command prompt the option is saved, as before. Run in a program it now works, where it gave the error "Invalid in a program", and lasts until the program ends: the display changes at once to the PicoMite's MODE 1 (or, with NONE, to the Colour Maximite 2's mode), and when the program ends, with END, an error or Ctrl-C, the saved setting is in force again. So a PicoMite program can start with OPTION PICOMITE HDMI and run the same whether or not the option is saved. It is not saved even if the program saves other options, and OPTION LIST shows the saved setting.
-
EDIT's mark mode: End pressed twice (or Ctrl-K twice) marks to the end of the program, as it moves there in edit mode. End once still marks to the end of the line.
-
For programmers: version 16 of the services adds gamepad_axes, which gives a pad's right stick and its analogue L2 and R2 as well as the buttons and the left stick. atari800 uses it for twin-stick games, and works without it on older firmware.
Fixed since 7.00.00RC3
- The Generation 1's USB serial bridge (the Microbridge, a programmed PIC) was not accepted as a USB serial device by another Colour Maximite 2: it refuses the request that sets DTR and RTS, and OPEN gave the error "did not accept DTR/RTS". A device that refuses it is now opened without it. An attempt that had failed also left the USB host's set-up unfinished.
- EDIT's mark mode drew the top line over the status line after a scroll that left the start of the selection above the screen, and the status line gave the line below the cursor after a scroll.
- atari800 (in the zip, not the firmware): any use of a tape crashed the emulated Atari under AltirraOS. atari800 patches the operating system's tape routine at a fixed address, which was wrong for the AltirraOS it ships with; this release's atari800 has it corrected.
What behaves differently
- OPTION PICOMITE is accepted in a program (it gave "Invalid in a program").
- MM.VER is 7.000054 for RC4. A release will count as 99 in the last two digits, so 7.00.00 will be 7.000099, above every beta and release candidate of the same version.
The programs tested
On a Generation 2 unless it says otherwise:
- atari800: Altirra's own test suite for emulators, Acid800, gives the same result on the Colour Maximite 2 as atari800 on a PC, test for test. BASIC with Altirra's ROMs and with Atari's; a program (.xex), a disk image (.atr), an 8K cartridge (.car) and a 5200 cartridge (Acid5200); a tape saved with CSAVE and loaded back with CLOAD; boot tapes, fast and at real speed. Two USB gamepads, one pad's two sticks in a twin-stick game, and the mouse as paddles. Sound, the keyboard and the menus.
- atari800 on a Generation 1: Acid800, test for test the same as on the Generation 2; a program, a disk image, a cartridge, two boot tapes, BASIC and the menu, at the Atari's full 50 frames a second with about half the processor spare.
- c64 on a Generation 1: BASIC, a program (.prg) and a disk image through its 1541, at the C64's full 50 frames a second with three quarters of the processor spare.
- zeptoforth 1.17.2: its 108 double-precision checks, the solar eclipse program's output identical to MMBasic's byte for byte, and the checks of its Colour Maximite 2 words (files, graphics, the documentation and a stress test), all passed.
- OPTION PICOMITE set in a program, with the option saved and not saved: MM.DEVICE$ during and after, and OPTION LIST.
- gamepad_axes with a DualShock 3 and a DualShock 4.
- A Generation 1's Microbridge on a Generation 2's USB socket, with the VT100 terminal at 115200 baud.
Known problems
- atari800: with its SIO patch off (tapes at real speed), a tape that has a program file after its boot loader stops with a checksum error under AltirraOS; with Atari's own XL operating system it loads. With the SIO patch on, as it starts, both load at once.
- The MCP2221A USB to serial bridge (used on some Generation 1 boards) loses characters above 57600 baud on a USB socket, as it has no flow control. The manual says so.
The known problems of 7.00.00RC3 remain.
The manual
The User Manual describes OPTION PICOMITE in a program, and mark mode's End End. Colour_Maximite_2_Loadable_Programs.pdf adds services version 16, and Colour_Maximite_2_App_User_Guide.pdf the Commodore 64 and Atari emulators.
Licences
atari800 is under the GNU GPL version 2 or later. AltirraOS and Altirra BASIC, built into it, are copyright Avery Lee and may be copied and passed on with their notice. frank-c64 and Frodo are under the GNU GPL version 2 or later, and the C64's ROMs built into it are Commodore's. The licences folder of the zip has them, and its README lists every program's licence.
Colour Maximite 2 MMBasic 7.00.00RC3 (release candidate)
Colour Maximite 2: MMBasic 7.00.00RC3 (release candidate) release notes
7 November 2026. Compared with 7.00.00RC2, the last version released. The full notes, from 5.07.02, are in Release_Notes_7.00.00.md.
This is the fourth release candidate of MMBasic 7.00 for the Colour Maximite 2. Unless problems are found in it, it will become 7.00.00. Please report problems on the Back Shed forum.
It fixes USB serial devices, which a user could not rely on, and adds a VT100 terminal, so that a Colour Maximite 2 can be the screen and keyboard of a PicoMite. Saving a game now works properly in ScummVM. A new guide brings all the programs together.
The same firmware file runs on both the Generation 1 and the Generation 2.
Before you update
Writing the firmware erases the options. Save them first, and load them again afterwards:
OPTION DISK SAVE "A:/myoptions"
Then write the firmware, and:
OPTION DISK LOAD "A:/myoptions"
The console runs at 115200 baud until the options are loaded. The library, the variables saved with VAR SAVE and the files on the SD card are kept.
Copy the new CMM2_Programs_7.00.00RC3.zip to the card as well: quest/scummvm.app has changed, and vt100 is new.
What is new
-
Two changes of 8 November. The firmware file CMM2_MMBasic_7.00.00RC3.bin was replaced on 8 November with only these two. If you have the one from 7 November, you need the new one only for them.
- AUTOSAVE ends with Ctrl-Z too. Ctrl-Z now ends AUTOSAVE as F1 does: it saves the file and loads it without running it. This is as the PicoMite does it, so that MMEdit can end a transfer the same way on both.
- A Generation 2 drives the lowest bit of blue. The pin for it (PE4) was left out of the video's set-up, as it had been since the original firmware, although a Generation 2 wires it. The difference on screen is one step in 256 of blue.
-
A Commodore 64 emulator, added to the zip on 8 November. frank-c64, rh1tech's port of Christian Bauer's Frodo, in the folder c64: a PAL C64 with a 1541 disk drive, at its 50 frames a second in MODE 7. It loads programs and disk images from its F10 menu, plays the SID's sound, and has two USB gamepads as its joysticks and a USB mouse as a 1351 mouse. The keys follow OPTION USBKEYBOARD, and the C64's ROMs are built in. The firmware has not changed: if you have RC3, copy the folder from the new zip. The new Colour_Maximite_2_App_User_Guide.pdf has a chapter on it.
CHDIR "A:/c64" RUN "c64.app"It has been tried on a Generation 2 only so far.
-
Quake, added to the zip on 7 November. id Software's game with its shareware episode, in the folder quake, on a Generation 2. It needs no change to the firmware, and its timed demo runs at about 53 frames a second with the sound on. The App User Guide has a chapter on it.
CHDIR "A:/quake" RUN "quake.app" -
zeptoforth, added to the zip on 7 November. Travis Bemann's Forth, in the folder zeptoforth: preemptive tasks, double precision, the zeptoed editor, and words for the screen, sound, files and I/O pins. Its console is the VT100 terminal, so colours and the editor work on the Colour Maximite 2's own screen and keyboard. The firmware has not changed: if you have RC3, copy the folder from the new zip. The new Colour_Maximite_2_App_User_Guide.pdf has a chapter on it.
CHDIR "A:/zeptoforth" RUN "zeptoforth.app"On a Generation 1 the program is zeptoforth_g1.app.
-
A VT100 terminal. Plug a PicoMite into a USB socket, directly or through a hub, and use its prompt, EDIT and FM on the Colour Maximite 2's screen, in colour and with the mouse:
CHDIR "A:/vt100" RUN "vt100.app", COM4 115200- It uses the USB serial devices COM4 to COM7, and COM1 and COM2.
- When a PicoMite asks for a screen size, at EDIT, FM or OPTION DISPLAY, the terminal changes to it.
- It has a setup menu on Shift-F12, scrollback, a log, XMODEM both ways, and a choice of fonts, colours and cursors.
- If the device restarts or is unplugged, the status line says so, and the terminal carries on when it comes back, as Tera Term's auto reconnect does.
- It is built on libvterm, with the Spleen fonts.
-
A new manual, Colour_Maximite_2_App_User_Guide.pdf, tells you how to install, start, use and leave each of the programs: MicroPython, Doom, Heretic, ScummVM, the NES, ZX Spectrum and Amstrad CPC emulators, the 386 PC, the C compiler and the terminal.
-
Saving a game in ScummVM. In the LucasArts games F5 now opens a menu of nine save slots, drawn over the game: S saves, R restores. Alt-1 to 9 save and Ctrl-1 to 9 restore without the menu, and a message says when a game has been saved. The AGI and SCI games now use their own save and restore screens, with a choice of slots.
-
Ctrl-J on a USB keyboard is a line feed, not Enter, to a program that reads keys. At the prompt and in EDIT it still ends a line.
-
For programmers: version 14 of the services adds COM4 to COM7 to the com_ services, and version 15 adds com_connected, which says whether a USB serial device is there.
Fixed since 7.00.00RC2
- On a Generation 1 with OPTION COMPILE ON, CC stopped with "out of memory" and the NES emulator would not start. The 1MB OPTION COMPILE keeps for itself stood between the heap and the display memory. From the command prompt a program now has that memory as well, and the next RUN of a BASIC program compiles it again. OPTION COMPILE itself does not change.
- A PicoMite plugged straight into the USB socket connected and then disconnected at once. USB's 48MHz clock came from an RC oscillator that ran 0.94% fast on a Generation 2 and 0.29% slow on a Generation 1, where USB full speed allows 0.25%. A hub hid it. At 480MHz USB's clock now comes from the crystal, and is exact. At 400MHz the oscillator is trimmed from the RTC's crystal once, at start up, and measured between 47.966 and 48.014MHz.
- A USB serial port stopped working after it had been opened and closed a number of times, after 17 to 111 times on our boards. It then read nothing, or OPEN said that the device did not accept the baud rate, or a CH340 hung for ever. A request to the device met the port's own reads. OPEN and CLOSE now keep them apart.
- Output to a serial port could stop, with a byte waiting until the next output. The interrupt could find its queue empty and turn itself off just as a byte was added, on COM1, COM2 and the serial console.
- A font replaced by DEFINEFONT outlived its program. After a program that replaced font 4 or 5, the next program read what was left where that font had been, as a font 255 pixels square. In MODE 9 that was the console's own font. Fonts 2 and 3 did the same across CHAIN. All the fonts now go back to the built in ones when a program ends.
- MM.INFO(FONT ...) and MM.INFO(FLASH ...) ignored what followed them, so that a misspelt MM.INFO(FONT ADRESS 1) gave a wrong answer and no error.
- No function key reached a LucasArts game in ScummVM. This is why F5 did nothing.
What behaves differently
- On a Generation 1 the message "Needs n KB, n KB free" is now "Needs n KB, n KB free in one block", and gives the largest block. It named the display memory alone, even with the heap free.
- MM.INFO(FONT 5), MM.INFO(FLASH 2) and MM.INFO(FONT ADDRESS 1,2) now give the error "Unexpected text".
- INKEY$ gives CHR$(10) alone for Ctrl-J. It gave CR and then LF, as Enter does.
- A program chained from one that used OPTION LEGACY ON has the normal fonts. It kept the legacy ones, with OPTION LEGACY already off.
The programs tested
On both generations unless it says otherwise:
- A USB serial port opened and closed 480 times in a tight loop, with a PicoMite on a Generation 2 and a CH340 through a hub on a Generation 1. It had failed within seconds.
- A port held open through 1,990 rounds while Caps Lock was pressed 128 times, which sends requests to the keyboard through the same USB port. None were lost. (Generation 1.)
- A PicoMite restarted 5 times with its port open, and a lead pulled out and put back. (Generation 2.)
- The terminal with a real PicoMiteVGA, through a hub and direct: EDIT, the mouse, OPTION DISPLAY, the bell, and XMODEM of 193KB in both directions, the same byte for byte apart from the padding XMODEM adds to a binary file. (Generation 2.)
- The terminal with a real PicoMite on a Generation 1: the prompt, EDIT, a restart, and XMODEM in both directions.
- The terminal with vttest, the standard test of a VT100, on a PC with the program's own code: all of a VT100's features pass.
- zeptoforth: 313 checks of its words for the firmware's services, 108 of double precision against IEEE bit patterns, and a 1,900-line solar eclipse program whose output is identical to MMBasic's, byte for byte. A real USB keyboard on a Generation 2, and a Generation 1 with OPTION COMPILE ON.
- Quake on a Generation 2: its timed demo, 969 frames at 53.3 frames a second with the sound on and 57.1 with it off, saving and loading a game, and playing it with a USB keyboard and mouse.
- The Commodore 64 on a Generation 2: BASIC, the USB keyboard, a program and a disk image from the F10 menu, LOAD"$",8 from a disk, the SID's sound, a DualShock 3 and a DualShock 4 as the two joysticks, and Commodore's own 1351 mouse driver moving a sprite with a USB mouse.
- Saving and restoring in ScummVM, in the LucasArts, Sierra and other games. (Generation 2.)
- Each fault in the fonts and MM.INFO, shown on the old firmware and gone on the new.
- With OPTION COMPILE ON, CC and the NES emulator, each followed by a compiled BASIC program, and a compiled program that runs another program and carries on. (Generation 1.)
Known problems
- A Generation 1 has less memory for a program run from a compiled BASIC program, or with OPTION RAM, because the BASIC program's memory is then in the way. If a large program will not start, run it from the command prompt, and u...
Colour Maximite 2 MMBasic 7.00.00RC2 (release candidate)
Colour Maximite 2: MMBasic 7.00.00RC2 (release candidate) release notes
5 November 2026. Compared with 7.00.00RC0, the last version released: 7.00.00RC1 was prepared but not released, and its changes are here. The full notes, compared with MMBasic 5.07.02, are posted with these.
This is the third release candidate of MMBasic 7.00 for the Colour Maximite 2. Unless problems are found in it, it will become 7.00.00. Please report problems on the Back Shed forum.
It adds a C compiler on the Colour Maximite 2 itself, which also compiles MMBasic programs; pc386, a 386 PC that runs FreeDOS, MS-DOS and Windows 3.1; a NES emulator; and Heretic. It also makes OPTION SD TIMING FAST much faster, and fixes OPTION OVERCLOCK, which stopped a Generation 1 from responding.
The same firmware file runs on both the Generation 1 and the Generation 2.
Updated on 6 November 2026
The firmware is unchanged. CMM2_Programs_7.00.00RC2.zip has new spectrum and cpc folders. To add them, copy them to A:/spectrum and A:/cpc.
-
A ZX Spectrum emulator. It is pico-spec, DnCraptor's port of the ESPectrum emulator, with a front end for the Colour Maximite 2:
CHDIR "A:/spectrum" RUN "spectrum.app"- It runs at the Spectrum's 50 frames a second on both generations, in MODE 7,8, and passes z80test's full test of the Z80.
- The ROMs are built into the program, so it needs nothing else on the card to start. Tapes and snapshots go in A:/spectrum, and F5 opens them.
- F1 opens its menu, which also chooses the machine. Ctrl is Symbol Shift, so Ctrl-C does not end the program: Ctrl+Alt+End leaves.
- The README in the zip lists its keys, and says whose its ROMs are.
-
An Amstrad CPC emulator. It is frank-cpc, rh1tech's port of the Caprice32 emulator, with a front end for the Colour Maximite 2:
CHDIR "A:/cpc" RUN "cpc.app"- It runs at the CPC's 50 frames a second on both generations, in MODE 8,8, as a CPC 464, 664 or 6128, with all 640 pixels of Mode 2.
- Its four ROMs are in its rom folder. Disks, tapes and cartridges go in A:/cpc/disk, and F11 opens them. F12 is the settings.
- The keys give what is printed on them, by OPTION USBKEYBOARD. Ctrl is the CPC's CONTROL, so Ctrl-C does not end the program: Ctrl+Alt+End leaves.
- The README in the zip lists its keys, and says whose its ROMs are.
Updated on 5 November 2026
The firmware is unchanged. CMM2_Programs_7.00.00RC2.zip has a new pc386.app, and Colour_Maximite_2_386_PC_Emulator.pdf is updated. To update pc386, copy pc386.app from the zip over the one in A:/pc386.
- A serial port. The line com1 = 9600 in the [pc386] section of a configuration file makes the PC's COM1 the Colour Maximite 2's COM1, on GP0 and GP1. There is no flow control. Tested on a Generation 1: a DOS program at up to 115200 baud, and Windows 3.1's Terminal sending and receiving files by XModem at 9600 and 38400 baud.
- CD images (cda to cdd in the configuration file) work, and the PC can start from one.
- Windows 95 installs from its CD and runs on a Generation 2, with the mouse and sound. It is not fast: Setup takes about three hours. The guide has a new chapter on it. It needed a fix to the PC's CMOS, which gave Setup a memory size of 0 bytes.
- tiny386 brought up to date. The mouse reports at the rate the PC's driver sets. Timer ticks missed while the emulator was held up are dropped, and a page table outside the PC's memory is taken as not present, both by Platima.
- On the serial console, Ctrl-A holds Alt for the next key, which opens Windows' menus from a terminal.
Before you update
The flash is laid out differently in this version, so the first start after the update does some work. It takes a few seconds longer than usual: please let it finish.
- Options kept: all of them, from 7.00.00b4 or later. Earlier notes said this of the betas and RC0, and it was not so: an update then reset most of them. This one keeps them. An OPTION OVERCLOCK ON saved by an earlier version is left out on a machine where it no longer applies (see below).
- Kept: the library, the variables saved with VAR SAVE, the flash slots (which are on the SD card), a program held in flash with OPTION FLASH 3 to 6, and the programs and files on the SD card.
- Not kept: the program held in flash with the default OPTION FLASH 2, as the firmware now uses that part of the flash. RUN loads it again from its file as usual, and a program run at power up by OPTION AUTORUN has to be run once from its file.
From this version on, writing the firmware erases the options. They now share a sector of the flash with the runtime of compiled programs. The first update, to this version, moves them for you. For later ones, use the new OPTION DISK SAVE before you update and OPTION DISK LOAD afterwards. The keyboard layout and the time are kept without it.
What is new
-
The C compiler. CC compiles a program on the Colour Maximite 2, with no PC:
CC "hello.c" RUN "hello.bc"- It is the Fuzix Compiler Kit, with the bytecode and Arm (Thumb-2) code generator written for the Pico Computer 3. A small program compiles in under a second, and its floating point runs on the processor's double precision hardware.
- RUN "hello.c" compiles the file if it needs it, and runs it. A compiled program can use the graphics, sound, keyboard, mouse and I/O pins through cmm2.h.
- The compiler is in the cc folder of CMM2_Programs_7.00.00RC2.zip, which goes on the card as A:/cc. What runs a compiled program is in the firmware, so a compiled program needs nothing from the card.
-
Compiled MMBasic. CC compiles an MMBasic program too:
CC "game.bas" RUN "game.b.bc"- The program is translated to C and compiled. Your .bas file is not changed, and RUN "game.bas" still runs it with the interpreter.
- A program that spends its time calculating gains the most. A 3,200-line program that predicts eclipses took 6.16 seconds with the interpreter, 1.71 with OPTION COMPILE ON and 0.93 compiled, and its output was the same.
- A game gains less, as its drawing takes the same time however it is run. Wolfenstein 3D ran at 28.5 frames a second with the interpreter, 79.7 with OPTION COMPILE ON and 90.2 compiled. Into the Darkness, which spends most of its time drawing, ran at 17.8, 37.5 and 37.9.
- A line that CC cannot translate is left out and reported, so read what it says and compare the result with the BASIC program.
- A new manual, Colour Maximite 2 C Compiler, describes all of this.
-
pc386, a 386 PC. It is tiny386, Chunhui He's 386 PC emulator, with a front end for the Colour Maximite 2:
CHDIR "A:/pc386" RUN "pc386.app"- The PC has a 386 processor with a maths coprocessor, 4MB of memory (2.75MB on a Generation 1), a VGA card shown at 640 x 480 in 256 colours, a Sound Blaster 16, an Adlib and the PC speaker. The Colour Maximite 2's USB keyboard and its USB or PS/2 mouse are the PC's.
- Its hard disks and floppy disks are image files on the SD card. Ctrl+Alt+Page Down and Page Up change the disk in drive A: from a list, as you would change disks when an installation asks for the next one. Ctrl+Alt+End leaves.
- It comes with FreeDOS 1.3 installed on a hard disk image, ready to run. MS-DOS 6.2 and Windows 3.1 install from images of your own disks, and run with mouse and sound.
- FreeDOS starts in about 35 seconds on a Generation 2, and Windows 3.1 is usable. On a Generation 1 of revision Y, OPTION OVERCLOCK ON (below) makes it as fast as on a Generation 2.
- A new manual, Colour Maximite 2 386 PC Emulator, describes its keys, the configuration file of each PC, disk images, moving a PC to another Colour Maximite 2, getting your own programs onto its disks, and installing MS-DOS and Windows 3.1.
-
A NES emulator. It is frank-nes, Mikhail Matveev's emulator, on the QuickNES core by Shay Green:
CHDIR "A:/nes" RUN "nes.app"- It runs at full speed on both generations, with about 80% of the processor to spare, in MODE 7,8 with the Colour Maximite 2's own sound.
- It uses USB gamepads, a DualShock 3 or a generic pad among them, and the USB keyboard. Ctrl+Alt+End leaves, as it does pc386.
- Two free games come with it, Nova the Squirrel and Thwaite, in the nes folder of the zip. Any other .nes file you have the right to use goes in A:/nes.
-
Heretic. Raven Software's game, through frank-heretic by Mikhail Matveev, on the same layer as Doom, with its music on the firmware's FM synthesiser:
CHDIR "A:/heretic" RUN "heretic.app"- It comes with Heretic's shareware episode, in the heretic folder of the zip. If you have the full game, put its heretic.wad in the folder, and it is used in place of the shareware.
-
OPTION DISK SAVE fname$ and OPTION DISK LOAD fname$ save the options to a file and load them back, with the flash library if there is one.
-
OPTION SD TIMING FAST now drives the SD card with the processor's SPI hardware directly. A 32MB copy on a Generation 2 takes 37 seconds, against 51 seconds with RC0's FAST and 59 seconds with NORMAL.
-
Loadable programs: services version 13.
- keys_raw gives a program the USB keyboard's own key codes, the keys' places before any keyboard layout.
- gamepad gives a program the USB gamepads, as DEVICE(GAMEPAD n, B) gives them in BASIC.
- Drawing by MMBasic's own routines (gfx_cls to gfx_save), and the firmware's memory routines and maths library.
- basic_cmd, basic_eval, basic_prep and basic_exec give a program MMBasic's statements and expressions.
- A file opened to read and write in place now seeks as fast as one opened only to read.
- The Loadable Programs manual describes them.
What behaves differently
- OPTION OVERCLOCK ON now runs an original Colour Maximite 2 whose processor is of revision Y at 480MHz, in place of 400MHz: the speed at which every other Colour Maximite 2 runs. It gives an e...
Colour Maximite 2 MMBasic 7.00.00RC0 (release candidate)
Colour Maximite 2: MMBasic 7.00.00RC0 (release candidate) release notes
3 November 2026. Compared with 7.00.00b5, the previous beta. The full notes, compared with MMBasic 5.07.02, are posted with these.
This is the first release candidate of MMBasic 7.00 for the Colour Maximite 2. Unless problems are found in it, it will become 7.00.00. Please report problems on the Back Shed forum.
It adds two things. The Colour Maximite 2 can now run programs written in C and C++, compiled for its processor: MicroPython, Doom and ScummVM come with it, and a new manual explains how to write more. And it has an FM synthesiser, an emulated OPL3, which plays MIDI files, the PicoMite's PLAY MIDI and PLAY NOTE commands without a VS1053 module, and the music of DOS games.
The same firmware file runs on both the Generation 1 and the Generation 2.
Before you update
- Options kept: all of them. A setting of OPTION FLASH 1 becomes OPTION FLASH 2 (see below).
- Kept: the library, the variables saved with VAR SAVE, the flash slots (which are on the SD card), and the programs and files on the SD card.
- Not kept: the program held in flash, as the firmware now uses that part of the flash. RUN loads it again from its file as usual. A program run at power up by OPTION AUTORUN has to be run once with RUN after the update.
What is new
-
Loadable programs. A file ending .APP is a program written in C or C++ and compiled for the Colour Maximite 2's processor. RUN runs it:
RUN "A:/micropython.app" CHDIR "A:/Doom" : RUN "doom.app"- It runs at the full speed of the processor and takes over the computer while it runs, through services the firmware gives it: the console, files, the screen, the keyboard and mouse, sound, the FM synthesiser and the I/O pins.
- The words after RUN's comma are its arguments. When it ends, MMBasic carries on: at the command prompt it returns to the prompt, and in a BASIC program it goes on with the next statement, the program's variables as they were.
- MMBasic tidies up after it: its files are closed, its sound stopped, its I/O pins released, and the video mode, font, colours and palette put back.
- Ctrl-C asks it to end, and then stops the BASIC program that ran it too.
- A Generation 2 keeps 8MB of its memory for loadable programs. A Generation 1 lends a program the largest free part of MMBasic's heap (about 4MB at the command prompt) while it runs, and a program built for it, as Doom and ScummVM are, the 3MB of display memory as well: about 7MB in all. The same program file runs on both generations.
- Errors: "Not a loadable program", "Needs a newer firmware", "Needs a G2", "Needs n KB, n KB free", "The program file is damaged".
-
Three programs come with the firmware, in CMM2_Programs_7.00.00RC0.zip, to copy to the SD card:
- MicroPython, as on the Pico Computer 3: its display, keyboard, mouse, audio and image modules, SQLite, ulab and the machine module on the rear I/O pins. It runs Python about twice as fast as the RP2350 does.
- Doom, with Freedoom, a free replacement for its game data: about 50 frames a second on a Generation 2 and 35 on a Generation 1, with its sound effects and its music on the FM synthesiser.
- ScummVM, for classic adventure games (AGI, SCI, SCUMM, Gobliiins and Kyrandia), with three free games: the Freddy Pharkas demo, DG: The Adventure Game and Another DG Game. It runs on both generations. Games you own go in folders of A:/quest whose names the zip's README.txt lists, and
RUN "scummvm.app", dottstarts one at once.
-
A new manual, Colour Maximite 2 Loadable Programs, is for programmers: the tools that build a program (in the repository's tools/sdk, with the free Arm GNU toolchain), how the firmware runs one, every service with examples, and how MicroPython, Doom and ScummVM were ported.
-
An FM synthesiser: an emulation of the Yamaha YMF262 (the OPL3 of the Sound Blaster cards), by ymfm.
- PLAY MIDIFILE file$ [, interrupt] plays a Standard MIDI File.
- PLAY MIDI turns it into a General MIDI instrument for PLAY NOTE ON and PLAY NOTE OFF and PLAY MIDI CMD, the PicoMite's commands for its VS1053 module. PLAY MIDI TEST plays a tune kept in the firmware.
- Each of the 128 General MIDI instruments and each drum is an FM instrument of the GENMIDI bank in the firmware (Freedoom's, the bank Doom's music was written for), so MIDI music sounds as it did on a DOS game's Sound Blaster.
- PLAY OPL file$ [, interrupt] plays music recorded from an OPL chip: IMF (Wolfenstein 3D, Commander Keen), DOSBox's DRO and VGM files.
- PLAY OPL on its own, PLAY OPL WRITE and PLAY OPL RESET let a program write the chip's registers itself, and PLAY OPL TEST measures its share of the processor.
- It plays in the background as the other sounds do, and PLAY PAUSE, RESUME, STOP and VOLUME work on it. MM.INFO$(SOUND) gives "OPL" or "MIDI", and MM.INFO$(TRACK) the file's name.
- It takes a share of the processor while it plays: about 20% with no notes sounding and 30% to 55% for typical music on a Generation 2. A BASIC program keeps about three quarters of its speed.
What behaves differently
- OPTION FLASH takes 2 to 6, and 2 is the default. The firmware has grown into the first part of the flash that programs used.
- MM.INFO(HEAP) on a Generation 2 is 8MB less (about 15.9MB), as that memory is kept for loadable programs.
Fixed since 7.00.00b5
- With a USB touch screen and OPTION MAXCTRLS above 0, programs ran slower, as every statement checked for the GUI's touch input. The GUI is now seen to once a millisecond: the solar eclipse benchmark takes 1.70 s compiled with the GUI running, as it does without it.
- RUN's arguments after a ':' or in a single-line IF reach the program as they are written. In
CHDIR "A:/Doom" : RUN "doom.app", -timedemo demo1the program was given them in capitals and with the minus sign changed (MMBasic's stored form of the line), and so was MM.CMDLINE$ after such a RUN in a program. RUN at the start of a line was always right. - After PLAY WAV (or FLAC, MP3) and PLAY STOP, the sound output kept the number of the file it had closed. A file the program opened next could be given that number, and the next sound command closed it.
- On a Generation 1, MODE 8,4 with three FRAMEBUFFER layers stopped responding (the test program rgb121, at FRAMEBUFFER LAYER TOP and then FRAMEBUFFER WAIT; 7.00.00b5 too). Drawing the layers onto the display took longer than a frame, so the drawing ran without a break and the program, Ctrl-C included, never ran again. It now takes about three quarters of a frame, and a drawing that ever takes longer than a frame is made every other frame instead. The firmware file of this release was replaced with the fixed one on 3 November, about two hours after it was first posted: download it again if you took it earlier.
The programs tested
- The regression tests: tests/cmm2 (113 programs), the PicoMite's tests, the goldens (202 programs) and the Testfiles (66), each with OPTION COMPILE OFF, ON and SHADOW; SP Tools; the editor's and the file manager's tests. All give the results they gave with 7.00.00b5, except the free memory that three of the Testfiles print, now 8MB less on a Generation 2.
- On a Generation 1, tests/cmm2 runs as on a Generation 2, apart from what the Generation 1's hardware does not have (32-bit colour, the mouse in use).
- MicroPython, Doom and ScummVM on both generations, including the full Day of the Tentacle.
Known problems
- With a USB touch screen connected, a mouse click can be taken as a swipe by the GUI controls' gestures, as the click's end is taken from the touch screen.
- An armed interrupt pin slows the program down, because the pin is polled after every statement.
The manual
The User Manual describes all of the above:
- RUN of a .APP file, in the commands, and the chapter Using MMBasic's new section Loadable Programs;
- the FM synthesiser, in the chapter Sound Output's new section FM Synthesis and MIDI, and PLAY MIDI, PLAY NOTE, PLAY MIDI CMD, PLAY MIDI TEST, PLAY MIDIFILE and PLAY OPL in the commands;
- MM.INFO$(SOUND) and MM.INFO$(TRACK), in the read-only variables;
- the memory kept for loadable programs, in the chapter MMBasic Characteristics.
Appendix O lists the new companion manual, Colour_Maximite_2_Loadable_Programs.pdf, posted with this release.
Licences
The FM synthesiser is ymfm, and its MIDI instrument bank and PLAY MIDI TEST's tune come from Freedoom. Both are under the BSD 3-Clause licence, whose notices follow:
ymfm: Copyright (c) 2021, Aaron Giles. All rights reserved.
Freedoom: Copyright (c) 2001-2024 Contributors to the Freedoom project. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR...
Colour Maximite 2 MMBasic 7.00.00b5 (beta)
Colour Maximite 2: MMBasic 7.00.00b5 (beta) release notes
2 November 2026. Compared with 7.00.00b4, the previous beta. The full notes, compared with MMBasic 5.07.02, are posted with these.
This beta comes from running published Colour Maximite 2 programs on MMBasic 7.00: Wolf3D, Gauntlet, Into the Darkness, Z-MIM, NOMIS, BoxDot, Cuno, the Welcome Tape and SP Tools. It fixes the problems they found in the firmware. It also lets a program use a new command's name as a variable, and adds RUN with a string expression, MM.MOUSE and the rest of the PicoMite's MM.INFO keys. With OPTION COMPILE ON, the graphics commands and most built-in functions are now compiled too.
This is a beta: a work-in-progress build for users to try. Please report problems on the Back Shed forum.
The same firmware file runs on both the Generation 1 and the Generation 2.
Before you update
- Options kept: all of them.
- Kept: the program held in flash, the library, the variables saved with VAR SAVE, and the programs and files on the SD card.
What is new
- OPTION COMPILE ON compiles more of a program: the graphics commands LINE, BOX, RBOX, CIRCLE, ARC, TRIANGLE, PIXEL, TEXT and COLOUR, and most built-in functions. Before, a statement with one of them in it ran as text.
- The functions include LEFT$, MID$, INSTR, STR$, HEX$, RGB, PIXEL(), MAX, MIN, PEEK and MM.INFO().
- The compiled code works out their arguments and hands the command or function the values, so a program that draws a lot gains most. For example, a Game of Life program that draws with PIXEL and LINE runs 2.4 times faster compiled than it did with 7.00.00b4: a row takes 7.8 ms, against 18.8 ms before and 20.2 ms without the option.
- RUN f$: the program's name can be a string expression, as on the PicoMite. For example: RUN f$, RUN "GAME" + STR$(n), or RUN MM.INFO$(PATH) + "MENU", -x.
- The name is read as an expression when it has a string variable or function in it, or when something other than a comma follows a quoted name.
- Anything else is passed to the program in memory, as before: RUN -f still runs it with "-f" in MM.CMDLINE$.
- The text after the comma is still passed to the program as it is written.
- MM.MOUSE gives the channel of the mouse that is connected, for CONTROLLER MOUSE OPEN, MOUSE() and DEVICE(MOUSE ...), so a program need not be written for one kind of mouse.
- It is 2 for a USB mouse.
- Otherwise it is the channel of a mouse already open, or the channel set with OPTION MOUSE.
- It is -1 if there is no mouse.
- For example:
m = MM.MOUSE : CONTROLLER MOUSE OPEN m, LeftClick : x = MOUSE(X, m).
- MM.INFO() has the PicoMite's:
- LINE: the number of the program line being run, as a string. It is the number an error there would report. It is "LIBRARY" in the library's code and "UNKNOWN" at the command prompt.
- CALLTABLE: the address of the table of firmware routines that a CSUB calls, in the PicoMite's layout.
- MAX VARS: the most variables a program can have.
- SYSTEM HEAP: the free space of the firmware's own memory, which the audio, the JSON functions and the file system use.
- OPTION WIDTH and OPTION HEIGHT: the console's columns and rows.
- OPTION AUDIO: "DAC". With OPTION PICOMITE it is "PWM", the PicoMite's name for audio that works as the Colour Maximite 2's does.
- OPTION KEYBOARD: the keyboard layout under the PicoMite's name for it. This is "GR" for the German layout, and "" when the keyboard is disabled.
What behaves differently
-
A variable can have the name of a command, so a program written before the command was added runs as it did. This was found with NOMIS: its
flash = 1gave "Syntax" once FLASH became a command.- At the start of a statement,
name = value(orname$,name%orname!) assigns to the variable. - The exceptions are TIMER, TIME$, DATE$, FLAGS and CASE, where
NAME =is the command itself, and REM, RUN and DATA. - An array cannot have a command's name, as
IF (x) = y THENis the IF command. - A name that is also a keyword or a function (FOR, GOTO, SIN) is still not allowed.
- At the start of a statement,
-
A mode change puts the mouse at the centre of the new screen, and the GUI cursor's position too.
- Before, a USB mouse was centred only when it was plugged in. A program's cursor started at the centre of the start-up mode, such as (400, 300), and the mouse could be off a smaller screen until it moved.
- An I2C mouse is told the new screen's size as well. Before, it kept to the old screen's size until it was opened again.
-
DEVICE(MOUSE n, ...), MOUSE INTERRUPT and MOUSE SET accept a channel from 0 to 4. They act on the mouse in use, whatever the channel.
-
GETSCANLINE in the 4-bit and 1-bit depths: in the modes whose lines are drawn twice (3, 5, 6, 7, 12, 13 and 17), it now counts the mode's own lines, as the other depths always have. For example, MODE 7,4 now counts to 249, not 499.
-
GETSCANLINE with OPTION PICOMITE: the doubled modes count the monitor's lines, as on the PicoMite, so MODE 2 counts to 499.
-
Print Screen and Ctrl-\ save the screen as it is shown:
- the page on display, when a program shows one page while it draws on another;
- in the 12-bit depth, both layers blended over the background colour.
Before, they saved the page being drawn on, and in the 12-bit depth only page 0.
Fixed since 7.00.00b4
-
MM.INFO(SOUND) gives "MODFILE" again while a module plays, and a bare "PAUSED" while anything is paused, as on 6.00. The 7.00 betas gave the PicoMite's "MOD" and "PAUSED WAV" and the like.
- A game that checks for "MODFILE" before it plays a sound effect stopped its music at the first effect. Wolf3D, Gauntlet and Into the Darkness do this, and Into the Darkness then stopped with "Samples play over MOD file".
- With OPTION PICOMITE, it still gives the PicoMite's strings.
-
A FOR or DO loop straight after a single-line IF's THEN or ELSE, inside another loop, made the outer loop end at the wrong NEXT or LOOP. When the IF was false, this gave "Cannot find a matching FOR". Gauntlet has such a line. For example:
For a = 1 To 2 If k(a) > 0 Then For i = 1 To k(a) : Print "*"; : Next i Next a -
MM.INFO(FONTHEIGHT) and MM.FONTHEIGHT in font 7 now give 10, the spacing of its lines on the screen, instead of 8, the height of its characters. A program that placed text by them, such as Z-MIM with *FONT SMALL, drew it partly over the line before.
-
A restart could leave the Colour Maximite 2 hung, with no display and no console, until it was reset. This happened if a Ctrl-C arrived on the console, or from a keyboard, while it started up in a new video mode, such as after OPTION DEFAULT MODE.
-
An error naming a variable whose name is 32 characters long, the longest allowed, printed stray characters after the name. This affected "Different type already declared", "Global variable already declared", "Local variable already declared" and "is not declared".
-
MM.ERRNO and MM.ERRMSG$ are kept at the command prompt after a program stops with an error. Before, the status line cleared them within a second.
-
The file manager: holding Up or Down on a USB keyboard now repeats, to scroll a long list. Page Up and Page Down still move one page per key press.
-
A file command on C: with no USB flash drive (MKDIR, OPEN and the like) gave "SD Card not found". It now gives "USB drive not present", as DRIVE "C:" does (MM.ERRNO 21).
-
USB messages: a message such as "Multi-touch Connected" could be printed in a program's output. This happened when the program ran another one with RUN, while the next program was loading. Such messages are now only shown at the command prompt.
The programs tested
These run on this beta. The ones marked with a change need it to their own code, which their authors have been sent or which is described on the Back Shed forum:
- Wolf3D, Gauntlet and Into the Darkness: their music now plays on through the sound effects. Into the Darkness needs no change; Wolf3D and Gauntlet have fixes of their own on GitHub.
- Z-MIM: runs, and 1.8 times faster with OPTION COMPILE ON. Its fixes are on GitHub.
- The Welcome Tape and SP Tools: run, including the programs they start with RUN. The Welcome Tape's fixes are on GitHub.
- NOMIS: runs unchanged now that
flashcan be a variable. It needs MODE 1 (800 x 600), the default mode. To use any kind of mouse, change it to use MM.MOUSE. - BoxDot: expects its mouse on channel 3. Change it to use MM.MOUSE.
- Cuno: asks for MODE 15, which is 1280 x 1024 on the Colour Maximite 2, but is laid out for 1920 x 1080. Change it to MODE 16 (a Generation 2 with the Rev V processor), and to use MM.MOUSE.
Known problems
- With a USB touch screen connected and OPTION MAXCTRLS above 0, every statement checks for the GUI's touch input, so programs run slower: the solar eclipse benchmark takes 2.2 s compiled instead of 1.7 s, and 6.4 s as text instead of 6.2 s. OPTION MAXCTRLS 0 avoids it when no GUI controls are needed.
The manual
The User Manual describes all of the above:
- RUN, in the commands;
- what OPTION COMPILE compiles, in the options;
- MM.MOUSE, and the new MM.INFO keywords, in the read-only variables and the reference section on MM.INFO;
- variables with a command's name, in the chapters Variables and Expressions and MMBasic Characteristics;
- MM.MOUSE and the mouse's centring, in the chapter Keyboard, Mouse and Gamepad, and under MODE;
- MM.INFO(SOUND), in the chapter Sound Output;
- GETSCANLINE, in the functions and in the chapter Video Modes and Pages.
Colour Maximite 2 MMBasic 7.00.00b4 (beta)
Colour Maximite 2: MMBasic 7.00.00b4 (beta) release notes
27 October 2026. Compared with 7.00.00b3, the previous beta. The full notes, compared with MMBasic 5.07.02, are posted with these.
This beta brings USB touch screens to the Colour Maximite 2. The touch screens work with the GUI controls, report gestures, and can show an on-screen keyboard. It adds the PicoMite's STEPPER command, which drives stepper motors from G-code. It also adds SAVE PNG with a Print Screen key, the PicoMite's GP pin names in every mode, and most of the PicoMite's remaining commands and options.
This is a beta: a work-in-progress build for users to try. Please report problems on the Back Shed forum.
The same firmware file runs on both the Generation 1 and the Generation 2.
Before you update
- Options kept: all of them. The new options (the F1 and F5 to F9 keys and OPTION SCREEN KEYBOARD) start unset.
- Kept: the program held in flash, the library, the variables saved with VAR SAVE, and the programs and files on the SD card.
What is new
USB touch screens
- Connecting one: a USB touch screen is recognised as soon as it is plugged in, as on the PicoMite. It can be a touch monitor, or a touch panel with a USB controller.
- Touch screens made for Windows work.
- A multi-touch screen reports up to ten fingers, and a single-touch one works as a pointer.
- It is given channel 4, and MM.INFO(USB n) returns 133 for a multi-touch screen and 134 for a single-touch one.
- The TOUCH() function reads it, as on the PicoMite:
- where the fingers are: X, Y, X2, Y2, and XN n and YN n (XN 0 gives how many fingers are down);
- whether the screen is touched: DOWN and UP;
- the GUI's REF, LASTREF, LASTX and LASTY;
- the gestures: the swipes (SWL, SWR, SWU, SWD and SWIPE), TAP, DTAP, HOLD, a pinch (EXPAND, CONTRACT and PINCH), a twist (CW, CCW and ROTATE) and a two-finger tap (TTAP).
- The GUI controls respond to a touch as they do to a mouse click. GUI TEST TOUCH draws a dot wherever the screen is touched, and GUI TEST LCDPANEL draws circles and reports how many a second.
- The full screen editor: a swipe left, right, down or up is Home, End, Page Down or Page Up, and a tap moves the cursor there.
- The WCH touch controller: some monitors use the WingCoolTouch/WCH controller (USB ID 27C0:0859), such as the Corsair Xeneon Edge and the Verbatim HD14T. It gives its multi-touch reports only to a computer it takes for a Windows one. MMBasic now reads it as Windows does, so all ten fingers are seen.
The on-screen keyboard
- OPTION SCREEN KEYBOARD n [, M] shows a keyboard on a touch screen, as on the PicoMite.
- ‘n’ is the percentage of the screen's height it takes, from 0 to 50; 30 is a good size.
- It types at the command prompt and in the editor and the file manager, and for INKEY$ and INPUT.
- It has letter, symbol and function-key pages, and arrow keys.
- Its modifier keys: without M, Sh, Ctl, Sym and Fn latch for the next key. With M they are held: hold Sh with one finger and tap a key with another.
- When it is shown: automatically at the command prompt and in the editor and file manager, with the status line just above it. While a program runs it is removed. A program shows it with KEYBOARD ON and removes it with KEYBOARD OFF.
- It is not available in MODE n,1.
The mouse, GUI CURSOR and GUI CLICK
- GUI CURSOR works as on the PicoMite:
- GUI CURSOR x, y sets the cursor's point even while it is off or hidden, and GUI CLICK presses there.
- GUI CURSOR ON with new arguments changes the shape, point or colour while the cursor is already on.
- GUI CURSOR COLOUR is kept while the cursor is off.
- GUI CURSOR LINK MOUSE moves the mouse to the cursor.
- GUI CURSOR LOAD makes the loaded cursor the current one at once.
- The GUI controls' pointer: it is shown while a mouse is plugged in, as if the program had used GUI CURSOR ON and GUI CURSOR LINK MOUSE. So GUI CURSOR's commands work on it.
- GUI CLICK presses at the cursor's point and moves the mouse there.
- CLICK() is the PicoMite's: DOWN, UP, X, Y, REF, LASTREF, LASTX and LASTY, for a mouse, GUI CLICK or GUI CLICK PIN.
STEPPER
- The PicoMite's STEPPER command drives up to three stepper motor axes (X, Y and Z) and a rotary A axis from G-code: acceleration planning, arcs, corner blending, homing, limit switches and an emergency stop.
- TMC2209 and TMC2208 drivers can be set up and read over a serial line (the TMC22xx command).
- PEEK(STEPPER ...) and MM.CODE report its state.
- It is described in full in Stepper_Reference.pdf, posted with this release.
Screen captures
- SAVE PNG saves the screen as a PNG file.
- Print Screen and Ctrl-\ save the screen as A:/SCREEN_date_time.PNG at the command prompt and in the editor and file manager.
- In a running program they are ordinary keys unless the program sets OPTION PRINTSCREEN ON. OPTION PRINTSCREEN FORMAT PNG | BMP chooses the file type.
- In MODE n,4 a capture saves the colours shown, after MAP and MAP SET.
The I/O pins
- The PicoMite's pin names (GP0 and up) work in every mode, not only with OPTION PICOMITE.
- The PicoMite's 64-bit GPIO masks work on GP numbers, and PORT and PORT() go through them.
- BITSTREAM takes the PicoMite's fourth argument (its mode) and its two-pin form.
- DEVICE SERIALRX and DEVICE SERIALTX are serial ports on any pins.
- SETPIN pin, ARAW takes a single raw reading.
The PicoMite's other commands, functions and options
- BLIT COMPRESSED, BLIT RESIZE, SAVE COMPRESSED IMAGE and AUTOSAVE APPEND.
- LIST VARIABLES, LIST OPTIONS, LIST PINS and LIST COLLISIONS.
- PEEK(BP var), PEEK(WP var) and PEEK(SP var), which step through memory.
- MM.USB (the last USB key's code), MM.DISPLAY, MM.INFO$(PLATFORM) ("CMM2") and MM.INFO$(USBDRIVE).
- MM.INFO(RESET) names a brown-out, and MM.INFO(BOOT) is another name for it.
- CPU SLEEP s.
- Options:
- OPTION DEFAULT COLOURS fc [, bc];
- OPTION KEYBOARD nn [, capslock] [, numlock] [, repeatstart] [, repeatrate];
- OPTION F1 and OPTION F5 to F9;
- OPTION LOGGING ON | OFF, which appends each error to A:/log.txt;
- OPTION AUTORUN n [, NORESET], which runs program slot n at power-up.
- Mode 18 (1024x600) uses the PicoMite's 1024x600 timing.
OPTION PICOMITE
- MM.INFO(CPUSPEED) is a string.
- KEYDOWN's shifted function keys add &H40.
- LOAD PNG's fourth argument is the alpha cut-off.
- GETSCANLINE counts from the first visible line.
- MM.INFO(KEYBOARD) reports the on-screen keyboard ("On" or "Off").
- With no resolution given, OPTION PICOMITE uses OPTION DEFAULT MODE's, and OPTION LIST shows the PicoMite's resolution and mode.
- Enter is a carriage return alone, as on the PicoMite.
What behaves differently
- TOUCH() and CLICK() are now separate functions, as on the PicoMite. A program saved with TOUCH() lists it as TOUCH(), and CLICK() takes only the GUI's keywords; the gestures are TOUCH()'s.
- GUI CURSOR's errors: SHOW, UNLINK MOUSE, and x, y with the cursor off no longer give an error. LINK MOUSE gives "No mouse connected" when there is no mouse.
- GUI CLICK with no position presses at the cursor's point, not where the mouse is.
- RBOX's radius is limited to half the shorter side, and a filled box keeps its whole outline.
- Running out of memory gives "Not enough memory for n bytes".
- The MATH complex functions and the FFTs with one argument give "Argument count".
- MsgBox cannot be opened by a click from GUI CLICK or GUI CLICK PIN. Nothing could move the pointer to its buttons, so it gives an error instead of waiting.
- Interrupt events that happened before their interrupt was set up are no longer reported to it: Nunchuk and Classic buttons, mouse buttons and the frame interrupt.
- The DS3231 clock is copied to the internal clock every hour; before, it was every 100 hours.
Fixed since 7.00.00b3
The interpreter
- After an interrupt that ended in an error had cut a PAUSE short, the next run's first PAUSE returned at once and its SETTICK interrupt was not called.
- An array parameter given no argument printed stray characters in its error message.
- /* ... */ block comments work as the manual describes.
- "#COMMENT END" with any number of spaces ends the comment block.
- RESTORE of a name that is both a label and a variable goes to the label.
- A DIM that ran out of memory still counted the variable in MM.INFO(VARCNT).
- READ with no program reads the library's DATA.
- LONGSTRING MID with a very large count is cut to the string.
- MATH(C_DIV) is accurate to the last digit.
- A library loaded into RAM ends with the program. FLASH LOAD n and RAM LOAD n followed by LIST list the new program.
- FLASH LOAD IMAGE and FLASH DISK LOAD into a RAM slot keep its old contents until the new ones are read.
- A program's font left selected is reset to the default font at the next RUN.
- LIBRARY LOAD may come before OPTION SYMBOLS OFF.
- A program line that is too long says "Line is too long".
Graphics and the screen
- GUI CURSOR works in the 4-bit and 1-bit colour depths.
- DRAW3D: HIDE after a hidden object, each face's lighting, CREATE's checks of the faces, and the argument counts.
USB, the mouse and the editor
- GUI CLICK PIN was left set after RUN: its button then read as pressed, and the mouse could not click.
- The G2's console no longer drops every second character after the console is restarted.
- The Switch Pro Controller is type 135 in DEVICE(GAMEPAD n, T), as in MM.INFO(USB n).
- A USB device that the USB host has no room for is reported as "[USB EP_FULL ...]".
- The editor and the file manager turn an IR remote off before they clear the variables it writes to.
- The editor saves an empty file as an empty file, and an import that runs out of memory says how much was read.
Not there yet
- The PicoMite's FRAMEBUFFER layers in the 8, 16 and 32-bit...