mirror of
https://github.com/inexorabletash/jsbasic.git
synced 2024-10-07 14:54:30 +00:00
Applesoft BASIC in JavaScript
cm | ||
samples | ||
tools | ||
vfs | ||
.gitignore | ||
basic.js | ||
basicscript.js | ||
basicscript.md | ||
bell.js | ||
bell.mp3 | ||
bell.ogg | ||
bell.wav | ||
cbasic.js | ||
CHANGELOG | ||
display.css | ||
dos.js | ||
font-40col.png | ||
font-80col.png | ||
font.png | ||
hires.js | ||
index.htm | ||
index.js | ||
LICENSE.md | ||
lores.js | ||
lpt.jpg | ||
printer.js | ||
README.md | ||
reference.htm | ||
styles.css | ||
tty.js |
jsbasic - Applesoft BASIC in JavaScript
This is hosted for playing with at http://calormen.com/applesoft/
For older browsers, the code depends on various polyfills. For syntax highlighting, the editor optionally uses CodeMirror and custom BASIC parser/styles. Clone these into sibling directories, so you end up with a structure like:
jsbasic/
polyfill/
CodeMirror/
Notes & Known Issues
- The BASIC program is compiled to JavaScript before execution. Syntax errors are therefore detected at compile-time rather than at run-time as on a traditional interpreter. For example, the following program would run without errors on an Apple since the erroneous second statement is never reached.
10 END : CHR$(PRINT)
- Handling of BASIC code that does not match the canonical
LIST
output format may not behave as on an Apple: - Keyword parsing differs from Applesoft command line. For example
FOR I = S TO P
doesn't collapse intoFOR I = STOP
. - The interpreter doesn't actually care about line numbers for statement ordering (just for
GOTO/GOSUB
targets andIF
statements). So20 PRINT "A"
,10 PRINT "B"
will just printA
, thenB
- To improve readability, lines may start with
:
and continue the previously numbered line. - Floating point overflow is only detected on variable assignment.
- The DOS operating system implements only a subset of DOS 3.3 and ProDOS useful for basic file I/O.
- Except for a small number of compatibility shims for common operations (e.g. keyboard strobe), commands that refer to assembly routines (
PEEK
,POKE
,CALL
,USR
etc.), shape tables, or tape I/O are not implemented. - Commands that operate on the program itself (
LIST
,RUN
,DEL
, etc.) are not implemented.
You can run your basic programs from the command line (with only basic text input and output, and no graphics or DOS commands):
- Clone the repository locally
- On Windows, run from a command prompt via:
cscript.exe cbasic.js your_program.txt
- On Mac/Linux, install Mozilla Rhino, run from the command prompt via:
java -jar PATH_TO/js.jar cbasic.js your_program.txt
To Do
- Snapshot and/or link sensibly to the polyfills
- Implement DOS functionality for consoles
Links
- 6502asm.com - a 6502 assembler/emulator in JavaScript
- Quite BASIC - a similar project aimed at teaching programming
- NG-BASIC for Javascript Navaho Gunleg's interpreter
- BASIC Programming Resources
- Apple II emulator in JavaScript