Skip to main content

FLEX ASM09 Syntax Reference

Target System: FLEX Operating System (6809) CPU Support: Motorola 6809, 6800, 6801 Source: ASM09 6809 Optimizing Assembler Version 3.2 Purpose: Complete syntax reference for xasm++ FLEX compatibility


Overview​

FLEX ASM09 is the assembler for the FLEX Disk Operating System (FLEX DOS) developed by Technical Systems Consultants (TSC). It's a sophisticated 2-pass assembler with macro support, conditional assembly, and listing control.

Key Features​

  • 2-pass assembly with symbol resolution
  • Macro preprocessor with parameters
  • Conditional assembly directives
  • Listing control with pagination and titles
  • Library support for modular development
  • Expression evaluation with full operator set
  • Backward compatible with 6800/6801 code

Differences from EDTASM​

FeatureFLEX ASMEDTASM
Macros✅ Full support❌ No macros
Conditional Assembly✅ IF/ENDIF❌ Limited
Listing Control✅ NAM, TTL, PAG, SPC❌ Basic
Libraries✅ LIB directive❌ No libraries
Comments* or +; or *

Source Line Format​

FLEX ASM uses a multi-field format:

[LABEL] [OPERATION] [OPERAND] [;COMMENT]

Label Field​

  • Position: Column 1
  • Format: 1-8 alphanumeric characters, starting with letter
  • Terminator: Space or tab (no colon needed)
  • Special: * or + in column 1 indicates comment line
START    LDA    #$42      ; Label in column 1
LOOP INX ; Another label
STA BUFFER,X ; No label

Operation Field​

Mnemonics, directives, or macro calls:

  • Mnemonics: 6809 instruction set
  • Directives: ORG, EQU, FCB, etc.
  • Macros: User-defined macro names

Operand Field​

Expressions, addresses, or directive parameters.

Comment Field​

  • Preceded by semicolon ;
  • Continues to end of line
  • Also: Entire line comments start with * or + in column 1

Directives​

Program Structure​

ORG - Set Origin​

ORG    $8000        ; Set assembly address

Sets the current assembly address.

END - End of Source​

END    START        ; End with entry point
END ; End without entry point

Marks end of source file. Optional parameter specifies program start address.

SETDP - Set Direct Page​

SETDP  $00          ; Direct page at $0000
SETDP $10 ; Direct page at $1000

Informs assembler of direct page register value for optimization.


Symbol Definition​

EQU - Equate (Constant)​

SCREEN  EQU   $0400      ; Define constant
ROWS EQU 24 ; Numeric constant

Defines a constant symbol (cannot be redefined).

SET - Set Variable​

COUNTER SET   0          ; Define variable
COUNTER SET COUNTER+1 ; Can be redefined

Defines a variable symbol (can be reassigned).


Data Definition​

FCB - Form Constant Byte​

        FCB   $01,$02,$03     ; Bytes
FCB 'A','B','C' ; Characters
FCB <ADDR ; Low byte
FCB >ADDR ; High byte

Defines byte-sized data.

FDB - Form Double Byte (Word)​

        FDB   $1234           ; 16-bit word
FDB ADDRESS ; Address value

Defines 16-bit word data (big-endian).

FCC - Form Constant Character​

        FCC   /Hello World/   ; Slash delimiters
FCC 'String' ; Quote delimiters
FCC "String" ; Double quote delimiters

Defines character string data. Delimiter is first non-space character after FCC.

RMB - Reserve Memory Bytes​

BUFFER  RMB   256           ; Reserve 256 bytes
WORK RMB 16 ; Reserve 16 bytes

Reserves memory space without initialization.


Listing Control​

NAM or TTL - Name/Title​

        NAM   Program Title
TTL Module Name

Sets program title for listing header.

STTL - Subtitle​

        STTL  Section: Main Loop

Sets subtitle for current page.

PAG - Page Break​

        PAG                   ; Force new page

Forces new page in listing.

SPC - Space Lines​

        SPC   2               ; Insert 2 blank lines
SPC 5 ; Insert 5 blank lines

Inserts blank lines in listing.


Macro Directives​

MACRO - Begin Macro Definition​

MOVB    MACRO   SRC,DEST     ; Define macro with parameters
LDA SRC
STA DEST
ENDM

Begins macro definition. Parameters are positional.

ENDM - End Macro​

        ENDM                  ; End macro definition

Terminates macro definition.

Macro Invocation​

        MOVB    $80,$90      ; Call macro

Invokes macro with actual parameters.


Conditional Assembly​

IFC - If Condition​

        IFC     DEBUG        ; If DEBUG defined
JSR TRACE
ENDC

Conditional assembly based on symbol definition.

ENDC - End Conditional​

        ENDC                 ; End conditional block

Terminates conditional assembly block.


Advanced Directives​

LIB - Include Library​

        LIB     STDLIB       ; Include library file

Includes external source file during assembly.

REG - Register List​

        REG     A,B,X,Y      ; Define register list for PSHS/PULS

Defines register lists for stack operations.

OPT - Assembler Options​

        OPT     C,L,P        ; Set options

Controls assembler behavior:

  • C - Enable cycle counting
  • L - Generate listing
  • P - Enable pagination

ERR - Generate Error​

        ERR     Invalid configuration

Forces assembler error with custom message.

RPT - Repeat Block​

        RPT     10           ; Repeat 10 times
NOP
ENDR

Repeats following code block N times.


Expressions​

Operators​

FLEX ASM supports standard operators with C-like precedence:

OperatorDescriptionPrecedence
+AdditionLow
-SubtractionLow
*MultiplicationMedium
/DivisionMedium
%ModuloMedium
&Bitwise ANDLow
|Bitwise ORLow
^Bitwise XORLow
<<Shift leftMedium
>>Shift rightMedium
<Low byteHigh
>High byteHigh

Expression Examples​

        LDA     #$FF&$0F      ; Bitwise AND
LDX #TABLE+16 ; Addition
LDA #>ADDRESS ; High byte
LDB #<ADDRESS ; Low byte

Number Formats​

FLEX ASM supports multiple number formats:

FormatPrefix/SuffixExample
DecimalNone123
Hexadecimal$ prefix$1A2F
Binary% prefix%10110101
Octal@ prefix@377
CharacterSingle quotes'A'

Addressing Modes (6809)​

FLEX ASM uses standard Motorola syntax:

; Inherent
NOP

; Immediate
LDA #$42
LDX #$1234

; Direct (Zero Page)
LDA $80
LDA <ADDRESS ; Force direct

; Extended (Absolute)
LDA $1234
LDA >ADDRESS ; Force extended

; Indexed
LDA ,X ; No offset
LDA 5,X ; 5-bit offset
LDA $80,X ; 8-bit offset
LDA $1234,X ; 16-bit offset
LDA A,X ; Accumulator offset
LDA D,X ; D accumulator offset
LDA [,X] ; Indirect
LDA [,X++] ; Auto-increment

; Relative (Branches)
BNE LOOP
LBRA FARAWAY ; Long branch

Comment Styles​

FLEX ASM supports multiple comment styles:

* Full line comment (column 1)
+ Full line comment with page break control

LDA #$42 ; End of line comment

; Standalone comment line (any column)

Comment Types:

  • * in column 1 - Regular comment, page break if <14 lines remain
  • + in column 1 - Forces new page before comment
  • ; - End-of-line comment or standalone comment

Macro Features​

Parameter Substitution​

MOVE    MACRO   SRC,DEST
LDA SRC ; Parameter 1
STA DEST ; Parameter 2
ENDM

MOVE $80,$90 ; Invocation

Local Labels in Macros​

WAIT    MACRO   COUNT
.LOOP DEC COUNT
BNE .LOOP
ENDM

Local labels (starting with .) are unique per macro invocation.


Example Programs​

Simple Program​

        NAM     Hello World
TTL FLEX ASM Example

SCREEN EQU $0400

ORG $8000

START LDX #SCREEN
LDY #MESSAGE
LOOP LDA ,Y+
BEQ DONE
STA ,X+
BRA LOOP

DONE RTS

MESSAGE FCC /HELLO WORLD/
FCB 0

END START

With Macros​

        NAM     Macro Example

; Define macro
PUSH2 MACRO R1,R2
PSHS R1,R2
ENDM

POP2 MACRO R1,R2
PULS R1,R2
ENDM

ORG $8000

START LDX #$1234
LDY #$5678

PUSH2 X,Y ; Save registers
JSR SUBRTN
POP2 X,Y ; Restore registers

RTS

SUBRTN ; Subroutine code
RTS

END START

Compatibility Notes​

FLEX vs EDTASM​

Compatible:

  • Basic directives (ORG, EQU, FCB, FDB, FCC, RMB, END)
  • 6809 instruction mnemonics
  • Expression syntax

FLEX Additions:

  • Macro support (MACRO/ENDM)
  • Conditional assembly (IFC/ENDC)
  • Library includes (LIB)
  • Advanced listing control
  • Repeat blocks (RPT/ENDR)

Migration:

  • EDTASM programs generally work in FLEX ASM
  • FLEX programs may use features not in EDTASM

References​

  • Original Manual: ASM09 6809 Optimizing Assembler Version 3.2
  • Publisher: Southwest Technical Products Corporation
  • Copyright: 1980 Southwest Technical Products Corporation
  • Availability: docs/reference/flex/ASM09-6809-assembler.pdf

Implementation Notes​

For xasm++ developers implementing FLEX ASM support:

Code Reuse Opportunities​

  1. Extend MotorolaBaseSyntax (~60% code reuse)

    • Basic directive handling (ORG, EQU, FCB, etc.)
    • Expression evaluation
    • Addressing mode parsing
  2. New Components Needed

    • Macro preprocessor
    • Conditional assembly handler
    • Listing control system
    • Library inclusion mechanism

Estimated Implementation​

  • Phase 1: Basic directives (10-15 hours)
  • Phase 2: Macro processor (15-20 hours)
  • Phase 3: Conditional assembly (8-10 hours)
  • Phase 4: Advanced directives (10-15 hours)
  • Total: 45-60 hours

Testing Strategy​

  • Unit tests for each directive
  • Macro expansion tests
  • Conditional assembly tests
  • Integration with existing 6809 CPU
  • Real FLEX source code compatibility