mirror of
https://github.com/fadden/6502bench.git
synced 2024-09-11 04:57:02 +00:00
The "smart" PLP handler tries to recover the flags from an earlier PHP. The non-smart version just marks all the flags as indeterminate. This doesn't work well on the 65816 in native mode, because having the M/X flags in an indeterminate state is rarely what you want. Code rarely uses PLP to reset the flags to a specific state, preferring explicit SEP/REP. The analyzer is more likely to get the correct answer by simply leaving the flags in their prior state. A test case has been added to 20052-branches-and-banks, which now has "smart PLP" disabled.
139 lines
2.7 KiB
ArmAsm
139 lines
2.7 KiB
ArmAsm
.setcpu "65816"
|
|
zero = $00
|
|
longsym = $123456
|
|
|
|
; .segment "SEG000"
|
|
.org $1000
|
|
.a8
|
|
.i8
|
|
clc
|
|
xce
|
|
sep #$30
|
|
jml L440000
|
|
|
|
lodat: .byte $00
|
|
.byte $01
|
|
.byte $02
|
|
|
|
; .segment "SEG001"
|
|
.org $440000
|
|
L440000: cmp L440000
|
|
L440004: lda L440000
|
|
lda a:L440000 & $ffff
|
|
lda zero
|
|
bmi L440004
|
|
.byte $62,$b2,$ff
|
|
.byte $d0,$b0
|
|
.byte $82,$a9,$ff
|
|
|
|
dat44: .word dat44 & $ffff
|
|
.faraddr dat44
|
|
|
|
; .segment "SEG002"
|
|
.org $44ffc0
|
|
L44FFC0: cmp L44FFC0
|
|
high44: beq @L44FFCB
|
|
.byte $30,$3c
|
|
.byte $82,$39,$00
|
|
|
|
@L44FFCB: jml @L2000
|
|
|
|
; .segment "SEG003"
|
|
.org $2000
|
|
@L2000: bit @L2000
|
|
pea dat44 & $ffff
|
|
pea dat44 >> 16
|
|
bne skip
|
|
jml [lodat]
|
|
|
|
skip: nop
|
|
jsr j2
|
|
j2: jsr j2+3
|
|
jsr j2-3
|
|
jsl longsym
|
|
jml bank54
|
|
|
|
; .segment "SEG004"
|
|
.org $543210
|
|
bank54: cmp bank54
|
|
bra L54321C
|
|
|
|
backchk: nop
|
|
nop
|
|
rts
|
|
|
|
backval: .faraddr backchk
|
|
|
|
L54321C: lda backchk
|
|
lda f:fwdchk
|
|
lda $543216
|
|
lda $54327d
|
|
lda backchk & $ffff +1
|
|
lda backchk & $ffff -1
|
|
lda fwdchk & $ffff +1
|
|
lda fwdval & $ffff +2
|
|
nop
|
|
jsr backchk & $ffff
|
|
jsr backchk & $ffff +1
|
|
jsr $3218
|
|
jsr fwdchk & $ffff
|
|
jsr fwdchk & $ffff +1
|
|
jsr $327f
|
|
nop
|
|
ldx #$00
|
|
jsr (backval & $ffff,x)
|
|
jsr (fwdval & $ffff,x)
|
|
jsr @L54326E & $ffff
|
|
jsr @L543271 & $ffff
|
|
jsr @L543268 & $ffff
|
|
jsr @L54326B & $ffff
|
|
jsr @L543274 & $ffff
|
|
jsr @L543277 & $ffff
|
|
bra L543280
|
|
|
|
@L543268: jmp (backval & $ffff,x)
|
|
|
|
@L54326B: jmp (fwdval & $ffff,x)
|
|
|
|
@L54326E: jmp (lodat)
|
|
|
|
@L543271: jmp (lodat)
|
|
|
|
@L543274: jml [lodat]
|
|
|
|
@L543277: jml [lodat]
|
|
|
|
fwdval: .faraddr fwdchk
|
|
|
|
fwdchk: nop
|
|
nop
|
|
rts
|
|
|
|
L543280: jsr skip
|
|
nop
|
|
rep #$30
|
|
.a16
|
|
.i16
|
|
php
|
|
lda #$0000
|
|
sep #$30
|
|
.a8
|
|
.i8
|
|
lda #$00
|
|
plp
|
|
lda #$ea
|
|
nop
|
|
sep #$30
|
|
php
|
|
lda #$00
|
|
rep #$30
|
|
.a16
|
|
.i16
|
|
lda #$0000
|
|
plp
|
|
lda #$eaea
|
|
rep #$30
|
|
nop
|
|
rtl
|
|
|