qasm/testdata/2020-cycle-counts-65816.S

81 lines
1.9 KiB
ArmAsm

; Copyright 2019 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
; Exercise cycle counting. We use 65816 to test the behavior with variable-
; width registers. This means we're not testing the 65C02 D-flag behavior
; or some other non-65816 quirks. If that becomes an issue we'll need to
; create additional tests.
;
; Very little editing required. Just set the initial ORG and add
; "__ENABLE_CYCLE_COUNTS" to the list of project symbols.
org $10f0
start sec
xce
mx %11
bra cont ;crosses page boundary
ds 20
cont bra near
near
lda #$00
beq next ;always (3 cycles)
brk $00
next bne next ;never (2 cycles)
lda $1234
beq maybe ;sometimes (2+ cycles)
brk $01 ;(7 cycles)
maybe lda $22,S
trb $02
asl $03,x
clc
xce
rep #$30
mx %00
lda #$11
ldy #$22
trb $04 ;should be +2 cycles
asl $05,x ;should be +2 cycles
ldx $1235
beq maybe2
brk $02 ;(8 cycles)
maybe2 lda $33,S
beq maybe3
bra start ;crosses page boundary, no + when E=0
maybe3
rep #$20
sep #$10
sta $10
stx $11
sty $12
rep #$10
sep #$20
sta $11
stx $12
sty $13
rep #$30
; On the 65816, the setting of the decimal flag should NOT have any effect.
lda $1234
adc #$66
adc $1235
sed
adc #$77
adc $1236
sec
xce
sbc #$88
sbc $1237
cld
sbc #$99
sbc $1238
rts