aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorB. Watson <urchlay@slackware.uk>2024-07-10 00:09:44 -0400
committerB. Watson <urchlay@slackware.uk>2024-07-10 00:09:44 -0400
commitb022efdfcb046e567f85e7cc74dedac9d4049557 (patch)
tree4466f3b3081c7a64980bcc38d17701e24a1902ee
parent8f2b1627dd442bdd7d5a638d9c32566723d82ed0 (diff)
downloadbw-atari8-tools-b022efdfcb046e567f85e7cc74dedac9d4049557.tar.gz
whichbas: support BASIC XL Toolkit extended commands.
-rw-r--r--whichbas.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/whichbas.c b/whichbas.c
index 13289f0..a4e9fc8 100644
--- a/whichbas.c
+++ b/whichbas.c
@@ -228,7 +228,7 @@ CALLBACK(handle_cmd) {
4 of them, this leaves 43 we can check.
- Covered so far: 40 (93%)
+ Covered so far: 41 (95%)
Unchecked tokens:
@@ -239,10 +239,6 @@ CALLBACK(handle_cmd) {
Again, not important, because it's highly unlikely any BXL/BXE
program will contain NUM... because when it executes, it stops the
program and goes back to the READY prompt (in auto-numbering mode).
-
- TODO: Unknown token, find out what it does:
- 0x5A: BLOAD or... what? (Jindroush lists it as BXL_EXTEND for BXL and
- ?5A? for BXE)
*/
switch(tok) {
case 0x39: /* MOVE <args> or ENDWHILE */
@@ -390,6 +386,24 @@ CALLBACK(handle_cmd) {
/* only BXL/BXL allows a scalar variable arg */
remove_type(BT_TURBO);
}
+ break;
+ case 0x5a: /* TB: BLOAD; BXL: extension mechanism; BXE: invalid. */
+ /* This is the token used for the BXL EXTEND.COM added commands,
+ from the Toolkit disk. It's followed by a byte ranging 0x10
+ to 0x15 that specifies which extended command, e.g. 0x5a 0x11 means
+ EXIT, 0x5a 0x12 is PROCEDURE, 0x5a 0x13 is CALL. Although
+ these look BXE's extra commands, they aren't the same tokens,
+ and BXE will choke on them (RUN causes "Error- 33", LIST causes
+ a lockup). */
+ if(nexttok >= 0x10 && nexttok <= 0x15) {
+ /* worth mentioning to the user... */
+ fprintf(stderr, "Note: program requires EXTEND.COM from the Toolkit disk.\n");
+ set_type(BT_BXL);
+ } else {
+ /* it's BLOAD if followed by e.g. OP_STRCONST or a variable */
+ set_type(BT_TURBO);
+ }
+ break;
case 0x5c: /* GO# (1 arg only) or SORTUP (optional 2nd arg of USING, but no comma) */
case 0x5d: /* # (1 arg only) or SORTDOWN (optional 2nd arg of USING, but no comma) */
/* COMPLETE but no longer needed (check_variables() already found the