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

        org     $1000

load11  lda     #$11                    ;EDIT: set label=load11
load22  ldx     #$22
load33  ldy     #$33                    ;EDIT: set label=load33
load44  lda     #$44
predat  bne     skipdat                 ;EDIT: set label=predat

dat0    dw      $0123
dat1    dw      $4567                   ;EDIT: set label=dat1
dat2    dw      $89ab
dat3    dw      $cdef
dat4    dw      $0011
dat5    dw      $2233
        dfb     $80
        asc     'The quick brown fox'
        dfb     $80
        dw      skipdat                 ;EDIT: format these as addresses
        dw      skipdat-1
        dw      skipdat+1
fill0   ds      4                       ;EDIT: set label=fill0
fill1   ds      4
fill2   ds      4
fill3   ds      4
postfill dfb    $80

skipdat                                 ;EDIT: set label=skipdat
        lda     dat0                    ;this should get mapped to predat+2
        lda     postfill

        asl     dat1                    ;these should coalesce to dat1
        rol     dat2
        ror     dat3                    ;these should be auto-labeled
        and     dat4
        ora     dat5

        lda     fill0                   ;EDIT: set all labels to fill0
        sta     fill1                   ; and confirm that auto-labels vanish
        lda     fill2                   ; and we get a single 16-byte .fill
        sta     fill3

        jsr     load22                  ;should get auto label
        lda     load44                  ;should get auto label

; PEA/PER may want to push addr-1; make sure that works
; (note: 65816-specific code replaced, PEA/PER now BIT/ORA)
caddr
        bit     caddr-1                 ;should base off caddr
        ora     caddr-1                 ;should base off caddr
        lda     caddr+1                 ;should base off caddr
        lda     caddr+2                 ;should base off caddr

; self-referential, self-modifying code (edge case for xrefs)
        lda     #$ea
srop1   sta     srop1
srop2   sta     srop2+1
srop3   sta     srop3+2                 ;EDIT: set operand to non-existent symbol
        jmp     skipdat1

        dfb     $80
dat81   dfb     $81                     ;EDIT: set label dat81

        org     $2000
dat82   dfb     $82
        dfb     $83

skipdat1
        nop
        nop
        lda     dat81
        lda     dat82                   ;this should NOT use dat81

;
; Test the precise extent to which we associate a label with nearby elements.
;
        jmp     skipmore

        dfb     $7c
        dfb     $7d
        dfb     $7e
        dfb     $7f
nearby  dfb     $80                     ;EDIT: label this
        dfb     $81
        dfb     $82
        dfb     $83
        dfb     $84
        dfb     $85
        dfb     $86

skipmore
        lda     nearby-4
        lda     nearby-3
        lda     nearby-2
        lda     nearby-1
        lda     nearby
        lda     nearby+1
        lda     nearby+2
        lda     nearby+3
        lda     nearby+4
        lda     nearby+5
        lda     nearby+6
        rts
