diff --git a/README.md b/README.md index e1bba85..b685267 100644 --- a/README.md +++ b/README.md @@ -15,28 +15,24 @@ 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 into `FOR I = STOP`. -* The interpreter doesn't actually care about line numbers for statement ordering (just for `GOTO/GOSUB` targets and `IF` statements). So `20 PRINT "A"`, `10 PRINT "B"` will just print `A`, then `B` -* 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. + * Keyword parsing differs from Applesoft command line. For example `FOR I = S TO P` doesn't collapse into `FOR I = STOP`. + * The interpreter doesn't actually care about line numbers for statement ordering (just for `GOTO/GOSUB` targets and `IF` statements). So `20 PRINT "A"`, `10 PRINT "B"` will just print `A`, then `B` +* Limitations: + * Floating point overflow is only detected on variable assignment. + * Only a subset of DOS 3.3 and ProDOS useful for basic file I/O are implemented. + * Only a small number of common `PEEK`, `POKE` and `CALL` locations are supported. + * Commands that refer to assembly routines (`&`, `USR()` etc.), shape tables, and tape I/O are not implemented. * Commands that operate on the program itself (`LIST`, `RUN`, `DEL`, etc.) are not implemented. +* A handful of extensions are made beyond Applesoft BASIC: + * To improve readability, lines may start with `:` and continue the previously numbered line. + * `DEF FN` can define string functions + * `==` can be used as `=` + * `CHR$()` values > 255 do interesting things + * `HSCRN(x, y)` allows probing the hi-res screen + * hexadecimal literals e.g. `$C010` can be used as numbers 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](http://www.6502asm.com/) - a 6502 assembler/emulator in JavaScript -* [Quite BASIC](http://www.quitebasic.com/) - a similar project aimed at teaching programming -* [NG-BASIC for Javascript](http://navahogunleg.net/blog/my-projects/ng-basic/) Navaho Gunleg's interpreter -* [BASIC Programming Resources](http://www.nicholson.com/rhn/basic/) -* [Apple II emulator in JavaScript](http://www.scullinsteel.com/apple2/)