aboutsummaryrefslogtreecommitdiff
path: root/listamsb.1
blob: a80a17df73ff844d42baa7fde98647ffdd9102d0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
.\" Man page generated from reStructuredText.
.
.
.nr rst2man-indent-level 0
.
.de1 rstReportMargin
\\$1 \\n[an-margin]
level \\n[rst2man-indent-level]
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
-
\\n[rst2man-indent0]
\\n[rst2man-indent1]
\\n[rst2man-indent2]
..
.de1 INDENT
.\" .rstReportMargin pre:
. RS \\$1
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
. nr rst2man-indent-level +1
.\" .rstReportMargin post:
..
.de UNINDENT
. RE
.\" indent \\n[an-margin]
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
.nr rst2man-indent-level -1
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
..
.TH "LISTAMSB" 1 "2025-02-26" "0.2.1" "Urchlay's Atari 8-bit Tools"
.SH NAME
listamsb \- List the source of a tokenized Atari Microsoft BASIC program
.SH SYNOPSIS
.sp
listamsb [\fB\-a\fP] [\fB\-v\fP] [\fB\-h\fP] [\fB\-i\fP] [\fB\-u\fP] [\fB\-t\fP] [\fB\-m\fP] [\fB\-s\fP] [\fBinput\-file\fP]
.SH DESCRIPTION
.sp
\fBlistamsb\fP acts like the \fILIST\fP command in Atari Microsoft BASIC. It reads a
tokenized (SAVEd) AMSB program and prints the code in human\-readable
format.
.sp
By default, output is piped to \fBa8cat\fP(1), which converts the
ATASCII output to something that\(aqs human\-readable on modern terminals.
This means \fBa8cat\fP must be available somewhere in \fB$PATH\fP\&.
.sp
\fBlistamsb\fP supports both versions of Atari Microsoft BASIC: the
disk\-based version 1 and the cartridge\-based version 2. The language
is the same for both versions, so there\(aqs no need to specify it.
.sp
\fBinput\-file\fP must be a tokenized AMSB program. If no \fBinput\-file\fP is given,
input is read from stdin.
.sp
Output is to stdout. Use shell redirection to save the output to a file.
.SH OPTIONS
.INDENT 0.0
.TP
.B \fB\-a\fP
Output raw ATASCII. This option must be used with a pipe or redirection, as
\fBlistamsb\fP will not write ATASCII to a terminal. \fBa8cat\fP is not used,
with this option.
.TP
.B \fB\-c\fP
Check only. No output on stdout. Diagnostics are still printed on stderr,
and the exit status is unchanged.
.TP
.B \fB\-v\fP
Verbose output, on stderr.
.TP
.B \fB\-h\fP
Print built\-in help and exit.
.TP
.B \fB\-i\fP, \fB\-u\fP, \fB\-t\fP, \fB\-m\fP, \fB\-s\fP
These options are passed to \fBa8cat\fP\&. See its man page for details. If
the \fB\-a\fP or \fB\-c\fP option is used, these options have no effect.
.UNINDENT
.SH DIAGNOSTICS
.sp
All error and warning messages are written to the standard error output.
.SS Fatal errors
.sp
These are errors in the program header at the start of the file. They
generally mean the input isn\(aqt actually an tokenized Atari Microsoft
BASIC file.
.INDENT 0.0
.IP \(bu 2
not an AMSB file: first byte not $00
.sp
Pretty self\-explanatory: if the file doesn\(aqt begin with a \fI$00\fP byte,
it\(aqs not a tokenized AMSB file.
.IP \(bu 2
not an AMSB file: too big (\fIN\fP bytes), won\(aqt fit in Atari memory
.sp
The file can\(aqt be a tokenized AMSB file because there was no way
for it to be created. It must be some other kind of file that begins
with a \fI$00\fP byte.
.IP \(bu 2
not an AMSB file: program size too small (\fIN\fP). Atari BASIC file?
.sp
The program header claims the file is 0, 1, 3, or 4 bytes long. This
is impossible, so this isn\(aqt an AMSB file. A lot of Atari BASIC
programs begin with three \fI$00\fP bytes, so that might be what this is.
.IP \(bu 2
program length is 2, no code in file (SAVE after NEW)
.sp
Probably, someone did a SAVE when there was no program in memory. It
could also mean this isn\(aqt an AMSB file at all.
.UNINDENT
.SS Warnings
.sp
These are non\-fatal: \fBlistamsb\fP logs the warning to stderr, then
continues processing.
.INDENT 0.0
.IP \(bu 2
unexpected EOF, file truncated?
.sp
A tokenized AMSB file always ends with three null bytes (\fI$00\fP).
This file doesn\(aqt. Probably the rest of the file is missing.
.IP \(bu 2
line \fIN\fP: EOL address \fIA\fP too (low|high)
.sp
Each line begins with the address of the next line. If the address
is below \fI$0700\fP, it\(aqs below the minimum value of \fIMEMLO\fP, which
is impossible. If it\(aqs above \fI$bc1f\fP, it would be in the display
list, screen memory, or OS ROM (also impossible). File is
corrupt, or not an AMSB file.
.IP \(bu 2
line \fIN\fP: EOL address \fIA\fP <= previous \fIB\fP
.sp
Corrupt file, or not an AMSB file.
.IP \(bu 2
line \fIN\fP EOL address doesn\(aqt match actual line length \fIL\fP
.sp
Same as above: corrupt, or not AMSB.
.IP \(bu 2
line number out of order
.sp
Probably means the file is corrupted, or isn\(aqt really an AMSB file.
.IP \(bu 2
line number out range
.sp
The program contains a line number that\(aqs greater than \fI63999\fP\&. How
did that happen?
.IP \(bu 2
line \fIN\fP has character \fIC\fP outside of a string. maybe Atari BASIC?
.sp
This happens when ATASCII codes 0 to 31 (\fI$1f\fP) appear in the program.
AMSB can create files like this, but at runtime, it\(aqs a syntax error.
More likely, it means this is an Atari BASIC file.
.IP \(bu 2
actual program size doesn\(aqt match program size in header
.sp
Might mean this isn\(aqt an AMSB file. If you\(aqre sure it is, part of the file
might have been overwritten with \fI$00\fP bytes.
.IP \(bu 2
trailing garbage at end of file
.sp
Might mean this isn\(aqt an AMSB file. If you\(aqre sure it is, garbage
data has somehow gotten appended to the file, after the three \fI$00\fP
bytes that end the program. Maybe it was downloaded with a crappy
version of XMODEM that pads the last block.
.IP \(bu 2
file has \fIN\fP unknown tokens
.sp
Either the file is corrupt, or this is a file from some \fIother\fP variant
of Microsoft BASIC (e.g. Commodore, AppleSoft, GW\-BASIC, TRS\-80). If
you see this warning, you\(aqll also see \fIN\fP <unknown token \fIXX\fP>
messages in the actual listing.
.UNINDENT
.SH LIMITATIONS
.sp
Unlike \fBlistbas\fP, there\(aqs no color syntax highlighting. Probably there
never will be.
.sp
It\(aqs hard to reliably detect AMSB files. Most of the time, it can at least
detect Atari BASIC files, but occasionally you\(aqll get gibberish output instead.
.SH EXIT STATUS
.sp
0 for success, 1 if there was an error reading the input (e.g. file
not found), or 2 if the input file had errors or warnings (see
\fBDIAGNOSTICS\fP).
.SH COPYRIGHT
.sp
WTFPL. See \fI\%http://www.wtfpl.net/txt/copying/\fP for details.
.SH AUTHOR
.INDENT 0.0
.IP B. 3
Watson <\fI\%urchlay@slackware.uk\fP>; Urchlay on irc.libera.chat \fI##atari\fP\&.
.UNINDENT
.SH SEE ALSO
.sp
\fBa8cat\fP(1),
\fBa8eol\fP(1),
\fBa8xd\fP(1),
\fBatr2xfd\fP(1),
\fBatrsize\fP(1),
\fBaxe\fP(1),
\fBbas2aplus\fP(1),
\fBblob2c\fP(1),
\fBblob2xex\fP(1),
\fBcart2xex\fP(1),
\fBcxrefbas\fP(1),
\fBdasm2atasm\fP(1),
\fBdiffbas\fP(1),
\fBdumpbas\fP(1),
\fBf2toxex\fP(1),
\fBfenders\fP(1),
\fBlistbas\fP(1),
\fBlistamsb\fP(1),
\fBprotbas\fP(1),
\fBrenumbas\fP(1),
\fBrom2cart\fP(1),
\fBunmac65\fP(1),
\fBunprotbas\fP(1),
\fBvxrefbas\fP(1),
\fBwhichbas\fP(1),
\fBxex1to2\fP(1),
\fBxexamine\fP(1),
\fBxexcat\fP(1),
\fBxexsplit\fP(1),
\fBxfd2atr\fP(1),
\fBxex\fP(5),
\fBatascii\fP(7),
\fBfauxtari\fP(7).
.sp
Any good Atari 8\-bit book: \fIDe Re Atari\fP, \fIThe Atari BASIC  Reference
Manual\fP,  the  \fIOS Users\(aq Guide\fP, \fIMapping the Atari\fP, etc.
.\" Generated by docutils manpage writer.
.