aboutsummaryrefslogtreecommitdiff
path: root/whichbas.rst
diff options
context:
space:
mode:
authorB. Watson <urchlay@slackware.uk>2024-07-07 00:26:20 -0400
committerB. Watson <urchlay@slackware.uk>2024-07-07 00:26:20 -0400
commit37775a900ae8023961dbae3ca4d6273bb18c9352 (patch)
tree130e0c05a19db8d3d2fc2152518f7ef0ea4b160a /whichbas.rst
parente87e3facc185150db9ac87b2704e1d340b8cdb94 (diff)
downloadbw-atari8-tools-37775a900ae8023961dbae3ca4d6273bb18c9352.tar.gz
whichbas: added.
Diffstat (limited to 'whichbas.rst')
-rw-r--r--whichbas.rst75
1 files changed, 75 insertions, 0 deletions
diff --git a/whichbas.rst b/whichbas.rst
new file mode 100644
index 0000000..5e7363c
--- /dev/null
+++ b/whichbas.rst
@@ -0,0 +1,75 @@
+========
+whichbas
+========
+
+----------------------------------------------------------
+Determine BASIC variant of a tokenized Atari 8-bit program
+----------------------------------------------------------
+
+.. include:: manhdr.rst
+
+SYNOPSIS
+========
+whichbas [-v] *input-file*
+
+DESCRIPTION
+===========
+**whichbas** reads a tokenized Atari 8-bit BASIC, Turbo BASIC,
+BASIC XL, BASIC XE, or Atari Microsoft BASIC program and attempts to
+discover which BASIC is required to run it.
+
+NOTES
+=====
+Turbo BASIC, BASIC XL, and BASIC XE are all supersets of Atari BASIC.
+If you wrote a program using one of them, but didn't use any of the
+extra commands or functions, the result is still an Atari BASIC program.
+
+There are two types of BASIC XE programs: regular and *EXTEND*\ed. The
+extended type is detected 100% reliably, because the first byte of the
+file changes from **$00** to **$DD**. Non-extended programs are only
+identified as BASIC XE if they use any of the extra commands BASIC XE
+adds to those found in BASIC XL.
+
+Atari BASIC programs can be detected 100% reliably.
+
+Detection of Turbo vs. BXL/BXE isn't 100% reliable, and probably
+never will be. There's too much overlap between the sets of extra
+tokens added by each. Programs that don't use very many of the extra
+functions provided by Turbo/BXL/BXE may show up as "Not Atari BASIC;
+probably either Turbo or BXL/BXE".
+
+Atari Microsoft BASIC is detected by checking that the first two
+bytes of the file are not zero, and that the last 3 are zero. This
+may result in false positives (files that aren't BASIC programs at
+all might show up as Microsoft). Also, no distinction is made between
+Atari MS BASIC 1.0 and 2.0.
+
+Various non-BASIC files are detected (including Mac/65 source,
+ELF binaries, etc) as a convenience, but I wouldn't rely on
+**whichbas**\'s non-BASIC file type detection if I were you.
+
+LIMITATIONS
+===========
+Currently, **whichbas** doesn't look at the variable name or type
+tables. One problem caused by this: If a program uses only Atari BASIC
+tokens, but uses variable(s) with _ in the name, it will be identified
+as Atari BASIC... even though _ in variable names is illegal in Atari
+BASIC and pretty much guarantees the program is Turbo/BXL/BXE.
+
+Looking at the variable types could also improve detection, since
+Turbo and BXL/BXE support extended variable types.
+
+**whichbas** knows nothing about other BASICs such as Frost BASIC,
+BASIC/A+, Altirra BASIC...
+
+OPTIONS
+=======
+
+.. include:: genopts.rst
+
+EXIT STATUS
+===========
+
+0 for success, 1 for failure.
+
+.. include:: manftr.rst