TrekBASIC is now both a full BASIC interpreter, written in Python, and a BASIC compiler, via LLVM.
My goal was to be able to play the old Super Star Trek game, which was written in BASIC.
I have achieved that goal.
TrekBasic is part of the TrekBasic family of BASIC programming tools.
- TrekBasic - Basic compiler and interpreter in Python
- TrekBasicJ - Basic compiler and interpreter in Java
- BasicRS - Basic compiler written in Rust
- BasicTestSuite - A test suite of BASIC Programs
- TrekBot - A tool to exercise the superstartrek program
All versions, interpreted and compiled, are intended to by byte-by-byte compatible, but are not there yet - but they are close. TrekBot and BasicTestSuite are part of the plan to ensure full compatibility.
python basic.py programs/superstartrek.bas
python tbc.py programs/superstartrek.bas
Note that tbc.py just generates LLVM IR code, and uses clang to compile it. You'll need to have clang installed.
I considered simply porting Star Trek to Python, but writing an interpreter sounded like more fun.
There are several versions of Star Trek available.
TrekBASIC currently runs only programs/superstartrek.bas
It's not that we don't want to add support for other versions of Star Trek, it's that other versions of Star Trek require other, incompatible basic interpreters/compilers. It's not a matter of needing more features, it's a matter of need different versions of existing features. (e.g. array indexes start at zero instead of one)
- startrek.bas: http://www.bobsoremweb.com/startrek.html
- https://github.com/RC2014Z80/RC2014/blob/master/BASIC-Programs/Super%20Startrek/startrek.bas
- https://github.com/lwiest/BASICCompiler/blob/master/samples/STARTREK.BAS
TrekBASIC actually provides a full basic development environment which has:
- Code breakpoints
- Data write breakpoints
- Single stepping
- Execution timing
- Execution tracing
- Code coverage reports
- Reformatting
- Renumbering
You can profile the interpreter's code using python profilers.
I have used cProfile and gprof2dot.py. You'll need to install gprof2dot.py I don't have dot installed, I just found an online version, and used that.
python -m cProfile -s tottime trek_bot.py
python venv/lib/python3.9/site-packages/gprof2dot.py -f pstats test.pstats
See the documentation directory for more information.
TrekBasic requires python 3
python basic.py programs/superstartrek.bas
HINT If you don't put your shields up, the first hit will kill you! :-)
If you want the development environment, similar to what you would have had with a command line BASIC
python basic_shell.py
Use "help" to get available commands, like "load programs/superstartrek.abs" and "run".
I have not implemented an editor in basic_shell. You can input individual lines, but there is no editing. While the old-style line-by-line editing might be nostalgic, modern editors are so much better. You can edit in your favorite editor, and paste in changes to the shell, or just run them directly.
A LINE is made up of multiple STATEMENTS, each one beginning with a KEYWORD.
100 PRINT X:GOTO 200
"PRINT X" and "GOTO 100"
"PRINT", and "GOTO"