SOURCGEN Re-assembler for Atari 800 XL

ATARI HOME
Introduction
Definitions
Disk Contents
Starting SOURCGEN
Symbol-Table & Editor
Generating Source Code
- from an SMB file
- for the ATARI OS
Creating SMB files
The Function Keys
The Functions A - U
A. ADDR/symb search
B. BYTE-change
C. CODE-search
D. DELETE symbols
E. EDIT
F. FILE
G. GO
H. HEAD
I. INDEX
J. JUNK?
K. KEY (0..9)
L. LIST symbols
M. MINIMUM-label
N. NEW
O. OBTAIN symbols
P. PREPARE labels
Q. QUIT (1)
R. RE-ADDRESS
S. SAVE symbols
T. TRACE
U. UTILITY (V. 3.2)
The Fram-disk
Output Menu
Error Messages
Reference card
New in V.3.2

E. EDIT

You can also enter the editor by using the arrow-up key (<CNTRL>/<->). Then you can move the cursor to anywhere on the screen and start typing next to an address.
If you end an entry with the diamond character (CNTRL-<.>), the editor will ignore all the characters to the right of the diamond. Hit <RETURN> to complete the entry. The presence of the diamond will cause listing to commence immediately from the present address.
Using this method, you can enter lines quickly and exactly.
Without the diamond you will still be in the editor when you hit <RETURN>.
To exit the editor, hit <BREAK>.

1. <ADR>[/]

deletes the item at address <ADR> from the symbol-table.

2. <ADR1> [<ADR2>]/<CHAR>

From address <ADR1> onwards, the program-code will be interpreted
according to the character <CHAR>. The following characters can be used:

; normal code. E.g. LDA #$45 (; is not needed if there is a symbol at the address)
' normal code. Constants are written as characters. E.g. LDA 'X'
! normal code. Constant are written in binary. E.g. LDA #%00001111
(Note that SOURCGEN uses binary notation automatically in conjunction
with the opcodes AND, ORA and EOR.)
&

normal code. The first two constants are interpreted
respectively as the low and high bytes of an address.
For example:

LDA #$40
'
'
LDX #$27
will be written as LDA #LABEL
'
'
LDX #LABEL:H

where LABEL stands for the address $2740.

The character "&" must be entered at the address of the first command.
It is unimportant how many other commands are situated between the two relevant commands.

@ like &, but #LABEL:H comes before #LABEL
# DFB <byte sequence>   e.g. DFB 0,9,$67,$10,$89,$67
% DFB <binary number>     e.g. DFB %01111111
= DFW <word>       e.g. DFW JAB00
P. PREPARE labels will enter the address into the J-table.
| DFW <word>        e.g. DFW TAB00
P. PREPARE labels will enter the address into the T-table.
-

DFW <word>-1     e.g. DFW JAB00-1
P. PREPARE labels will enter the address into the J-Table.

_

DFW <word>-1     e.g. DFW TAB00-1
P. PREPARE labels will enter the address into the T-Table.

" ASC <string>        (ASCII code - normal and inverted)
\ ASC <string>        (ASCII code - last character inverted)
$ ASC <string>        (internal screen-code - normal and inverted)
* ORG *+ <number>          e.g. ORG *+ $6F
<

Enter symbol at address of a 'write-only' hardware register between $D000 and $D4FF.

( :Normal code. E.g. LDA #LABEL        (V.3.2)
where LABEL <= $FF and represents a constant or a zero page address.
. ASCII Listing (for viewing ASCI files.)          (V.3.2)

If no entry for <CHAR> is made, normal code will be assumed.

The characters "=" and "-" may also be entered inverted (e.g. <INV><=>) with the consequence that the position of the high and low bytes will be reversed.
The use of this possibility requires, however, that a corresponding code-change be made when the listing is assembled using an assembler program. As a reminder SOURCGEN will mark the lines in question with an inverted "-" or "=". An appropriate error message in ATMAS-II will take you to the line you want to correct.

Bytes marked with '"', '\' or '$', but not portrayable as characters in ATMAS-II, will be displayed as bytes using 'DFB'.
SOURCGEN will mark screen control characters with "[S]".

If no entry for <CHAR> is made, normal code will be assumed.

A value for <ADR2> can be entered when, after preparing labels (see P. PREPARE labels), there is a label (e.g. T2988) at <ADR1> and one or more labels at addresses immediately before or after <ADR1>.
All labels in the interval <ADR1> to <ADR2> will then be expressed in terms of the label at <ADR1>. (e.g. T2988-1, T2988+3, etc.).
The difference between ADR1 and ADR2 must not be greater than $80.

3. <ADR1> [<ADR2>]/<SYMBOL>[<CHAR>]

You can enter a symbol <SYMBOL> which will always appear in place of
<ADR1> in the listing. If you enter a symbol with more than 8 characters,
SOURCGEN will use the first 8 and, if you wish, display the complete
symbol as a comment. (See OUTPUT-MENU)

If no value is given for <CHAR> then normal code will be assumed.

4. <ADR1> [<ADR2>]/[<SYMBOL>];<COMMENT>[<CHAR>]

You can substitute a comment for <COMMENT> which will be shown, if you wish,
in the listing. (See Output Menu)

5a. <ADR1>/<BYTE>

This case can be explained best through an example. Suppose that at
the address 2800 we have the command LDA #$FE. Now if you enter
2801/2A, then the notation LDA #label will appear in the listing,
whereby label represents the address 2AFE.

5b. <ADR1>/<BYTE>:

This case can also be explained best though an example. Suppose that
at the address 2800 we have the command LDA #$FE. Now if you enter
2801/2A:, then the notation LDA #label:H will appear in the listing,
whereby label represents the address FE2A.

Please note that in 5a and 5b we have used the address (2801) of the
constant and not that of the opcode. You should always be sure, in this
slightly confusing case, to take a look at the listing to check what you
have just entered.