mirror of
https://github.com/fadden/6502bench.git
synced 2024-11-29 10:50:28 +00:00
facaa721de
The code was making an unwarranted assumption about how the flags were being set. For example, ORA #$00 can't know if the previous contents of the accumulator were nonzero, only that the instruction hasn't made them nonzero, but instead of marking the Z-flag "indeterminate" it was leaving the flag in its previous state. This produces incorrect results if the previous instruction didn't set its flags from the accumulator contents, e.g. it was an LDX. Test 1003-flags-and-branches has been updated to test these states.
286 lines
4.3 KiB
ArmAsm
286 lines
4.3 KiB
ArmAsm
.cpu "65816"
|
|
* = $1000
|
|
.as
|
|
.xs
|
|
clc
|
|
xce
|
|
sep #$ff
|
|
clv
|
|
cld
|
|
cli
|
|
clc
|
|
lda #$80
|
|
lda #$01
|
|
sed
|
|
sei
|
|
sec
|
|
lda #$ff
|
|
adc #$00
|
|
sep #$ff
|
|
rep #$80
|
|
rep #$40
|
|
rep #$20
|
|
.al
|
|
rep #$10
|
|
.xl
|
|
rep #$08
|
|
rep #$04
|
|
rep #$02
|
|
rep #$01
|
|
sep #$00
|
|
sep #$ff
|
|
.as
|
|
.xs
|
|
rep #$00
|
|
rep #$ff
|
|
.al
|
|
.xl
|
|
lda #$feed
|
|
sec
|
|
xce
|
|
.as
|
|
.xs
|
|
lda #$ff
|
|
rep #$30
|
|
lda #$ff
|
|
clc
|
|
xce
|
|
lda #$ff
|
|
rep #$20
|
|
.al
|
|
sep #$10
|
|
lda #$0000
|
|
ldx #$01
|
|
ldy #$02
|
|
sep #$20
|
|
.as
|
|
rep #$10
|
|
.xl
|
|
lda #$01
|
|
ldx #$0000
|
|
ldy #$0000
|
|
sep #$30
|
|
.xs
|
|
lda #$00
|
|
pha
|
|
plp
|
|
rep #$80
|
|
bpl L105F
|
|
|
|
.byte $00
|
|
.byte $00
|
|
|
|
L105F sep #$80
|
|
bpl _L1065
|
|
bmi _L1067
|
|
|
|
_L1065 .byte $00
|
|
.byte $00
|
|
|
|
_L1067 rep #$40
|
|
bvc _L106D
|
|
|
|
.byte $00
|
|
.byte $00
|
|
|
|
_L106D sep #$40
|
|
bvs _L1073
|
|
|
|
.byte $00
|
|
.byte $00
|
|
|
|
_L1073 rep #$01
|
|
bcc _L1079
|
|
|
|
.byte $00
|
|
.byte $00
|
|
|
|
_L1079 sep #$01
|
|
bcs _L107F
|
|
|
|
.byte $00
|
|
.byte $00
|
|
|
|
_L107F rep #$02
|
|
bne _L1085
|
|
|
|
.byte $00
|
|
.byte $00
|
|
|
|
_L1085 sep #$02
|
|
beq _L108B
|
|
|
|
.byte $00
|
|
.byte $00
|
|
|
|
_L108B sep #$ff
|
|
lda #$01
|
|
bne _L1093
|
|
|
|
.byte $00
|
|
.byte $db
|
|
|
|
_L1093 lda #$00
|
|
beq _L1099
|
|
|
|
.byte $00
|
|
.byte $db
|
|
|
|
_L1099 bpl _L109D
|
|
|
|
.byte $00
|
|
.byte $db
|
|
|
|
_L109D lda #$80
|
|
bmi _L10A3
|
|
|
|
.byte $00
|
|
.byte $db
|
|
|
|
_L10A3 lda #$ff
|
|
and #$00
|
|
beq _L10AB
|
|
|
|
.byte $00
|
|
.byte $db
|
|
|
|
_L10AB lda #$00
|
|
ldx #$80
|
|
and #$ff
|
|
beq _L10B5
|
|
bne _L10B5
|
|
|
|
_L10B5 lda #$ff
|
|
ldx #$00
|
|
and #$7f
|
|
beq _L10BF
|
|
bne _L10BF
|
|
|
|
_L10BF bpl _L10C3
|
|
|
|
.byte $00
|
|
.byte $db
|
|
|
|
_L10C3 lda #$ff
|
|
and #$80
|
|
bmi _L10CB
|
|
brk
|
|
|
|
.byte $db
|
|
|
|
_L10CB lda #$00
|
|
ldx #$80
|
|
bne _L10D3
|
|
|
|
.byte $00
|
|
.byte $db
|
|
|
|
_L10D3 ora #$00
|
|
beq _L10D9
|
|
bne _L10D9
|
|
|
|
_L10D9 ora #$01
|
|
bne _L10DF
|
|
|
|
.byte $00
|
|
.byte $db
|
|
|
|
_L10DF lda #$00
|
|
ldx #$80
|
|
bmi _L10E7
|
|
|
|
.byte $00
|
|
.byte $db
|
|
|
|
_L10E7 ora #$7f
|
|
bpl _L10EF
|
|
bmi _L10EF
|
|
|
|
.byte $00
|
|
.byte $db
|
|
|
|
_L10EF ora #$80
|
|
bmi _L10F5
|
|
|
|
.byte $00
|
|
.byte $db
|
|
|
|
_L10F5 lda _L10F5
|
|
sec
|
|
ror a
|
|
bmi _L10FE
|
|
|
|
.byte $00
|
|
.byte $dc
|
|
|
|
_L10FE clc
|
|
ror a
|
|
bpl _L1104
|
|
|
|
.byte $00
|
|
.byte $dc
|
|
|
|
_L1104 lda #$00
|
|
sec
|
|
rol a
|
|
bne _L110C
|
|
|
|
.byte $00
|
|
.byte $dc
|
|
|
|
_L110C lda #$ff
|
|
lsr a
|
|
bpl _L1113
|
|
|
|
.byte $00
|
|
.byte $dd
|
|
|
|
_L1113 clc
|
|
php
|
|
sec
|
|
plp
|
|
bcc _L111B
|
|
|
|
.byte $00
|
|
.byte $00
|
|
|
|
_L111B sec
|
|
bcs _L111F
|
|
|
|
_L111E clc
|
|
_L111F lda $33
|
|
beq _L111E
|
|
bcs _L1127
|
|
lda $44
|
|
_L1127 nop
|
|
rep #$20
|
|
.al
|
|
sep #$10
|
|
jsr _L1143
|
|
rep #$30
|
|
.xl
|
|
jsr _L1149
|
|
sep #$30
|
|
.as
|
|
.xs
|
|
jsr _L1149
|
|
rep #$20
|
|
.al
|
|
sep #$10
|
|
jsr _L1143
|
|
sep #$30
|
|
.as
|
|
rts
|
|
|
|
.al
|
|
_L1143 lda #$1234
|
|
ldx #$ff
|
|
rts
|
|
|
|
.as
|
|
_L1149 lda #$ff
|
|
ldx #$ee
|
|
ldy #$dd
|
|
rts
|
|
|