What's New
What's New
Hints and Tips
Peeks and Pokes
Contact Us

 February 19, 2019

Version 2.3 released!

Includes new statements, functions, minor bug fixes and updated help documentation.

New CHKREL statement.

New LIST DATA and LIST REM statements.

New PCLR2 statement.

New PSCROLL and PSCROLL2 statements.

New DATE3$ function.

New JOIN$, SPLIT and SPLIT% functions.

New MIDN function.

New STICK and STICK% functions.

COLOR, HCOLOR and PCOLOR statement syntax updated to allow only background color.

MIDDLE statement updated to list lines before or after.

SEARCH statement updated to allow wildcards for volume name.

VOLUMES statement updated to list volumes using wildcards and properties.

VOLUME? statement updated to filter volumes by the read-only property.

F2 key added to list the current program.

New POKE to enable the SEARCH statement to show volumes with no matching files (16814).

New POKE to set MIDDLE statement default option (23613).

New USR to get string width using graphics font (12129).

New USR to get height of graphics font (12288).

New USR to get current defined variable type (17968).

Updated help documentation.

Updated installer.

Fixed issue in GET/PUT statements using incorrect array index causing a ?Bad subscript error.

Fixed issue in PPRINT statement using incorrect background mode.

Fixed issue in STEP statement stopping at the wrong breakpoint in certain cases.

Fixed issue in MKTIME function using incorrect defaults for hour, minute and second parameters if omitted.

Fixed issue in the location reported for syntax errors in function call argument lists.

Donate by using the PayPal button below or visit and look for SylvaWare. Thanks!

 January 31, 2019

Version 2.2 released!

Includes new statements, functions, minor bug fixes and updated help documentation.

FOR statement now supports the DOWNTO keyword.

New AT(row%,column%) separator in PRINT statement.

BOTTOM, MIDDLE and TOP statements.

ONERR and SPEED statements (Apple ][e compatibility).

SEARCH statement documented.

CHKIO statement implemented and updated.

SPLIT statement implemented and updated.

$XREF has a new syntax for cross-reference options, allows listings to be paused and has been updated with new statements and functions.

PAD$, PADC$, PADL$ and PADR$ functions.

RNDC and RNDC% functions.

$ERR function that returns extended error information.

$IF function that conditionally evaluates expressions.

$INF function that returns information about file operations.

$SYS function that returns system information.

FILE$ function has a new optional parameter to specify if the volume should be included in the returned file name.

New POKE to configure where File | Load... and File | Save... show the selected file name (21840).

New POKE to set character output delay (39336).

New POKE to specify case to use in FORMAT statement (27468).

POKE 27217,n has been implemented to list split lines in the SPLIT statement.

Updated help documentation.

File | Load... and File | Save... now show the file name in the status bar by default.

Error in immediate mode no longer calls an active program mode error handler.

RESUME NEXT no longer calls error handler a second time in certain cases.

RETURN to immediate mode GOSUB fixed.

VSCROLL now scrolls the full screen up correctly.

String comparisons now use ordinal comparison (ASCII) instead of local culture

LOCK #0 no longer prevents text display after program break.

FORMAT PRINT no longer adds an extra space for PR.

APPEND, COPY and MOVE line statements now return a function call error if the source and destination lines are the same.

$XREF now properly cross-references user-defined functions with the DEF FN statement.

 December 31, 2018

Version 2.1 released!

Includes new statements, functions, minor bug fixes and updated help documentation.


FORMAT {PRINT | ?} and FORMAT {LOCATE | @} statements.

ISONEOF and ISONEOF% functions.

RPLBEG$, RPLEND$ and RPLSTR$ functions.

Cancelling the application exit dialog no longer temporarily disables the cursor.

New POKE to print a space after numbers in the PRINT statement (GW-BASIC compatibility).

New POKE to begin editing at the beginning of a line in the EDIT statement.

New POKE to prevent cursor moving to the row/column specified in the FRAME or BAR statements.

Updated help documentation.

 December 25, 2018

Version 2.0.1 released!

Selecting New from the File menu or Options... from the Tools menu clears the input buffer.

Selecting Load... or Save... from the File menu shows the file that is loaded or saved.

Horizontal and vertical scroll bar limits corrected when visible if display parameters are changed.

Updated help documentation.

Installer updates.

 December 17, 2018

Updated Help (2018-12-17) documentation for NBASIC 2.0 in Downloads section.

 December 14, 2018

NBASIC Version 2.0 Official Release!

We are releasing the complete standard 2.0 version to the NBASIC community. There will no longer be a cost to NBASIC and the shareware versions will no longer be available. We hope you enjoy using NBASIC as much as we enjoyed developing it. Support us and the continued development of NBASIC through PayPal or Patreon.

Complete help documentation for all new 2.0 features which is included in the install package as well as a separate download.

All of the bug reports from the ALPHA release have been resolved.

New downloads including Version 2.0 statement and function references.

PEEKs, POKEs, EXECs and now USRs updated.

Additional updates throughout the website.

 October 22, 2018


We are celebrating the 15th anniversary of the initial release of NBASIC in a big way!

NBASIC 2.0 (Release 12) is finally here and has been rewritten from the ground up. Many improvements have been made and new features added including a new compiler, interpreter and runtime architecture, a new user interface, screen input/output system and graphics manager, a new memory management system, new file and printer interfaces, a new help system (HTML Help), and a new installer. Performance has also been greatly increased. Backwards compatibility with the 1.x series was a goal and only minor breaking changes are present.

NBASIC 2.0 can load any program created with NBASIC 1.x. ASCII programs are always compiled when loaded and any syntax errors can be shown and corrected. Binary programs from 1.x versions are recompiled into the new format in version 2.0. NBASIC 1.x will also recompile ASCII and binary programs from version 2.0 and generate syntax errors for newer 2.0 language features and statements. All versions of NBASIC can load and save programs usable by any other version. Data files created by NBASIC programs are 100% compatible, regardless if the program is run in NBASIC 1.x or 2.0.

The NBASIC programming environment is unchanged, all editing and control keys work as expected. Managing volumes for files is also unchanged.

New Features

The NBASIC application now has a standard Windows menu system in addition to the context menu that is accessed by right clicking in the NBASIC screen. The application menu has all of the options in the context menu plus some extras. In the File menu, you can load and save a program using the File dialog, erase the current program using New, or exit the application. The Edit menu has options for copying and pasting text using the Windows clipboard and a History dialog that lists commands entered at the NBASIC command prompt. The other menus contain options you are already familiar with from the context menu.

The user interface also includes an improved file load and save dialog and a display options dialog.

One of the biggest changes for the NBASIC language is the addition of numeric data types. Previously, only the double-precision numeric type was available. Now single-precision and integer numeric types are supported. Double-precision numeric variables and literals are denoted by appending a hash (#) sign to the end, single-precision by an exclamation (!) point and integers by a percent (%) sign. String variables continue to use the dollar ($) sign appended to the end and string literals use double quotes. If no data type is specified in the name of a variable or numeric literal it is treated as double-precision. Automatic conversion is done between all numeric data types as long as the range of the value is within the range of the variable being assigned to. Conversion of double-precision to single-precision or integer data types will result in the loss of precision as well as conversion from single-precision to an integer. All numeric data types are automatically converted to the required type during expression evaluation, statement and function parameter passing. An overflow error will result if the value cannot be converted.

Many new numeric functions have been added to support the new numeric data types (ABS%(-2%)).


Existing functions that return an integer value (true/false, file number, string index, error number, etc.) may include the % data type at the end of the function name to prevent conversion of the return value to double-precision (INSTR%("ABC", "B")).

Functions that accept a file number as a parameter allow an optional # in front of the value similar to input/output statements (EOF(#1)).

The ATTACH and DETACH statements accept the keyword PRINTER in place of #-2.

The ATTRIB statement now allows the files parameter to be optional which is equivalent to "*.*".

The CLS statement now allows an optional background color to be specified as a parameter (CLS(5)).

The DEF FN statement has been extended to support the new data types just like variables.

The DIR statement now has flags to control how files are displayed (DIR [files][,{O | P | W}...]). DIR,O can be used to order the files in the directory listing. DIR,W can be used to list files using a wide format (no details). DIR,P can be used to pause the listing after each page. More than one flag can be included (DIR "*.BAS",OW).

The FOR statement now allows multiple loop variables like NEXT (FOR I=1 TO 10,J=1 TO 5:NEXT J,I).

The FORMAT statement has been extended to format REM statements (FORMAT {REM | '}).

The GO IF statement has an optional else target (GO IF A>0,100,200).

The GOTO and GOSUB statements now support computed targets (GOTO (A*10)). The expression must be enclosed in parantheses.

The LOCK and UNLOCK statements now allow #0 as an optional parameter.

The LSET and RSET statements now allow multiple file buffer assignments (LSET A$=MKN$(R),B$=ACC$).

The FILE$ functions now allows the file parameter to be optional which is useful when getting subsequent files (FILE$(,1)).

A new CHKVER statement that reports the minimum version of NBASIC required for a program to run.

A new REDO statement that recalls the previous command for editing.

New SORT and RSORT statements to sort arrays ([R]SORT array[,[start][,end]]).

A new set of graphics commands are available. In NBASIC 1.x, you could use only one (1) graphics buffer which is created by GRAPH ON. In NBASIC 2.x you can create up to four (4) graphics buffers. To create graphics buffers and start graphics mode use the PCLEAR statement (PCLEAR buffers). PCLEAR 1 is equivalent to GRAPH ON. To end graphics mode and switch back to text mode use PCLEAR 0, which is equivalent to GRAPH OFF. The first buffer (1) is automatically set to the active and display buffer. All graphics commands send output to the active graphics buffer. If this is also the display buffer, the results are shown on the screen. To set a different active buffer use the PSCREEN statement (PSCREEN active[,display]). You can show one buffer while drawing to another and switch them using PSCREEN. Use the PCOPY statement (PCOPY buffer1 TO buffer2) to copy one graphics buffer to another. Use the PFLIP statement to switch the active and display buffers.

New print separators for the PRINT statement.

New formatting characters for strings in PRINT USING.

New PEEKs, POKEs, EXECs and USRs.

Line drawing characters (extended characters).

Breaking Changes

The ON ERROR statement is now only a single event. If an error handler is set using the ON ERROR statement, when an error occurs in the program, control is transferred to the handling routine and error trapping is turned off. This means that if an error occurs in the error handling routine, the program will stop and report the error. The error handling routine will not be called again. When the error handling routine returns to the main program using the RESUME statement, error handling is restored and any succeeding error will cause the error handling routine to be called. Perform minimal error handling to avoid errors that may stop the program.

The ON BREAK and ON TIMER statements now use GOSUB/RETURN instead of GOTO/RESUME. Change any ON BREAK GOTO or ON TIMER GOTO statements to ON BREAK GOSUB and ON TIMER GOSUB respectively. Also, in the handling routine for each event, change the RESUME statement to RETURN. You will also need to use BREAK ON or TIMER ON after the event handling routine is setup in ON BREAK or ON TIMER to enable the event trapping. In the handling routine, the event trapping is automatically suspended at the start of the routine and automatically enabled when the handling routine returns to the main program using the RETURN statement. You can also suspend event trapping in the main program by using BREAK ON/STOP or TIMER ON/STOP. When event trapping is suspended, if the event occurs it is remembered and when event trapping is turned on the event is immediately handled. To disable event trapping and have NBASIC not remember the event use BREAK OFF or TIMER OFF.

The BREAK mode peek (5794) has changed as well. If a BREAK key event trap is set using the ON BREAK statement, the return value will be 128 if event trapping is on, 129 if off and 143 if suspended. Otherwise the return value is 255 if BREAK key trapping is on and 0 if off.

The REOPEN statement alternate syntax has changed from REOPEN mode,#file to REOPEN #file,mode

The TIMER control peek/poke (51520) has changed in a similar manner. If a TIMER event trap is set using the ON TIMER statement, the return value will be 128 if event trapping is on, 129 if off and 143 if suspended. Otherwise the return value is 0. These values can be poked to enable, disable or suspend TIMER event trapping.

The GET and PUT graphics statements now require a two (2) dimensional array to store/display graphics screen images. The array will need to be dimensioned to the same dimensions of the image being captured instead of a one (1) dimensional array. This is easier to calculate when using images.

The POINT function now returns the color of the character at the specified screen location instead of a pixel on the graphics screen. Use the PPOINT function to get the color of a pixel.

If a parameter error occurs in a statement, the error code is set to ?Function call (18) instead of ?Command (6). If the error code is checked in an error handling routine for command errors, check for function call errors instead.

Minor changes to the operator precedence rules have been made. The NOT logical operator now has the same precedence as the negate (-) operator. The integer division (\), integer quotient (DIV) and the modulus (MOD) operators now have the same precedence as multiplication and division. The equal (=) and not equal (<>) comparison operators now have lower precedence then the other comparison operators. The logical operators now all have independent precedence in the following decreasing order: AND, XOR, OR, EQV and IMP.

New error codes have been added (60-70). The new error codes are file already exists (60), invalid line number (61), maximum open files exceeded (62), printer not found (63), too many arrays (64), too many EVALs (65), too many DEF FNs (66), too many GOSUBs (67), too many lines (68), too many variables (69) and undefined (70).

Escape sequences are not implemented in this release.

The AUTO statement has changed. Previously, automatic line numbering in the editor could be controlled with AUTO ON/OFF. Now, AUTO (AUTO [start[,increment]]) is a utility and not part of the editor. AUTO will allow you to enter a series of program lines without having to enter the line numbers. Each new line will have an automatically generated line number. To finish entering lines, use the BREAK key on a blank line.

The CHKIO, SCREEN BACKUP, SCREEN RESTORE and SELECT statements are not implemented in this release.

The SCREEN and SELECT functions are not implemented in this release.

Character sets are not supported in this release.

PEEK(19920) is not implemented in this release.

POKE 17984,n, POKE 19920,n, POKE 29538,n, POKE 46966,n and POKE 59325,n are not implemented in this release.

Deprecated Statements

The ABORT statement is deprecated and has been changed to CANCEL. ABORT will be removed in a future release.

The GOTO TIMER statement is deprecated and has been changed to GOSUB TIMER. GOTO TIMER will be removed in a future release.

The SWAP statement is deprecated and has been changed to EXC. SWAP will be removed in a future release.

The new NBASIC 2.0 application design will allow for future growth and expansion and will continue to be actively developed. Please join us in welcoming the long awaited version 2! Thank you for your continued support.

 February 10, 2018
NBASIC Version 1.6 available now for download!

        New Statements
  • CENTER statement:  CENTER
  • CLIPBOARD$ statement:  CLIPBOARD$="string"
  • FLUSH statement:  FLUSH [#file[,#file]...]
  • MAXFILES statement:  MAXFILES n
  • PROTECT statement:  PROTECT {ON | OFF}
  • UNDEF FN statement:  UNDEF FNname
  • UNDEF USR statement:  UNDEF USR[n]

        New Functions

  • AMPM function:  AMPM(time)                          
  • CHARAT$ function:  CHARAT$(string,index)
  • CLIPBOARD$ function:  CLIPBOARD$
  • COALESCE function:  COALESCE(number[,number]...) 
  • COALESCE$ function:  COALESCE$(string[,string]...) 
  • CONTAINS function:  CONTAINS(string1,string2) 
  • DEFVOL$ function:  DEFVOL$ 
  • EVAL$ function:  EVAL$(string) 
  • FILEDATE function:  FILEDATE(file[,dateoption])
  • FILESIZE function:  FILESIZE(file)
  • GETVOL$ function:  GETVOL$(filename) 
  • GETNAME$ function:  GETNAME$(filename)
  • GETEXT$ function:  GETEXT$(filename)
  • ISNUM function:  ISNUM(string)
  • RND$ function:  RND$(string) 
  • UNQUOTE$ function:  UNQUOTE$(string) 
  • XOR function:  XOR(number, number)                           

        New Operator

  • Exponentiation (**)

        New PEEKs 

  • Year (High) 29620
  • Year (Low) 29621
  • Month 29622
  • Day 29623
  • Hour 29624
  • Minute 29625
  • Second 29626
  • Day of week 29627
  • AM/PM 29628

        BBC Basic Compatibility

  • CLG (PCLS)
  • EXT (LOF)
  • REPORT$ (ERR$)
  • VPOS (ROW)

        Bug Fixes 

  • Fixed EVAL buffer overrun bug
  • Corrected anti-aliased fonts on Windows Vista
 June 16, 2008
Website updated with documentation in Español!  Translations of the documentation have been provided by Felipe Francisco Nunez Cores, a wonderful friend of SylvaWare and a user of NBASIC!  Many thanks to Fran for making this information available in Spanish.
 November 7, 2007
NBASIC Version 1.5.2 released.
  • ARC statement.
  • DLOAD and DSAVE statements.
  • FIND statement.
  • BEGINSWITH and ENDSWITH functions.
  • BREAK function.
  • CDN and CHN functions.
  • CHOOSE and CHOOSE$ functions.
  • COMP and COMPI functions.
  • EMPTY function.
  • ENCLOSE$ function.
  • EVAL function.
  • EXTRACT$ and REMAIN$ functions.
  • FILEINFO$ and VOLINFO$ functions.
  • FINDONEOF function.
  • FLOOR function.
  • HYPOT function.
  • IIF and IIF$ functions.
  • MATCH function.
  • MOD function.
  • PCOL and PROW functions.
  • SPAN and CSPAN functions.
  • SQUEEZE$ function.
  • SWITCH and SWITCH$ functions.


  • EDIT statement.
  • RENAME statement.
  • UNLOAD statement.
  • CHR$ function.
  • LTRIM$, RTRIM$ and TRIM$ functions.
  • MAX and MIN functions.

User Manual updated.

Reference Guides updated.

Peeks and Pokes updated.

 February 19, 2007
NBASIC Version 1.5.1 released.
  • CREATE statement.
  • FONT statement.
  • FORMAT statement.
  • FRAME statement.
  • FRE statement.
  • LINES statement.
  • LOADC and SAVEC statements.
  • OLD statement.
  • PUSH statement.
  • RUNR statement.
  • SPLITNAME statement.
  • COMPRESS$ function.
  • COPYSIGN function.
  • DOLLAR$ function.
  • DTR function.
  • FONT function.
  • INYN$ function.
  • MAKENAME$ function.
  • PROMPT$ function.
  • QUOTE$ function.
  • RTD function.
  • SELECT function.
  • SET$ function.
  • Fixed a bug to correctly parse filename extensions.
  • Fixed a bug to correctly output text in print zones.


  • CREATE statement (CR.).

User Manual updated.

Reference Guides updated.

February 19, 2006
NBASIC Version 1.5 released.
  • APPEND statement.
  • ATTACH and DETACH statements.
  • NOINVERSE statement.
  • NOREVERSE statement.
  • RENUMBER statement.
  • REVERSE statement.
  • UNNUM statement.
  • BUFSIZ function.
  • VARPTR and VARPTR$ functions.
  • The DRAW statement has been updated with additional commands.
  • The LOG statement has been changed to buffer output to the log file.
  • The interpreter now recognizes 2 double quotes in a string as a single double quote.
  • Added a PEEK to check if a file is attached to screen output.
  • Added a POKE to flush the log file.
  • Added a POKE to enable/disable the renumbering of only numbered lines.
  • Fixed a bug to correctly get the name of the default printer on startup.
  • Fixed a bug in the CHKUL statement to correctly check partially numbered programs.
  • Fixed a bug in the DIR statement to correctly use wildcards.
  • Fixed a bug in file and log output to write partial buffer if buffer causes file to exceed maximum size.


  • APPEND statement.
  • ATTRIB statement.
  • COPY statement.
  • KILL statement.
  • MOVE statement.
  • RENAME statement.


  • APPEND statement (A.).
  • ATTRIB statement (AT.).
  • BACKUP statement (B.).
  • COPY statement (C.).
  • HELP statement (H.).
  • KILL statement (K.).
  • LOAD statement (L.).
  • MOVE statement (M.).
  • MERGE statement (ME.).
  • RENAME statement (R.).
  • SAVE statement (S.).
  • VOLUME statement (V.).

Tandy/Radio Shack Color Computer 3 Compatibility

  • HCIRCLE statement.
  • HCLS statement.
  • HCOLOR statement.
  • HDRAW statement.
  • HGET and HPUT statements.
  • HLINE statement.
  • HPAINT statement.
  • HSET and HRESET statements.
  • HPOINT function.
  • ERLIN function.
  • ERNO function.

Commodore 64 Compatibility

  • CLR statement.
  • CMD statement.
  • CONCAT statement.

BASICA Compatibility

  • RETURN statement.
  • SYSTEM statement.
  • SADD function.

User Manual updated.

Reference Guides updated.

Peeks and Pokes updated.
August 14, 2005
NBASIC Version 1.4 released.
  • ASAVE and BSAVE statements.
  • AT statement.
  • BKOFF and BKON statements.
  • DIRR statement.
  • LOCK and UNLOCK statements.
  • POP statement.
  • QUIT statement.
  • SELECT statement.
  • COLOR function.
  • COPYIGHT$ function.
  • CSRLIN function.
  • LOWER$ and UPPER$ functions.
  • LSET$ function and RSET$ functions.
  • PPOINT function.
  • RCP function.
  • SCREEN function.
  • SPLITNAME$ function.
  • The LOG statement has been changed to use "log" as the default extension.
  • The LSET and RSET statements have been changed to use string array variables.
  • Improved the REMARK statement to detect which case to use when inserting the REM statement.
  • Changed the RND function so that RND(1) returns a number between 0 and 1.

Apple ][e compatibility

  • CATALOG statement.
  • COLOR statement.
  • GR statement.
  • HCOLOR statement.
  • HGR statement.
  • HGR2 statement.
  • HLIN and VLIN statements.
  • HPLOT statement.
  • HTAB and VTAB statements.
  • INVERSE statement.
  • NORMAL statement.
  • NOTRACE statement.
  • PLOT statement.
  • TEXT statement
  • SCRN function.

Texas Instruments TI-99/4a compatibility

  • BYE statement.
  • CON statement.
  • CONTINUE statement.
  • DELETE statement.
  • NUMBER statement.
  • RESEQUENCE statement.
  • TRACE statement.
  • UNBREAK statement.
  • UNTRACE statement.
  • CHRS$ function.
  • SEG$ function.

User Manual updated.

Reference Guides updated.

Peeks and Pokes updated.
December 23, 2004
NBASIC Version 1.3 released.
  • REMARK and UNREMARK statements.
  • SWAP statement.
  • TYPE statement.
  • New POKE to restore a program erased by NEW.
  • Supports Windows XP control styles.

User Manual updated.

October 30, 2004
NBASIC Version 1.2.1 released.
  • USING$ function.
  • ISNEG and ISPOS functions.

User Manual updated.

Note: Please contact SylvaWare using our email address:  Our post office box  is no longer in use.  We apologize for any inconvenience.  Thank you.

September 21, 2004
NBASIC Version 1.2 released.
  • LET statement extended to allow multiple variables and assignments.
  • LIST, DEL, CHKSYN, CHKUL, CHKSW, CHKIO, PROFILE, BREAK and NOBREAK statements extended to allow multiple line sequences.
  • OPTION BASE and OPTION EXPLICIT statements for arrays.
  • New array functions.
  • Many new statements and functions have been documented.
  • Improved font handling including international character sets.  

Website updated with Frequently Asked Questions (FAQs) and Inside NBASIC.

New User Manual available.
We now support ordering through PayPal!
February 19, 2004
NBASIC Version 1.1 released.
  • NBASIC now includes printing support featuring a classic line printer interface (LLIST, LPRINT, LPOS, etc.).
  • Many new statements and functions have been documented.
  • New peeks and pokes added.
New Reference Guides available.
Updated Peeks and Pokes.
October 23, 2003
Screenshots added.
October 22, 2003
Downloads now available.
NBASIC Version 1.0 released.
SylvaWare website live!
Copyright © 2003-2019 SylvaWare