Skip to content

Releases: dmsc/fastbasic

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.

Release 3.6

27 Oct 23:08
Compare
Choose a tag to compare

A minor update, with the following additions:

  • Adds the CHR$ function.
  • Adds the MSET statement, this fills memory with the given value.
  • Adds CLS statement, clears the screen.
  • There is better error reporting in the cross-compiler.

Also, there are more optimizations, the parser is about 20% faster in the Atari and some bugs were fixed in the cross-compiler.

After all the additions, the integer IDE is only 30 bytes bigger at 8186 bytes and the floating-point IDE is 12 bytes bigger at 9453 bytes.