Skip to content

Releases: dmsc/fastbasic

Release 4.7

02 Jan 00:54
Compare
Choose a tag to compare

The new year 2025 release!

This is a long overdue release, with many changes in many areas.

Language changes:

  • Adds SIO statement
  • Adds Fujinet support: NOPEN, NCLOSE, NSTATUS and NGET statements, see "nc" and "mastodon" examples.
  • Support ADR for floating point variables.
  • Adds %() function.
  • You can now omit parentheses in string functions, like LEN "X" instead of LEN("X")
  • You can omit the ; in the PRINT statements in many cases now, for example you can use PRINT "A=" A directly.
  • New %TIME function that gives the time up to 24 bit precision (wrapping in about 3 days and 5 hours).

IDE and Atari compiler changes:

  • Added an integer-only command line compiler, FBCI.
  • The command line compiler now allows passing the file name in the command line, just use FBC PROG.BAS PROG.COM in the DOS prompt.
  • A lot of size optimizations to keep the integer IDE at less than 8KB.

Fixes:

  • Fixes compiling long DLI statements.
  • Fixes for AND/OR mixing bools and integer operands.
  • Fixes chaining COLOR() and RTAB() in PRINT statements.
  • Fixes INPUT to allow reading up to 255 bytes into a string.
  • Fixes to the IDE when editing long files or files without an EOL at the end, also the IDE should be slightly faster now.

Cross Compiler:

  • Fixes on Windows cross compiler for filenames with spaces or Unicode characters.

  • Better error messages:

    • show variable names in errors,
    • ASCII art with the error location,
    • shows errors on missing ending of loops or ifs.
  • The cross compiler now deletes intermediate files, only keeping the resulting executable.

  • Adds a command line to write a "compacted" listing from the source, aiding in the writing of ten-liners or other short programs.

  • The compiler searches for it's files in more than one location now, in this order:

    • the FASTBASIC_HOME environment variable,
    • the path to the compiler executable,
    • the standard OS paths in Linux (/usr/share/fastbasic/ and /usr/local/share/fastbasic/).

    This makes easier to install the compiler as an OS tool

Happy New Year 2025!

Test Release 4.7-beta1

09 Mar 15:42
Compare
Choose a tag to compare
Pre-release

This is a test release for the upcoming version.

Language changes:

  • Adds SIO statement
  • Adds Fujinet support: NOPEN, NCLOSE, NSTATUS and NGET statements, see "nc" and "mastodon" examples.
  • Support ADR for floating point variables.
  • Adds %() function.
  • You can now omit parentheses in string functions, like LEN "X" instead of LEN("X")

Fixes:

  • Fixes compiling long DLI statements.
  • Fixes for AND/OR mixing bools and integer operands.
  • Fixes chaining COLOR() and RTAB() in PRINT statements.

Cross Compiler:

  • Fixes on Windows cross compiler for filenames with spaces or Unicode characters.
  • Better error messages:
    • show variable names in errors,
    • ASCII art with the error location,
    • shows errors on missing ending of loops or ifs.

Release 4.6

02 Aug 04:41
Compare
Choose a tag to compare

The Atari 5200 release!

A new major feature: now the FastBasic PC compiler can produce Atari 5200 cartridge images.

This version uses a new PC compiler, rewritten to support multiple targets with one binary, you can specify the target with the new option -t:, the available targets are:

  • atari-fp: produces Atari 800 XEX programs, with support for floating-point.
  • atari-int: the old "integer only" version, produces Atari 800 XEX programs that don't use the floating-point package.
  • a5200: produces cartridges for the Atari 5200
  • atari-cart: the same as atari-fp, but producing cartridge images for the Atari 800.
  • atari-cart-int: the same as atari-int, but producing cartridge images for the Atari 800.

Read more about the Atari 5200 port in https://github.com/dmsc/fastbasic/blob/master/a5200.md

New language additions

  • There are now PRINT functions that allows formatting the output for PRINT command:
    • TAB() function, moves to a column multiple of a number.
    • RTAB() function to right-align the next argument to a specified column.
    • COLOR() function to specify the text color (or inverse mode) of the text, see #47.
  • DIM can be used to declare normal variables (like DIM X$, Z), the variables are automatically initialized to 0 or empty strings.
  • DATA statements can be placed in ROM instead of RAM (useful for Atari 800 cartridges or Atari 5200).
  • Allows writing to more than one register in a DLI, see #45

Changes in the runtime

  • The comma in prints now uses the TAB function internally, so it behaves more consistently in screen output (but in a different way that Atari BASIC).
  • MOVE and -MOVE are faster, using code in zero-page.
  • Fixes crash when setting DLI, #49
  • More size optimizations, integer IDE is still less than 8kB of size.

Changes to the cross-compiler

  • Rewritten to allow multiple targets by configuration files.
  • Allows building Windows version native and ports the cross-compiler test-suite to Windows.
  • Prints better compiler error messages.
  • Allows defining symbols for the linker and passing arbitrary arguments.

Test Release 4.6-beta

01 Mar 03:28
Compare
Choose a tag to compare
Test Release 4.6-beta Pre-release
Pre-release

Full Changelog: v4.5.2...v4.6-beta

Release 4.5.2

15 Mar 01:53
Compare
Choose a tag to compare

Minor bugfix release on top of 4.5, this fixes parsing of variable names starting with DATA or NEXT (like DATASET or NEXT_TYPE).

Release 4.5

09 Mar 03:52
Compare
Choose a tag to compare

A big release, with a significant new language feature: you can pass parameters to procedures now.

Changes to the language:

  • You can use @ to call procedures instead of EXEC (both are supported),
  • You can include arbitrary characters in string constants by using the hex value, like: `PRINT "Hello"$9B"World",
  • PAUSE without a parameter is the same as PAUSE 0.
  • PROC has a shorter abbreviation: PR.,
  • The "ADR()" function and the "&" operator now allow taking the address of a variable,
  • The parser is more robust to syntax errors.

Many improvements to the editor:

  • Much faster COPY/PASTE operations,
  • Restores left-margin value on exit to DOS,
  • Remove P/M graphics when returning to the editor from user programs.

And improvements to the cross-compiler:

  • Better error messages from some syntax errors, and fixes in parsing of big numbers.
  • Check for PROC and EXEC parameters mismatch.
  • An option to write an expanded and indented listing from an abbreviated listing,

Release Candidate for 4.5

26 Feb 04:08
Compare
Choose a tag to compare
Pre-release

This is a preview release for version 4.5, for wider testing of the new features:

The big change is a new language feature: you can pass parameters to procedures now.

Some minor changes to the language:

  • You can include arbitrary characters in string constants by using the hex value, like: PRINT "Hello"$9B"World"
  • PAUSE without a parameter is the same as PAUSE 0.
  • PROC has a shorter abbreviation: PR.,
  • The parser is more robust to syntax errors.

Many improvements to the editor:

  • Much faster COPY/PASTE operations,
  • Restores left-margin value on exit to DOS,
  • Remove P/M graphics when returning to the editor from user programs.

And improvements to the cross-compiler:

  • Better error messages from some syntax errors, and fixes in parsing of big numbers.
  • Check for PROC and EXEC parameters mismatch.
  • An option to write an expanded and indented listing from an abbreviated listing,

Release 4.4

20 Sep 13:58
Compare
Choose a tag to compare

The Spring 2020 Release!

This release mainly brings many changes to the IDE to make it more usable, allows writing "shorter" code by adding more abbreviations and extends the DLI support.

The changes in the IDE:

  • BREAK key handling in the IDE - this was long overdue, now you can press BREAK key to return to the IDE from your program.
  • COPY/PASTE of lines to the editor, you need to press CONTROL-C to make a line to copy, then when you press CONTROL-V that line is copied after the current one. Pressing CONTROL-V multiple times copies multiple lines. This needed a change from CONTROL-V to CONTROL-I for the page-down action.
  • Go to Line, pressing CONTROL-G moves the cursor to any given line, this makes editing larger programs easier.
  • Allows usage of the page-up and page-down keys on the 1200XL keyboard (SHIFT-F1 and SHIFT-F2), in addition to CONTROL-U and CONTROL-I.

Changes to the language:

  • Adds CLR statement, that un-dimension arrays and sets all variables to 0.
  • Adds WSYNC command to the DLI, allows setting multiple lines in one DLI.
  • Adds & operator for abbreviating the ADR() function.
  • Allows abbreviations for some BASIC functions and operators and skipping the parenthesis on most functions, allowing to write shorter code, see the manual for details.
  • Minor incompatible change: The abbreviations for ELSE, ENDIF, PMGRAPHICS and PMHPOS changed to make them more consistent.

Changes to the cross-compiler:

  • Allows to compile to code that can be put in a cartridge - by removing all uses of self-modifying-code and adding a stub to copy the zeropage interpreter from ROM to RAM at startup.
  • Allows accessing to DATA's from external assembly files.
  • Adds a DATA FILE statement that includes binary data from external files.
  • The CC65 tools are included in the distribution, you don't need to install CC65 to use the cross-compiler anymore.

And many bug-fixes!

Release 4.3

29 Feb 02:27
Compare
Choose a tag to compare

A long overdue new release.

This is a big release, and adds support for Display List Interrupts to FastBasic, with an easy syntax and automatic support for multiple DLI on the screen. There is a new chapter in the manual with usage and samples.

Added statements:

  • DLI: for display list interrupt support;
  • LOCATE: missing statement from Atari Basic.
  • TIMER: resets the TIME variable to 0.

Added functions:

  • $(): Extracts an string from a memory location.

Changes in the language:

  • Added floating point arrays.
  • The way DATA are stored is changed, so you can now use the DATA without "executing" the statement first. This makes the code slightly faster and easier to understand.
  • You can insert strings and addresses to DATA.

Bugfixes:

  • Many bugs in the parser are fixed, the parser should be much more stable now.
  • The editor now properly detects files that are too big.
  • Fixed bug in floating-point VAL() function.

Optimizations:

  • A lot of size optimizations, now the IDE with all the added functionality is smaller than version 4.0.

Release 4.0

25 Feb 00:53
Compare
Choose a tag to compare

This is a major update, but most changes are under the hood:

  • The interpreter has been changed from a stack-base virtual machine to a register plus stack, this makes the interpreter from 10% to 20% faster depending in the program.
    In the SIEVE.BAS benchmark, the Atari version is 13% faster and in the cross-compiler is 19% faster, but programs depending on fast PEEK and POKE should be much faster.
  • There is now a full test-suite to automatically catch regressions in the parser and interpreter, ensuring that bugs don't re-appear.

Also, there are some user visible changes:

  • There is now a command-line compiler "FBC.COM", this allows compiling large programs that don't fit in the full editor. Currently, "FBC" accepts the full floating-point syntax.
  • Added minimal support for Player/Missile graphics:
    PMGRAPHICS (abbreviated PM.): setups P/M,
    PMHMOVE (abbreviated PMH.): horizontal moving a a player/missile,
    PMADR(): returns the address of the given player/missile data.
  • Many small bugs fixed.