Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/remy/txt2bas
ZX Spectrum BASIC conversion tooling (specific support for NextBASIC)
https://github.com/remy/txt2bas
nextbasic spectrum-next
Last synced: about 2 months ago
JSON representation
ZX Spectrum BASIC conversion tooling (specific support for NextBASIC)
- Host: GitHub
- URL: https://github.com/remy/txt2bas
- Owner: remy
- Created: 2020-04-18T09:39:01.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-07-09T18:51:42.000Z (6 months ago)
- Last Synced: 2024-10-10T22:39:50.640Z (2 months ago)
- Topics: nextbasic, spectrum-next
- Language: JavaScript
- Homepage:
- Size: 583 KB
- Stars: 19
- Watchers: 6
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
Awesome Lists containing this project
README
# txt2bas and bas2txt - tooling for ZX Spectrum NextBASIC
This code is inspired by the [.txt2bas](https://gitlab.com/thesmog358/tbblue/-/blob/ef6dc4fd0f684349d16354d67d4f756db2994fdb/src/asm/dot_commands/txt2bas.asm) dot command on the ZX Spectrum Next (not that I could read the asm code!).
This project provides:
- `txt2bas` command line tool
- `bas2txt` command line tool
- NextBASIC validation
- library for BASIC and text manipulation, validation and renumbering## Installation
[Node](https://nodejs.org/en/) and npm (included with node) are required to install and run the code.
For the command line tooling - this installs _both_ tools:
```
npm install --global txt2bas
```## Command line usage
Command line arguments are the same for both `txt2bas` and `bas2txt`:
```
txt2bas -i source.txt -o result.bas # generate a 3dos basic file
bas2txt -i source.bas -o result.txt # generates plain text
```Omitting `-o` will print to `stdout`.
By default the generated file is a +3DOS format unless the output or input filename ends in `.tap` or using the format option `-f tap`:
```
txt2bas -i source.txt -o result.tap # generates a tap file
```The command line can also read from `stdin` though this works best on `txt2bas` and not recommended for `bas2txt`.
Note that `#autostart` directive is also supported.
### Command line options
- `-i FILENAME` - input filename
- `-o FILENAME` - output filename
- `-t` - (txt2bas only) test and validate the NextBASIC source
- `-C` - (txt2bas only) strip comments (to reduce final size)
- `-bank` - (txt2bas only) generate a BANK loadable result
- `-A #n` - (txt2bas only) set autostart line to `#n`
- `-f 3dos|tap` - set the output format
- `-H`- omit the file header (either in output or in parsing input)
- `-udg` - UDGs are used so encode with binary not utf8
- `-tokens` - (txt2bas only) show parser tokens (for debugging)
- `-h` - Show help options
- `-v` - Show current version## Library API
Problematically using the library exposes a number of paired functions:
- `line2bas(String: line): Object` - the byte data is contained in `result.basic`
- `bas2line(Uint8Array: data): String` - expects to include the line number, line length and the line itself as bytes
- `file2bas(String: source, Object): Uint8Array` - results full byte array with correct format header, if `validate` is true, will throw on token errors
- `bas2file(Uint8Array: source, String=3dos: format): String` - formatted BASIC text
- `formatText(String: line): String` - processes the line through `line2bas` then `bas2line` to result the formatted line
- `validateTxt(String: source): Array[String]` - parses each line collecting and returning any token errors
- `plus3DOSHeader` and `tapHeader` - file headers for the appropriate data formats
- `codes` an object lookup from NextBASIC numerical value to text value, ie. `0xf5 = 'PRINT'`
- `statements(String: source): Array[Statement]` - returns the parsed statement which include `lineNumber` and `tokens` for each line.
- `renumber(String: source, Object)` - renumbers source lines and `GO TO` line number targets.## Development
- Currently the latest code uses node@21 (due to specific use of syntax)
- To test with another project: `npm link`
- For new features of language or validation changes, ensure a test is provided
- txt2bas also support different NextOS versions, specified through `parser-version`## Licence
- [MIT](https://rem.mit-license.org/)