mirror of
https://github.com/fadden/6502bench.git
synced 2024-11-26 06:49:19 +00:00
Add 2020-cycle-counts
A quick test to confirm that the cycle counting mechanism is generating the correct results.
This commit is contained in:
parent
44c140a8d0
commit
42e6e6df1e
@ -242,7 +242,8 @@ namespace Asm65 {
|
|||||||
/// <returns>Cycle count.</returns>
|
/// <returns>Cycle count.</returns>
|
||||||
public int GetCycles(int opNum, StatusFlags flags, OpDef.BranchTaken branchTaken,
|
public int GetCycles(int opNum, StatusFlags flags, OpDef.BranchTaken branchTaken,
|
||||||
bool branchCrossesPage) {
|
bool branchCrossesPage) {
|
||||||
// The irrelevant modifiers have already been stripped out.
|
// The irrelevant modifiers have already been stripped out, e.g. OneIfD1 only
|
||||||
|
// affects the 65C02.
|
||||||
OpDef.CycleMod mods = mCycleMods[opNum];
|
OpDef.CycleMod mods = mCycleMods[opNum];
|
||||||
int cycles = mCycleCounts[opNum];
|
int cycles = mCycleCounts[opNum];
|
||||||
|
|
||||||
|
BIN
SourceGen/SGTestData/2020-cycle-counts
Normal file
BIN
SourceGen/SGTestData/2020-cycle-counts
Normal file
Binary file not shown.
27
SourceGen/SGTestData/2020-cycle-counts.dis65
Normal file
27
SourceGen/SGTestData/2020-cycle-counts.dis65
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
### 6502bench SourceGen dis65 v1.0 ###
|
||||||
|
{
|
||||||
|
"_ContentVersion":2,"FileDataLength":126,"FileDataCrc32":1805483931,"ProjectProps":{
|
||||||
|
"CpuName":"65816","IncludeUndocumentedInstr":false,"EntryFlags":32702671,"AutoLabelStyle":"Simple","AnalysisParams":{
|
||||||
|
"AnalyzeUncategorizedData":true,"DefaultTextScanMode":"LowHighAscii","MinCharsForString":4,"SeekNearbyTargets":true,"SmartPlpHandling":true},
|
||||||
|
"PlatformSymbolFileIdentifiers":[],"ExtensionScriptFileIdentifiers":[],"ProjectSyms":{
|
||||||
|
"__ENABLE_CYCLE_COUNTS":{
|
||||||
|
"DataDescriptor":{
|
||||||
|
"Length":1,"Format":"NumericLE","SubFormat":"Decimal","SymbolRef":null},
|
||||||
|
"Comment":"","Label":"__ENABLE_CYCLE_COUNTS","Value":1,"Source":"Project","Type":"Constant"}}},
|
||||||
|
"AddressMap":[{
|
||||||
|
"Offset":0,"Addr":4336}],"TypeHints":[{
|
||||||
|
"Low":0,"High":0,"Hint":"Code"}],"StatusFlagOverrides":{
|
||||||
|
},
|
||||||
|
"Comments":{
|
||||||
|
},
|
||||||
|
"LongComments":{
|
||||||
|
"-2147483647":{
|
||||||
|
"Text":"6502bench SourceGen v1.3.0-dev6","BoxMode":false,"MaxWidth":80,"BackgroundColor":0}},
|
||||||
|
"Notes":{
|
||||||
|
},
|
||||||
|
"UserLabels":{
|
||||||
|
},
|
||||||
|
"OperandFormats":{
|
||||||
|
},
|
||||||
|
"LvTables":{
|
||||||
|
}}
|
80
SourceGen/SGTestData/Expected/2020-cycle-counts_64tass.S
Normal file
80
SourceGen/SGTestData/Expected/2020-cycle-counts_64tass.S
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
;6502bench SourceGen v1.3.0-dev6
|
||||||
|
.cpu "65816"
|
||||||
|
* = $10f0
|
||||||
|
.as
|
||||||
|
.xs
|
||||||
|
L10F0 sec ;2
|
||||||
|
xce ;2
|
||||||
|
bra L1108 ;4
|
||||||
|
|
||||||
|
.fill 20,$00
|
||||||
|
|
||||||
|
L1108 bra L110A ;3
|
||||||
|
|
||||||
|
L110A lda #$00 ;2
|
||||||
|
beq L1110 ;3
|
||||||
|
|
||||||
|
.byte $00
|
||||||
|
.byte $00
|
||||||
|
|
||||||
|
L1110 bne L1110 ;2
|
||||||
|
lda $1234 ;4
|
||||||
|
beq L1119 ;2+
|
||||||
|
brk ;7
|
||||||
|
|
||||||
|
.byte $01
|
||||||
|
|
||||||
|
L1119 lda $22,s ;4
|
||||||
|
trb $02 ;5+
|
||||||
|
asl $03,x ;6+
|
||||||
|
clc ;2
|
||||||
|
xce ;2
|
||||||
|
rep #$30 ;3
|
||||||
|
.al
|
||||||
|
.xl
|
||||||
|
lda #$0011 ;3
|
||||||
|
ldy #$0022 ;3
|
||||||
|
trb $04 ;7+
|
||||||
|
asl $05,x ;8+
|
||||||
|
ldx $1235 ;5
|
||||||
|
beq L1134 ;2+
|
||||||
|
brk ;8
|
||||||
|
|
||||||
|
.byte $02
|
||||||
|
|
||||||
|
L1134 lda $33,s ;5
|
||||||
|
beq L113A ;2+
|
||||||
|
bra L10F0 ;3
|
||||||
|
|
||||||
|
L113A rep #$20 ;3
|
||||||
|
sep #$10 ;3
|
||||||
|
.xs
|
||||||
|
sta $10 ;4+
|
||||||
|
stx $11 ;3+
|
||||||
|
sty $12 ;3+
|
||||||
|
rep #$10 ;3
|
||||||
|
.xl
|
||||||
|
sep #$20 ;3
|
||||||
|
.as
|
||||||
|
sta $11 ;3+
|
||||||
|
stx $12 ;4+
|
||||||
|
sty $13 ;4+
|
||||||
|
rep #$30 ;3
|
||||||
|
.al
|
||||||
|
lda $1234 ;5
|
||||||
|
adc #$0066 ;3
|
||||||
|
adc $1235 ;5
|
||||||
|
sed ;2
|
||||||
|
adc #$0077 ;3
|
||||||
|
adc $1236 ;5
|
||||||
|
sec ;2
|
||||||
|
xce ;2
|
||||||
|
.as
|
||||||
|
.xs
|
||||||
|
sbc #$88 ;2
|
||||||
|
sbc $1237 ;4
|
||||||
|
cld ;2
|
||||||
|
sbc #$99 ;2
|
||||||
|
sbc $1238 ;4
|
||||||
|
rts ;6
|
||||||
|
|
75
SourceGen/SGTestData/Expected/2020-cycle-counts_Merlin32.S
Normal file
75
SourceGen/SGTestData/Expected/2020-cycle-counts_Merlin32.S
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
;6502bench SourceGen v1.3.0-dev6
|
||||||
|
org $10f0
|
||||||
|
L10F0 sec ;2
|
||||||
|
xce ;2
|
||||||
|
bra L1108 ;4
|
||||||
|
|
||||||
|
ds 20,$00
|
||||||
|
|
||||||
|
L1108 bra L110A ;3
|
||||||
|
|
||||||
|
L110A lda #$00 ;2
|
||||||
|
beq L1110 ;3
|
||||||
|
|
||||||
|
dfb $00
|
||||||
|
dfb $00
|
||||||
|
|
||||||
|
L1110 bne L1110 ;2
|
||||||
|
lda $1234 ;4
|
||||||
|
beq L1119 ;2+
|
||||||
|
brk ;7
|
||||||
|
|
||||||
|
dfb $01
|
||||||
|
|
||||||
|
L1119 lda $22,S ;4
|
||||||
|
trb $02 ;5+
|
||||||
|
asl $03,x ;6+
|
||||||
|
clc ;2
|
||||||
|
xce ;2
|
||||||
|
rep #$30 ;3
|
||||||
|
mx %00
|
||||||
|
lda #$0011 ;3
|
||||||
|
ldy #$0022 ;3
|
||||||
|
trb $04 ;7+
|
||||||
|
asl $05,x ;8+
|
||||||
|
ldx $1235 ;5
|
||||||
|
beq L1134 ;2+
|
||||||
|
brk ;8
|
||||||
|
|
||||||
|
dfb $02
|
||||||
|
|
||||||
|
L1134 lda $33,S ;5
|
||||||
|
beq L113A ;2+
|
||||||
|
bra L10F0 ;3
|
||||||
|
|
||||||
|
L113A rep #$20 ;3
|
||||||
|
sep #$10 ;3
|
||||||
|
mx %01
|
||||||
|
sta $10 ;4+
|
||||||
|
stx $11 ;3+
|
||||||
|
sty $12 ;3+
|
||||||
|
rep #$10 ;3
|
||||||
|
mx %00
|
||||||
|
sep #$20 ;3
|
||||||
|
mx %10
|
||||||
|
sta $11 ;3+
|
||||||
|
stx $12 ;4+
|
||||||
|
sty $13 ;4+
|
||||||
|
rep #$30 ;3
|
||||||
|
mx %00
|
||||||
|
lda $1234 ;5
|
||||||
|
adc #$0066 ;3
|
||||||
|
adc $1235 ;5
|
||||||
|
sed ;2
|
||||||
|
adc #$0077 ;3
|
||||||
|
adc $1236 ;5
|
||||||
|
sec ;2
|
||||||
|
xce ;2
|
||||||
|
mx %11
|
||||||
|
sbc #$88 ;2
|
||||||
|
sbc $1237 ;4
|
||||||
|
cld ;2
|
||||||
|
sbc #$99 ;2
|
||||||
|
sbc $1238 ;4
|
||||||
|
rts ;6
|
||||||
|
|
80
SourceGen/SGTestData/Expected/2020-cycle-counts_acme.S
Normal file
80
SourceGen/SGTestData/Expected/2020-cycle-counts_acme.S
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
;6502bench SourceGen v1.3.0-dev6
|
||||||
|
!cpu 65816
|
||||||
|
* = $10f0
|
||||||
|
!as
|
||||||
|
!rs
|
||||||
|
L10F0 sec ;2
|
||||||
|
xce ;2
|
||||||
|
bra L1108 ;4
|
||||||
|
|
||||||
|
!fill 20,$00
|
||||||
|
|
||||||
|
L1108 bra L110A ;3
|
||||||
|
|
||||||
|
L110A lda #$00 ;2
|
||||||
|
beq L1110 ;3
|
||||||
|
|
||||||
|
!byte $00
|
||||||
|
!byte $00
|
||||||
|
|
||||||
|
L1110 bne L1110 ;2
|
||||||
|
lda $1234 ;4
|
||||||
|
beq L1119 ;2+
|
||||||
|
brk ;7
|
||||||
|
|
||||||
|
!byte $01
|
||||||
|
|
||||||
|
L1119 lda $22,S ;4
|
||||||
|
trb $02 ;5+
|
||||||
|
asl $03,x ;6+
|
||||||
|
clc ;2
|
||||||
|
xce ;2
|
||||||
|
rep #$30 ;3
|
||||||
|
!al
|
||||||
|
!rl
|
||||||
|
lda #$0011 ;3
|
||||||
|
ldy #$0022 ;3
|
||||||
|
trb $04 ;7+
|
||||||
|
asl $05,x ;8+
|
||||||
|
ldx $1235 ;5
|
||||||
|
beq L1134 ;2+
|
||||||
|
brk ;8
|
||||||
|
|
||||||
|
!byte $02
|
||||||
|
|
||||||
|
L1134 lda $33,S ;5
|
||||||
|
beq L113A ;2+
|
||||||
|
bra L10F0 ;3
|
||||||
|
|
||||||
|
L113A rep #$20 ;3
|
||||||
|
sep #$10 ;3
|
||||||
|
!rs
|
||||||
|
sta $10 ;4+
|
||||||
|
stx $11 ;3+
|
||||||
|
sty $12 ;3+
|
||||||
|
rep #$10 ;3
|
||||||
|
!rl
|
||||||
|
sep #$20 ;3
|
||||||
|
!as
|
||||||
|
sta $11 ;3+
|
||||||
|
stx $12 ;4+
|
||||||
|
sty $13 ;4+
|
||||||
|
rep #$30 ;3
|
||||||
|
!al
|
||||||
|
lda $1234 ;5
|
||||||
|
adc #$0066 ;3
|
||||||
|
adc $1235 ;5
|
||||||
|
sed ;2
|
||||||
|
adc #$0077 ;3
|
||||||
|
adc $1236 ;5
|
||||||
|
sec ;2
|
||||||
|
xce ;2
|
||||||
|
!as
|
||||||
|
!rs
|
||||||
|
sbc #$88 ;2
|
||||||
|
sbc $1237 ;4
|
||||||
|
cld ;2
|
||||||
|
sbc #$99 ;2
|
||||||
|
sbc $1238 ;4
|
||||||
|
rts ;6
|
||||||
|
|
81
SourceGen/SGTestData/Expected/2020-cycle-counts_cc65.S
Normal file
81
SourceGen/SGTestData/Expected/2020-cycle-counts_cc65.S
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
;6502bench SourceGen v1.3.0-dev6
|
||||||
|
.setcpu "65816"
|
||||||
|
; .segment "SEG000"
|
||||||
|
.org $10f0
|
||||||
|
.a8
|
||||||
|
.i8
|
||||||
|
L10F0: sec ;2
|
||||||
|
xce ;2
|
||||||
|
bra L1108 ;4
|
||||||
|
|
||||||
|
.res 20,$00
|
||||||
|
|
||||||
|
L1108: bra L110A ;3
|
||||||
|
|
||||||
|
L110A: lda #$00 ;2
|
||||||
|
beq L1110 ;3
|
||||||
|
|
||||||
|
.byte $00
|
||||||
|
.byte $00
|
||||||
|
|
||||||
|
L1110: bne L1110 ;2
|
||||||
|
lda $1234 ;4
|
||||||
|
beq L1119 ;2+
|
||||||
|
brk ;7
|
||||||
|
|
||||||
|
.byte $01
|
||||||
|
|
||||||
|
L1119: lda $22,S ;4
|
||||||
|
trb $02 ;5+
|
||||||
|
asl $03,x ;6+
|
||||||
|
clc ;2
|
||||||
|
xce ;2
|
||||||
|
rep #$30 ;3
|
||||||
|
.a16
|
||||||
|
.i16
|
||||||
|
lda #$0011 ;3
|
||||||
|
ldy #$0022 ;3
|
||||||
|
trb $04 ;7+
|
||||||
|
asl $05,x ;8+
|
||||||
|
ldx $1235 ;5
|
||||||
|
beq L1134 ;2+
|
||||||
|
brk ;8
|
||||||
|
|
||||||
|
.byte $02
|
||||||
|
|
||||||
|
L1134: lda $33,S ;5
|
||||||
|
beq L113A ;2+
|
||||||
|
bra L10F0 ;3
|
||||||
|
|
||||||
|
L113A: rep #$20 ;3
|
||||||
|
sep #$10 ;3
|
||||||
|
.i8
|
||||||
|
sta $10 ;4+
|
||||||
|
stx $11 ;3+
|
||||||
|
sty $12 ;3+
|
||||||
|
rep #$10 ;3
|
||||||
|
.i16
|
||||||
|
sep #$20 ;3
|
||||||
|
.a8
|
||||||
|
sta $11 ;3+
|
||||||
|
stx $12 ;4+
|
||||||
|
sty $13 ;4+
|
||||||
|
rep #$30 ;3
|
||||||
|
.a16
|
||||||
|
lda $1234 ;5
|
||||||
|
adc #$0066 ;3
|
||||||
|
adc $1235 ;5
|
||||||
|
sed ;2
|
||||||
|
adc #$0077 ;3
|
||||||
|
adc $1236 ;5
|
||||||
|
sec ;2
|
||||||
|
xce ;2
|
||||||
|
.a8
|
||||||
|
.i8
|
||||||
|
sbc #$88 ;2
|
||||||
|
sbc $1237 ;4
|
||||||
|
cld ;2
|
||||||
|
sbc #$99 ;2
|
||||||
|
sbc $1238 ;4
|
||||||
|
rts ;6
|
||||||
|
|
11
SourceGen/SGTestData/Expected/2020-cycle-counts_cc65.cfg
Normal file
11
SourceGen/SGTestData/Expected/2020-cycle-counts_cc65.cfg
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# 6502bench SourceGen generated linker script for 2020-cycle-counts
|
||||||
|
MEMORY {
|
||||||
|
MAIN: file=%O, start=%S, size=65536;
|
||||||
|
# MEM000: file=%O, start=$10f0, size=126;
|
||||||
|
}
|
||||||
|
SEGMENTS {
|
||||||
|
CODE: load=MAIN, type=rw;
|
||||||
|
# SEG000: load=MEM000, type=rw;
|
||||||
|
}
|
||||||
|
FEATURES {}
|
||||||
|
SYMBOLS {}
|
80
SourceGen/SGTestData/Source/2020-cycle-counts.S
Normal file
80
SourceGen/SGTestData/Source/2020-cycle-counts.S
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
; 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
|
||||||
|
|
@ -422,6 +422,7 @@ namespace SourceGen.Tests {
|
|||||||
// desired value. Easier to just have a set of named features.
|
// desired value. Easier to just have a set of named features.
|
||||||
const string ENABLE_LABEL_LOCALIZATION = "__ENABLE_LABEL_LOCALIZATION";
|
const string ENABLE_LABEL_LOCALIZATION = "__ENABLE_LABEL_LOCALIZATION";
|
||||||
const string ENABLE_LABEL_NEWLINE = "__ENABLE_LABEL_NEWLINE";
|
const string ENABLE_LABEL_NEWLINE = "__ENABLE_LABEL_NEWLINE";
|
||||||
|
const string ENABLE_CYCLE_COUNTS = "__ENABLE_CYCLE_COUNTS";
|
||||||
|
|
||||||
if (project.ProjectProps.ProjectSyms.ContainsKey(ENABLE_LABEL_LOCALIZATION)) {
|
if (project.ProjectProps.ProjectSyms.ContainsKey(ENABLE_LABEL_LOCALIZATION)) {
|
||||||
settings.SetBool(AppSettings.SRCGEN_DISABLE_LABEL_LOCALIZATION, false);
|
settings.SetBool(AppSettings.SRCGEN_DISABLE_LABEL_LOCALIZATION, false);
|
||||||
@ -429,6 +430,9 @@ namespace SourceGen.Tests {
|
|||||||
if (project.ProjectProps.ProjectSyms.ContainsKey(ENABLE_LABEL_NEWLINE)) {
|
if (project.ProjectProps.ProjectSyms.ContainsKey(ENABLE_LABEL_NEWLINE)) {
|
||||||
settings.SetBool(AppSettings.SRCGEN_LONG_LABEL_NEW_LINE, true);
|
settings.SetBool(AppSettings.SRCGEN_LONG_LABEL_NEW_LINE, true);
|
||||||
}
|
}
|
||||||
|
if (project.ProjectProps.ProjectSyms.ContainsKey(ENABLE_CYCLE_COUNTS)) {
|
||||||
|
settings.SetBool(AppSettings.SRCGEN_SHOW_CYCLE_COUNTS, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private DisasmProject InstantiateProject(string dataPathName,
|
private DisasmProject InstantiateProject(string dataPathName,
|
||||||
|
Loading…
Reference in New Issue
Block a user