; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32

        org     $1000
        clc
        xce
        sep     #$ff        ;set all flags
        mx      %11
        jsr     one
        jsr     three_p     ;should land inside one
        jmp     nextthing

        org     $1100
one     bit     one
one_p   lda     #$11
        ldx     #$11
        ldy     #$11
        per     one_p
        bra     one_p

        org     $1100
two     bit     two
        lda     #$22
two_p   ldx     #$22
        ldy     #$22
        per     two_p
        jmp     two_p

        org     $1100
three   bit     three
        lda     #$33
        ldx     #$33
three_p ldy     #$33
        per     three_p
        bra     three_p


        org     $2000
nextthing
        bit     nextthing
        beq     :fwd-8          ;should just appear as hex since it's outside
        bra     :fwd            ;BRA across org segments

        org     $2020
:fwd    bit     :fwd
        beq     offend          ;branch off the end of the address area into dead space
        brl     endcheck        ; (which wouldn't be dead without the org)
        nop
offend

        org     $2080
endcheck
        bit     endcheck
        lda     offend-1        ;touch bytes at the ends, and one byte before/after
        jsr     offend-1
        lda     offend
        jsr     offend
        lda     endcheck-1
        jsr     endcheck-1
        lda     endcheck
        jsr     endcheck

        lda     $00
        beq     :midinst
        dfb     $ad             ;LDA abs
        org     $2100
:midinst dfb     $ea,$ea

        jmp     pastdata

        org     $2800
        dw      *
        ds      16              ;EDIT: put an org change in the middle
        org     $2820
        ds      16

        org     $3000
pastdata
        bit     pastdata
        lda     #$44
        ldx     #$44
        ldy     #$44
        brl     :fwd
        dfb     $00             ;put user label here or next inst
:datend dfb     $01

        org     $3100
        dfb     $02             ;data target should NOT get merged with previous user label
:fwd
        bit     :fwd
        lda     :datend-1
        lda     :datend
        lda     :datend+1
        lda     :datend+2
        lda     :fwd-1
        beq     :more

        dfb     $ea,$ea         ;EDIT: mark as inline data

        org     $3180
        dfb     $00,$01
:more   bit     :more

; xref edge case test: make sure adjustment shown is based on address
        lda     label1
        lda     label2          ;EDIT: set operand to sym=label1
        lda     label3          ;EDIT: set operand to sym=label1
        bra     label3
label1  nop
label2  nop
        org     $3200
label3  bit     label3

        dfb     $00,$01         ;EDIT: mark as inline data to test execution off end
