First and foremost, 'my' BASICs are designed to be general-purpose programming languages, not emulators. Although they do emulate Acorn Operating Systems and hardware to an extent, because it's necessary (and expected) to achieve an acceptable degree of compatibility, that is secondary to being able to support native features of the platforms on which they run (graphics, sound, libraries etc.).
For example although MODE 7 is emulated accurately, other MODEs aren't to the same extent. In BB4W and BBCSDL graphics pixels are the same size and shape in MODE 0 as they are in MODE 2, because they are the native pixels of the host platform (possibly after 'high DPI scaling')! Although this does impair compatibility with Acorn platforms, it means that ordinary BBC BASIC output can be freely mixed with, say, antialiased graphics and proportional-spaced text in the same window. It also means that hardware acceleration can be taken advantage of.
Similarly, whilst the BBC Micro's SOUND and ENVELOPE statements are emulated fairly faithfully (although the noise channel less so) it is also possible to output music and sounds from other sources (e.g. WAV or MP3 files) in a BBC BASIC program. The SYS statement, borrowed from ARM BASIC, accesses native 'OS' (Windows in the case of BB4W, SDL 2.0 in the case of BBCSDL) and library API functions, and makes no attempt to emulate RISC OS. This is also useful in being able to access hardware interfaces.
The objective, which I hope I have met, is to make BBC BASIC a serious competitor to the likes of Python or Javascript on the relevant host platforms. That's not to say that BB4W and BBCSDL are not suitable for running BBC Micro or RISC OS BASIC programs, often they will run with little or no modification, but it's not its raison d'être. Whilst BB4W is proprietary, BBCSDL is entirely free and Open Source.
With that introduction out of the way (and with apologies to those who knew all this already), here's the promised list of key features of BB4W and BBCSDL which distinguish them from Acorn's BASICs and (to a lesser extent) Matrix Brandy:
- Unlimited-length strings (32-bit length).
- NUL-terminated strings ($$p).
- New numeric variable types: byte (v&), 64-bit integer (v%%), 64-bit double (v#).
- Structures and arrays of structures (no, you can't do the same thing with indirection!).
- System variables (starting with @).
- Line-continuation character (\) to extend logical lines to multiple physical lines.
- Address-of operator (^) and string memory pointer (PTR(s$)).
- GET$#file extended to specify delimiter (TO) or length (BY).
- GET(x,y) and GET$(x,y) return character at text coordinates.
- EXIT FOR, EXIT REPEAT, EXIT WHILE statements.
- ON CLOSE, ON MOUSE, ON MOVE, ON SYS, ON TIME event interrupts.
- PRIVATE (static) variables, arrays and structures.
- RESTORE LOCAL to restore formal parameters and LOCAL variables, e.g. on error.
- SYS can pass and return floating-point values.
- WAIT n delays by n centiseconds.
- WIDTH(s$) returns the width of a (possibly proportional-spaced) string.
- Stereo SOUND and waveform selection.
- Indirect (by pointer) function and procedure calls.
- Opaque arrays and structures (defined in and returned from FN/PROC).
- Labels as destination of GOTO, GOSUB, RESTORE (if you must!).