Skip to content

Releases

BASIC256 2.3.1

Choose a tag to compare

@uglymike17 uglymike17 released this 01 Nov 13:53

BASIC-256 v2.3.1 is out. It builds on 2.3.0 with a toolkit for drawing a window-style interface, a way to grow an array one row at a time, an IDE that goes dark with the rest of the system, and safer saving.
One change breaks programs: the functions in the bundled modules have been renamed. A program that includes math.kbs or turtle.kbs needs its calls renamed — see the list at the end.

What 2.3.1 brings

  • A toolkit for window-style programs, as a bundled module. INCLUDE "toolkit.kbs" draws push buttons, checkboxes, radio buttons, sliders, spin boxes, tabs, group boxes, grids of drawing fields and editable text fields on the graphics output. Each element has a subroutine that draws it, such as tk_button, and a function that tells whether a mouse click landed on it, such as tk_buttonhit. The program keeps track of each element's state and redraws the element when that changes. call tk_help() lists everything in the module, and the programs in Examples/GUI-Demo show each element at work.
  • Arrays that grow, with the new ARRAYADD statement. arrayadd names, "Bob" adds a value to the end of a one-dimensional array, and arrayadd points, x, y adds a row to a two-dimensional one. An array can be given instead of separate values, and a variable with nothing in it yet becomes an array, so a table can be built up in a loop without a DIM.
  • A dark IDE that follows the system. View ▸ Theme ▸ Follow System now turns the whole IDE dark when the operating system is in dark mode: menus, toolbars, docks and dialogs as well as the Edit, Text Output and Variable Watch windows. On Windows 10, BASIC-256 switches to the Fusion style while Windows is dark. The Variable Watch window now follows the theme you pick, as the other windows already did.
  • Safer saving. Save As opens in the folder the program was loaded from, with its name already filled in. The bundled examples are never overwritten: Save on an example asks for a new name, and the Examples folder can't be chosen as a place to save. A new preference, Warn when overwriting an existing file, is on by default; untick it and Save writes straight back to the program's own file without asking.
  • Mouse clicks work in a scaled or zoomed window. CLICKX, CLICKY and double-clicks now report the graphics pixel under the pointer when GRAPHSIZE has scaled the window up or the View menu has zoomed it, the way MOUSEX and MOUSEY already did. A negative scale shows the whole picture turned round.

Also in this release

  • A whole number too big for 64 bits, such as 9223372036854775808, is now reported as "Number too large" when the program is compiled.
  • New example programs: a series of Falling Sand programs that builds up the final program a step at a time, Examples/Fun/balgame256.kbs (a ball-bouncing game played with the mouse, ported from a TIC-80 game by Uras SARI) and Examples/Fun/FallingLetters.kbs (a rain of green letters). Both games also run in the browser version.
  • The Raspberry Pi archive now includes the TestSuite and the benchmark. The AppImages still leave them out, because an AppImage is read-only and both write scratch files into their own folder.
  • The Windows installer and uninstaller notice when BASIC-256 is still running from the folder they are working on and ask for it to be closed, with Retry and Cancel, instead of stopping with an error about basic256.exe.

Things to watch when upgrading

  • Every function and subroutine in the bundled modules now starts with its module's prefix: ma_ for math.kbs, tu_ for turtle.kbs and tk_ for toolkit.kbs. A program written for 2.3.0 that still calls the old names stops with an error, so sumarr, hypot, clamp, lerp and randint become ma_sumarr, ma_hypot, ma_clamp, ma_lerp and ma_randint, and t_forward becomes tu_forward. Two names change by more than the prefix: remap is now ma_map, and fround has been removed. Each module has a help routine (call ma_help(), call tu_help(), call tk_help()) that lists what is in it.
  • arrayadd is now a reserved word, so a program that used it as a variable or function name has to rename it.
  • The Automatically save program when it is successfully run preference has been removed.

See the changelog for the full list.

BASIC256 2.3.0

Choose a tag to compare

@uglymike17 uglymike17 released this 30 Sep 22:18

BASIC-256 v2.3.0 is out. 2.2.0 started adding to the language; 2.3.0 carries on with a sort built in, a proper character screen for text, colour by hue and a few long-standing loose ends tied up. It also changes how a program reaches outside its own folder, which is why it is 2.3 rather than 2.2.1.
Most programs keep working unchanged, but this release has more to watch for when upgrading than the last one did, so read the list at the end before moving a classroom over.

What 2.3.0 brings

  • A program asks before it touches files outside its own folder. Anything at or below the folder a program was loaded from is read and written without a word. Naming anything outside it — with OPEN, KILL, MKDIR, IMGSAVE, DBOPEN, a path inside SQL or any other statement — brings up a dialog offering Don't allow, Allow once and Allow for this run. A file picked in a file dialog never asks, and Preferences ▸ Advanced has a standing answer for anyone who wants it. The browser version is unchanged.
  • The Text Output window can be a screen as well as a scroll. LOCATE column, row puts the cursor anywhere, and what is printed there replaces the characters it lands on, so a score, a clock or a counter can be rewritten in place. TEXTCOLOR, TEXTBACKGROUND and TEXTFONT colour and style it, and TEXTCOL and TEXTROW read the position back.
  • A real character screen, with the new TEXTSCREEN statement. TEXTSCREEN 40, 25 turns the window into a fixed grid of characters, the kind the home computers of the eighties printed on, so boxes close up and columns line up whatever the font. A third argument asks for square cells, and TEXTCHAR(column, row) reads a character back off the screen.
  • Arrays can be sorted, with the new SORT statement. sort names puts a list in order, and ascending, descending and ignorecase may follow it in any order. A two-dimensional array has its rows sorted on the column given — sort scores, 1, descending — each row moving as a whole. The sort is stable.
  • Colour by hue, with the new HSV function. hsv(hue, saturation, value) is the sibling of RGB: the hue in degrees round the colour wheel and the other two in percent, with an optional alpha.
  • NOISE takes a third coordinate. noise(x, y, z) lets a program draw with x and y and move through z as time — clouds, water or fire that change smoothly instead of standing still.
  • Text on sprites, with SPRITETEXT. spritetext n, text$ makes a sprite from the text in the current font and colour, and a third argument fills it with a background colour first.
  • A benchmark you can run yourself. TestSuite/Benchmark times each part of the language and prints one table at the end, so you can measure the speed on your own machine, or compare two machines or two versions.

Also in this release

  • SPRITEW and SPRITEH now report the size a sprite covers on the screen, following the scale and rotation it was given.
  • IMGLOAD, GETSLICE and PUTSLICE now understand WINDOW coordinates, the way PLOT and PIXEL do.
  • A statement with no arguments followed straight away by a colon — next: print i, cls: print "ready" — is now that statement, instead of being read as a label and skipped.
  • DBOPEN now works in the Raspberry Pi downloads, which were missing the SQLite driver, and the Pi archive now includes the TestSuite and the benchmark like the other platforms.
  • New example programs ship with the release, among them Examples/DataBase/GamesDB.kbs, a small games database with a menu drawn on a TEXTSCREEN.
  • Release downloads are now published by the build itself: every platform, and the browser version as BASIC256-WASM.zip, arrives as a bare file rather than wrapped in an extra zip.

Things to watch when upgrading

  • A program that reads or writes outside its own folder will now ask first, and a program started with --silent is refused rather than asked.
  • NETLISTEN now listens only on the machine it is running on. For two machines talking to each other, tick NETLISTEN accepts connections from other machines in Preferences ▸ Advanced.
  • MKDIR works again without SYSTEM being switched on, but RMDIR has been removed for good.
  • A parameter declared with ref() now receives the caller's own variable, as the documentation has always said, so call fill(a) changes a.
  • sort, ascending, descending, ignorecase and hsv are now reserved words, so a program that used one of them as a variable or function name has to rename it.

See the changelog for the full list.

BASIC256 2.2.0

Choose a tag to compare

@uglymike17 uglymike17 released this 13 Sep 13:42

BASIC-256 v2.2.0 is out — and it is a different kind of release from the ones before it. The 2.1 line brought the original BASIC-256 up to date: Qt 6, a modern build, new platforms and a browser version, but much the same language underneath.
Basic-256 v2.2.0 starts adding to the language itself. Existing programs keep working — almost everything below is new ground rather than changed ground, with one exception noted at the end.

What 2.2.0 brings

  • A new WINDOW statement. WINDOW -1,-1,1,1 puts 0,0 in the middle of the graphics area, and every drawing statement then works in those units. PIXEL, MOUSEX, MOUSEY, CLICKX and CLICKY read back in the same units, so what you draw is what you can find again. WINDOW on its own goes back to plain pixels.
  • Matrix and vector arithmetic on ordinary arrays. MAT ADD, MAT SUB and MAT MUL work on whole arrays at once and MAT TRN and MAT INV transpose and invert. Alongside them, a DOT b gives the dot product, a CROSS b the cross product, NORM(v) the length of a vector and UNIT(v) the same vector scaled to length one. Any array will do as a vector.
  • A steady frame rate, with the new FRAMERATE statement. FRAMERATE 60 inside a drawing loop waits until the next frame is due rather than for a fixed length of time. FRAMERATE 0 takes the cap off again.
  • A new NOISE function, giving a smooth, repeatable value between -1 and 1 from an OpenSimplex noise field. SEED now fixes the noise field as well as the random number sequence, so a seeded program draws the same landscape every run.
  • Turtle graphics, as a bundled module. INCLUDE "turtle.kbs" pulls in a turtle that draws by going forward and turning rather than by working out coordinates — t_forward, t_right, t_penup, t_home and the rest, with short forms for the six commands a drawing repeats most. Angles are in degrees measured clockwise from north.
  • Programs run a fifth to a quarter faster than 2.1.1, and none run slower. Drawing, arithmetic and array work all benefit. Arrays use about half the memory they used to, and the statements that act on a whole array at once are three to five times faster. Setting up a million-element array takes a quarter of the time it did.
  • Array and map literals may be written over several lines. A table can be laid out a row to a line instead of being crammed onto one very long one, blank lines between the rows are ignored, and a remark may be put inside the mustaches so the rows can be annotated as they are laid out.

Also in this release

  • PAUSE now waits for the time it is given, to about a millisecond, on every platform and whatever else the machine is doing. Any delay up to a day is honored, and pressing Stop ends a program sitting in a PAUSE at once rather than when the pause runs out on its own.
  • A program is no longer limited to about 5000 lines. The previous limit counted everything a program INCLUDE as well and crossing it stopped the program with a syntax error pointing at a line that had nothing wrong with it.
  • On Windows, a running program's graphics no longer stop for seconds at a time until the mouse is moved. Animations that end each frame with REFRESH, and programs that draw without FASTGRAPHICS, now run at a steady rate whether or not the mouse is touched.
  • New example programs ship with the release

See the changelog for the full list.

BASIC256 2.1.1

Choose a tag to compare

@uglymike17 uglymike17 released this 27 Aug 15:09

BASIC256 2.1.1 is a maintenance release on top of 2.1.0. Programs run about twice as fast, and what you type in the browser survives a refresh.

Highlights

  • Programs run faster — arithmetic-heavy loops are roughly twice as fast. The interpreter now reuses the memory it holds values in instead of asking the system for a new block and handing it back for every value it creates, and it steps from one instruction to the next with less work. Measured at 1.88x overall, fairly evenly across integer maths, floating point, transcendental functions and variable access. Fractals, physics and anything else that loops hard gain the most, and the browser version gains most of all.
  • The browser remembers your program. A refresh, a closed tab or a restarted browser no longer loses what is in the editor. Every open tab comes back with its text, its name and whichever one was in front. Saving still downloads the file exactly as before — this is a safety net, not a replacement for saving.

Also in this release

  • Windows 11: the menu bar titles — File, Edit, View and the rest — are drawn at the system text size, like everything else in the program, and the bar makes room for them when that size is large.
  • The Help / About BASIC-256 box now names the project's own website, https://basic256.org, alongside the documentation site, https://doc.basic256.org.
  • The Windows downloads no longer carry Microsoft's Visual C++ redistributable as a file of its own. It has always been, and still is, bundled inside the installer, which offers to install it if the system needs it.

See the ChangeLog for the full list.

Downloads

Platform File
Windows (installer) .exe
Windows (portable) .zip
Linux x86_64 .tar.gz / .AppImage
Raspberry Pi (ARM64) .AppImage
macOS (Apple Silicon / Intel) .tar.gz

Windows SmartScreen will block the installer at first as it comes from an unknown publisher — "More info" then "Run anyway". The macOS downloads are not notarized; see the README for how to open them. Both macOS builds need macOS 15 (Sequoia) or newer.

The browser version needs no download at all: https://run.basic256.org already runs 2.1.1.

BASIC256 2.1.0

Choose a tag to compare

@uglymike17 uglymike17 released this 13 Aug 11:31

BASIC256 2.1.0 is the first stable release of the 2.1 series, the continuation of the original BASIC256 at version 2.0.0.11.

Highlights

  • Qt 6 and a CMake build, with Microsoft Visual Studio 2022 support and GitHub Actions building every platform.
  • BASIC256 in the browser. A WebAssembly build runs the full IDE at https://run.basic256.org with no installation. A program can be opened straight from a link with ?run=, and the window layout picked with &mode=.
  • macOS builds for both Apple Silicon and Intel Macs. Both need macOS 15 (Sequoia) or newer.
  • A standard module library. include "math.kbs" pulls in the shared maths helpers, on the desktop and in the browser alike.
  • Modern documentation at https://doc.basic256.org, opened from Help / Online Help or by pressing F1 over a keyword.
  • Dark themes. The Edit and Text Output windows follow View / Theme: Follow System, Light or Dark.
  • A better command line — fullscreen, graphics only, text only and silent running.
  • A new logo and a mascot, BitBot, used for the program icon on every platform, the installer, the About box and the browser loading screen.
  • New and updated example programs, including menu-driven tours of the SPRITE, SOUND and IMAGE statements.

Also in this release

  • A new MAXIMIZE statement lets a program maximise or restore the IDE window itself.
  • Maximising the IDE no longer hands all the extra width to the Edit window, and re-docking a floated Graphics window no longer drags its floating size in with it.
  • Checkable menu items now show a check box, or a radio button where only one of a group can apply, drawn clear of the item text at the size the platform intends.
  • Whole numbers are the full 64 bits on every platform.
  • The Windows installer no longer leaves a second copy of the Examples and TestSuite behind.

See the ChangeLog for the full list.

Downloads

Platform File
Windows (installer) .exe
Windows (portable) .zip
Linux x86_64 .tar.gz / .AppImage
Raspberry Pi (ARM64) .AppImage
macOS (Apple Silicon / Intel) .tar.gz

Windows SmartScreen will block the installer at first as it comes from an unknown publisher — "More info" then "Run anyway". The macOS downloads are not notarized; see the README for how to open them.

The browser version needs no download: https://run.basic256.org.

V2.1.Beta03: ChangeLog: date the Beta3 entry and add the demo and example changes

Choose a tag to compare

@uglymike17 uglymike17 released this 31 Jul 15:34
  • The project has now moved to Beta3 state. In a week or so, if no blocking issues arise, this will become the official, stable BASIC256 v2.1
  • Whole numbers are the full 64 bits on every platform: the bitwise shift operators (<< and >>) , reading a large whole number from a string or with INPUT and an error on too large numbers now work on all architectures.
  • The Edit and Text Output windows now follow a colour theme, chosen from View/Theme: Follow System (the default), Light, or Dark. The Graphics Output window is not themed and stays white, so existing programs draw exactly as before.
  • The About box, Help/Online help and F1 keyword help now open https://doc.basic256.org, which serves the same documentation site under its own name.
  • Help/Check for update now simply opens the GitHub releases page, https://github.com/uglymike17/basic256/releases, where the builds for every platform are published. Compare the version there with the one in Help/About BASIC-256.
  • Browser (WASM): sound and speech work on iPad and iPhone, started by the first touch anywhere on the page.
  • Browser (WASM): the demos that expected a keyboard can be driven with a finger. BubbleUniverse_variations starts on a tap and cycles its variations on a tap or a click, StrangeAttractors is explored by dragging and cleared with a double-tap, and AIChatbot fills the window instead of sharing it with the editor.
  • Examples: PacMan has been reworked -- a fixed 50 frames a second, a score that carries across lives, and the playfield narrowed so the score and legend have a panel of their own. A new game, Claude-AI-neon_snake, has been added.

Basic256 is now at Beta02

Pre-release

Choose a tag to compare

@uglymike17 uglymike17 released this 26 Jul 18:38
* The project has now moved to Beta2 state, meaning it runs, but issues might still lie dormant in both program and documentation
* A Docusaurus website has been created to replace the old doc.basic256.org in the code and is activated via the menu-item Help/Online help or by pressing F1 over a keyword. It lives on https://uglymike17.github.io/Basic256-Docs and is also shown in the Help/About BASIC-256 menu-item.
* Polyphonic sound have been corrected
* A new Example program 'SoundStatementDemo.kbs' demonstrating the new SOUNDxxx statements has been added to the Examples/Sound_Speech directory
* A new Example program 'ImageStatementDemo.kbs' demonstrating the new IMAGExxx statements has been added to the Examples/Image directory
* The REF() command (passing arrays to subroutines by reference) has been corrected.
* The Edit and Output windows are now pinned to a white/light scheme so code and text stay readable on desktops using a dark OS theme (Ubuntu dark, iPhone/iPad, etc.).
* The project has been relicensed from GPL version 2 to GPL version 3 or later. The original GPLv2 headers all carried the "or (at your option) any later version" clause, which permits this upgrade; every original copyright holder and year has been preserved. license.txt now holds the full GPLv3 text. The bundled md5 (RSA Data Security) and LineNumberArea (Qt example, BSD) files keep their own compatible licenses.
* An Apple macOS for Intel build is now available. This requires macOS 15 (Sequoia)

BASIC256 2.1 Beta 1 — Qt6, WebAssembly & multi-platform

Choose a tag to compare

@uglymike17 uglymike17 released this 18 Jul 12:36

BASIC256 2.1 — Beta 1

The first official release of the revived BASIC256, continuing the classic
educational BASIC environment from the original SourceForge 2.0.0.11 codebase.
This Beta modernizes the whole stack — Qt6, CMake, a unified CI pipeline — and
adds a browser build so BASIC256 now runs with no install at all.

This is a pre-release. It's stable enough for everyday use and teaching,
but expect rough edges — please report anything you hit.

Highlights

  • Qt6 throughout. Migrated from Qt5, which unlocked everything below.
  • Runs in your browser. A full Qt-for-WebAssembly build of the editor and
    interpreter — no install needed. Live demo:
    https://uglymike17.github.io/basic256/
  • Four platforms, one pipeline. Windows, Linux x86-64, Raspberry Pi
    (ARM64), and macOS (Apple Silicon), each built and TestSuite-gated in CI.
  • New documentation site. A Docusaurus rebuild of the help at
    https://uglymike17.github.io/Basic256-Docs — this is now the in-app online
    help, and F1 on a keyword jumps straight to it.
  • Open Example on the desktop, browsable as a category tree (previously
    WASM-only); on macOS the Examples ship inside the .app.
  • 64-bit integers (qint64) for larger whole-number ranges.
  • Expanded CLI: graphics-only (-g) and text-only (-t) windows, a
    fullscreen flag (-f), and a silent/headless mode (-s).

Run a program straight from the browser link

parameter what it runs
?run= a bundled Example (e.g. ?run=Mandelbrot-256)
?url= a .kbs file on the same site (e.g. ?url=demo/goldenwaves.kbs)
?src= base64-encoded source embedded in the link

Add &mode= to pick the window layout (mirrors the CLI switches).

Downloads

  • Windows — installer (.exe)
  • Linux x86-64 — .zip; contains tar.gz and AppImage
  • Raspberry Pi (ARM64) — .zip; contains tar.gz and AppImage
  • macOS (Apple Silicon) — .zip; unzip and run

Known limitations (Beta)

  • The browser build can't do everything the desktop can: features that need
    the OS — external processes, serial ports, SQL, printing, TCP servers, and
    system text-to-speech — are stubbed and will report a runtime error in-browser.
  • macOS builds target Apple Silicon (arm64); Intel Macs aren't covered yet.
  • Being a Beta, some behaviour may change before 2.1 final.

Documentation & feedback

Full changes are listed in the ChangeLog.