pinky/nes-testsuite/roms/cli_latency_tests/source/delays.a
2016-10-23 19:50:32 +02:00

122 lines
2.1 KiB
Text

; Delays specified in milliseconds, tenths of a millisecond,
; tens of milliseconds, and CPU clocks.
; TODO: delay loops that take only a single count
; Delay for almost A milliseconds (A * 0.999009524 msec)
; Preserved: X, Y
delay_msec:
pha ; 3
lda #253 ; 2
sec ; 2
delay_msec_:
nop ; 2
adc #-2 ; 2
bne delay_msec_ ; 3
; -1
pla ; 4
clc ; 2
adc #-1 ; 2
bne delay_msec ; 3
rts
.code
; Delay for almost 'A / 10' milliseconds (A * 0.099453968 msec)
; Preserved: X, Y
delay_01msec:
pha ; 3
lda #18 ; 2
sec ; 2
delay_01msec_:
nop ; 2
nop ; 2
adc #-2 ; 2
bne delay_01msec_ ; 3
; -1
pla ; 4
clc ; 2
adc #-1 ; 2
bne delay_01msec ; 3
rts
.code
; Delay for almost A*10 milliseconds
; Preserved: X, Y
delay_10msec:
pha
lda #10
jsr delay_msec
pla
clc
adc #-1
bne delay_10msec
rts
.code
; Delay n clocks
; Preserved: P, A, X, Y
delay_32: nop
delay_30: nop
delay_28: nop
delay_26: nop
delay_24: nop
delay_22: nop
delay_20: nop
delay_18: nop
delay_16: nop
delay_14: nop
delay_12: rts
delay_33: nop
delay_31: nop
delay_29: nop
delay_27: nop
delay_25: nop
delay_23: nop
delay_21: nop
delay_19: nop
delay_17: beq + ; 5
: bne +
: rts ; 6
.code
; Delay (5 * A + 6) * Y + 7 + n clocks. Use delay_ya
; command-line tool to generate proper code to call this.
delay_ya11:
.db $a2 ; 1 ldx #imm
delay_ya10:
.db $a2 ; 1 ldx #imm
delay_ya9:
.db $a2 ; 1 ldx #imm
delay_ya8:
.db $a2 ; 1 ldx #imm
delay_ya7:
.db $a2 ; 1 ldx #imm
delay_ya6:
.db $a2 ; 1 ldx #imm
delay_ya5:
.db $a2 ; 1 ldx #imm
delay_ya4:
.db $a2 ; 1 ldx #imm
delay_ya3:
.db $a2 ; 1 ldx #imm
delay_ya2:
.db $a2 ; 1 ldx #imm
delay_ya1:
.db $a6 ; 1 ldx zp
delay_ya0:
nop ; 2
delay_ya:
; 2 lda #
; 2 ldy #
; 6 jsr
tax ; *2
delay_yax:
dex ; **2
bne delay_yax ; **3
; *-1
dey ; *2
bne delay_ya ; *3
; -1
rts ; 6
.code