MBASIC Features¶
This document lists all features implemented in MBASIC-2025 (this implementation of MBASIC 5.21).
Language Features¶
Complete MBASIC 5.21 Syntax¶
✓ 100% parser coverage for valid MBASIC 5.21 programs ✓ All data types: Integer (%), Single (!), Double (#), String ($) ✓ Implicit typing via type suffixes ✓ Type declarations: DEFINT, DEFSNG, DEFDBL, DEFSTR
Variables and Arrays¶
- Simple variables: A, B$, COUNT%, TOTAL!, VALUE#
- Arrays: Single and multi-dimensional with DIM
- Dynamic allocation: Arrays allocated as needed
- OPTION BASE: Support for 0 or 1-based arrays
- Array bounds: Automatic checking for subscript errors
Operators¶
Arithmetic: +, -, *, /, \, ^, MOD
Relational: =, <>, <, >, <=, >=
Logical: AND, OR, NOT, XOR, EQV, IMP
String: + (concatenation)
Control Flow¶
- IF...THEN...ELSE - Conditional execution with nesting
- FOR...NEXT - Counted loops with STEP
- WHILE...WEND - Conditional loops
- GOTO - Unconditional branch
- GOSUB...RETURN - Subroutine calls
- ON GOTO/GOSUB - Computed branches
- ON ERROR GOTO/GOSUB - Error handling
Input/Output¶
Console I/O:
- PRINT - Output with formatting (;, ,, TAB, SPC)
- PRINT USING - Formatted output with format strings
- INPUT - Interactive input with prompts
- LINE INPUT - Full line input (Note: Graphics LINE statement is not implemented)
- LPRINT - Line printer output (Note: Statement is parsed but produces no output - see LPRINT for details)
File I/O: - Sequential files: OPEN, CLOSE, PRINT#, INPUT#, LINE INPUT#, WRITE# - Random files: FIELD, GET, PUT, LSET, RSET - Binary I/O: MKI/MKS/MKD$, CVI/CVS/CVD - File management: KILL, NAME AS, RESET - File queries: EOF, LOC, LOF
Functions (45+)¶
Mathematical: - Trigonometric: SIN, COS, TAN, ATN - Logarithmic: LOG, EXP - Other: ABS, INT, FIX, SGN, SQR, RND
String: - Extraction: LEFT, RIGHT, MID, CHR, STRING$ - Analysis: LEN, ASC, INSTR, VAL - Formatting: SPACE, STR
Type Conversion: - CINT, CSNG, CDBL - Numeric conversions - STR$, VAL - String/number conversions
System: - INKEY$ - Non-blocking keyboard input - FRE - Free memory query - POS - Cursor position - PEEK, POKE - Memory access (emulated)
User-Defined: - DEF FN - Single-line functions - Multi-line DEF FN support
For the complete list of all functions, see Functions Index.
Data Handling¶
- DATA - Define data values
- READ - Read data into variables
- RESTORE - Reset data pointer
Program Control¶
Direct Commands: - RUN - Execute program - LIST - Display program lines - NEW - Clear program - SAVE - Save program to disk - LOAD - Load program from disk - DELETE - Delete line ranges - RENUM - Renumber program lines - AUTO - Auto-line numbering mode - BREAK - Set/list/clear breakpoints for debugging
Execution Control: - STOP - Halt execution (resumable) - END - Terminate program - CONT - Continue after STOP - SYSTEM - Exit MBASIC
Error Handling¶
- ON ERROR GOTO - Error trap setup
- ON ERROR GOSUB - Error subroutine
- RESUME - Continue after error (RESUME, RESUME NEXT, RESUME line)
- ERR - Error code variable
- ERL - Error line number
- ERROR - Generate error
Debugging¶
- TRON/TROFF - Line tracing
- Breakpoints - Set/clear breakpoints (available in all UIs; access method varies)
- Step execution - Execute one line at a time (available in all UIs; access method varies)
- Variable viewing - Monitor variables (available in all UIs; access method varies)
- Stack viewer - View call stack (available in all UIs; access method varies)
See UI-specific documentation for details: CLI Debugging, Curses UI, Tk UI
User Interface Features¶
Curses UI (Default)¶
- Full-screen editor with line numbers
- Split screen - Editor above, output below
- Syntax checking - Real-time error marking
- Breakpoint indicators - Visual markers
- Auto-numbering - Smart line numbering
- Line sorting - Automatic or on-demand
- Variables window - View variable values (^W)
- Stack window - View execution stack ({{kbd:step_line:curses}})
- Help system - Built-in documentation ({{kbd:help:curses}})
- Fast paste - Optimized for large programs
Note: Find/Replace is not available in Curses UI. Use the Tk UI for search/replace functionality.
CLI Mode¶
- Classic MBASIC interface - Authentic experience
- REPL - Read-Eval-Print Loop
- Direct commands - All MBASIC commands
- Immediate mode - Expression evaluation
- Command history (platform-dependent)
Note: Find/Replace is not available in CLI. Use the Tk UI for search/replace functionality.
Tkinter GUI¶
- Graphical interface - Windows, menus, toolbars
- Syntax highlighting - Color-coded keywords, strings, numbers
- Find and Replace - Search and replace text ({{kbd:find:tk}}/{{kbd:replace:tk}})
- Menu bar - File, Edit, Run operations
- Toolbar - Quick access buttons
- Status bar - Program state display
Web UI¶
- Browser-based IDE - Run MBASIC in any modern browser
- Syntax highlighting - Color-coded editor
- Session-based storage - Files persist during browser session only (lost on page refresh)
- Three-panel layout - Editor, output, and command areas
- In-memory filesystem - Virtual filesystem with limitations:
- 50 file limit maximum
- 1MB per file maximum
- No path support (simple filenames only)
- No persistent storage across sessions
- Basic debugging - Simple breakpoint support via menu
Note: Find/Replace is not available in Web UI. Use the Tk UI for search/replace functionality.
See Compatibility Guide for complete Web UI file storage details.
Compiler Features¶
Semantic Analyzer¶
The interpreter includes an advanced semantic analyzer with 18 optimizations:
- Constant folding - Evaluate constant expressions at parse time
- Runtime constant propagation - Track constant values during execution
- Common subexpression elimination (CSE) - Eliminate redundant calculations
- Subroutine side-effect analysis - Detect pure functions
- Loop analysis - Identify loop invariants
- Loop-invariant code motion - Move constant calculations out of loops
- Multi-dimensional array flattening - Optimize array access
- Dead code detection - Identify unreachable code
- Strength reduction - Replace expensive operations with cheaper ones
- Copy propagation - Eliminate redundant variable copies
- Algebraic simplification - Simplify mathematical expressions
- Induction variable optimization - Optimize loop counters
- OPTION BASE support - Compile-time array base handling
- Expression reassociation - Reorder for better optimization
- Boolean simplification - Optimize logical expressions
- Forward substitution - Eliminate temporary variables
- Branch optimization - Optimize conditional branches
- Uninitialized variable detection - Catch potential bugs
These optimizations improve execution speed while maintaining 100% MBASIC compatibility.
See Architecture for details on interpreter vs. compiler modes.
File Format Support¶
BASIC Program Files¶
- ASCII text (.BAS, .bas) - Human-readable source
- Tokenized (.BAS) - CP/M MBASIC format (partial support)
- Line endings: CR, LF, or CRLF (auto-detected)
Data Files¶
- Sequential text files - Line-oriented text
- Random access files - Fixed-record binary
- Binary files - Raw binary with MKI$/CVI functions
Compatibility¶
What Works¶
✓ All valid MBASIC 5.21 programs ✓ CP/M MBASIC program listings ✓ MBASIC file I/O conventions ✓ MBASIC error codes and messages ✓ Line number range: 0-65529
Intentional Differences¶
- PEEK/POKE - Emulated (no direct memory access)
- INP/OUT - Not implemented (hardware-specific)
- USR - Not implemented (machine code calls)
- Memory model - Python memory management vs. CP/M
- File paths - Modern OS paths vs. CP/M 8.3 format
See Compatibility Guide for complete details.
Platform Support¶
Tested Platforms¶
- ✓ Linux (Ubuntu, Debian, Fedora, Arch)
- ✓ macOS (10.14+)
- ✓ Windows (10, 11)
- ✓ WSL (Windows Subsystem for Linux)
Python Versions¶
- Required: Python 3.8+
- Tested: Python 3.8, 3.9, 3.10, 3.11, 3.12
- Recommended: Python 3.10 or later
Dependencies¶
Required¶
- Python 3.8+ - Interpreter only
Optional¶
- urwid 2.0+ - For Curses UI
- python-frontmatter 1.0+ - For help system
Development¶
- pexpect 4.8+ - For automated testing
See Also¶
- Getting Started - Installation and first steps
- Compatibility Guide - What works, what doesn't
- Architecture - How MBASIC works internally
- Language Reference - BASIC-80 language