libgambatte: ds odd offset ly timing re work
Test LY timing at an apparent odd cycle offset in double speed mode after multiple speed changes. Adjust accordingly. Findings of note: - In the event that LY is read at the boundary at which it gets incremented, in an apparent window of one (single speed) cycle, the resulting value appears to be LY & LY+1, where '&' denotes the bitwise AND operation, and 'LY' is the value of LY prior to increment.
This commit is contained in:
parent
93db07a526
commit
01c9b09fc6
@ -118,11 +118,13 @@ public:
|
||||
|
||||
lyReg = ppu_.lyCounter().ly();
|
||||
if (lyReg == lcd_lines_per_frame - 1) {
|
||||
if (ppu_.lyCounter().time() - cc <= 2 * lcd_cycles_per_line - 4)
|
||||
if (ppu_.lyCounter().time() - cc <= 2 * lcd_cycles_per_line - 2)
|
||||
lyReg = 0;
|
||||
} else if (ppu_.lyCounter().time() - cc <= 8
|
||||
&& ppu_.lyCounter().time() - cc <= 4u * (1 + isDoubleSpeed())) {
|
||||
++lyReg;
|
||||
} else if (ppu_.lyCounter().time() - cc <= 10
|
||||
&& ppu_.lyCounter().time() - cc <= 5u * (1 + isDoubleSpeed())) {
|
||||
lyReg = ppu_.lyCounter().time() - cc == 5u * (1 + isDoubleSpeed())
|
||||
? lyReg & (lyReg + 1)
|
||||
: lyReg + 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,148 @@
|
||||
.size 8000
|
||||
|
||||
.text@48
|
||||
jp lstatint
|
||||
|
||||
.text@100
|
||||
jp lbegin
|
||||
|
||||
.data@143
|
||||
c0
|
||||
|
||||
.text@150
|
||||
lbegin:
|
||||
ld a, 30
|
||||
ldff(00), a
|
||||
xor a, a
|
||||
ldff(ff), a
|
||||
inc a
|
||||
ldff(4d), a
|
||||
stop, 00
|
||||
ldff(4d), a
|
||||
stop, 00
|
||||
ldff(4d), a
|
||||
stop, 00
|
||||
ld b, 96
|
||||
call lwaitly_b
|
||||
ld a, 98
|
||||
ldff(45), a
|
||||
ld a, 40
|
||||
ldff(41), a
|
||||
ld a, 02
|
||||
ldff(ff), a
|
||||
xor a, a
|
||||
ldff(0f), a
|
||||
ei
|
||||
|
||||
.text@1000
|
||||
lstatint:
|
||||
ld b, 00
|
||||
|
||||
.text@10d9
|
||||
ldff a, (44)
|
||||
cmp a, 99
|
||||
jpnz lprint_cnt
|
||||
|
||||
.text@129d
|
||||
ltest_ly:
|
||||
ldff a, (44)
|
||||
cmp a, b
|
||||
jrnz lprint_cnt
|
||||
inc b
|
||||
ld c, 36
|
||||
lwait_nly:
|
||||
dec c
|
||||
jrnz lwait_nly
|
||||
nop
|
||||
jr ltest_ly
|
||||
lprint_cnt:
|
||||
ld a, b
|
||||
jp lprint_a
|
||||
|
||||
.text@7000
|
||||
lprint_a:
|
||||
push af
|
||||
ld b, 91
|
||||
call lwaitly_b
|
||||
xor a, a
|
||||
ldff(40), a
|
||||
ld bc, 7a00
|
||||
ld hl, 8000
|
||||
ld d, 00
|
||||
lprint_copytiles:
|
||||
ld a, (bc)
|
||||
inc bc
|
||||
ld(hl++), a
|
||||
dec d
|
||||
jrnz lprint_copytiles
|
||||
pop af
|
||||
ld b, a
|
||||
swap a
|
||||
and a, 0f
|
||||
ld(9800), a
|
||||
ld a, b
|
||||
and a, 0f
|
||||
ld(9801), a
|
||||
ld a, c0
|
||||
ldff(47), a
|
||||
ld a, 80
|
||||
ldff(68), a
|
||||
ld a, ff
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
xor a, a
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
ldff(43), a
|
||||
ld a, 91
|
||||
ldff(40), a
|
||||
lprint_limbo:
|
||||
jr lprint_limbo
|
||||
|
||||
.text@7400
|
||||
lwaitly_b:
|
||||
ld c, 44
|
||||
lwaitly_b_loop:
|
||||
ldff a, (c)
|
||||
cmp a, b
|
||||
jrnz lwaitly_b_loop
|
||||
ret
|
||||
|
||||
.data@7a00
|
||||
00 00 7f 7f 41 41 41 41
|
||||
41 41 41 41 41 41 7f 7f
|
||||
00 00 08 08 08 08 08 08
|
||||
08 08 08 08 08 08 08 08
|
||||
00 00 7f 7f 01 01 01 01
|
||||
7f 7f 40 40 40 40 7f 7f
|
||||
00 00 7f 7f 01 01 01 01
|
||||
3f 3f 01 01 01 01 7f 7f
|
||||
00 00 41 41 41 41 41 41
|
||||
7f 7f 01 01 01 01 01 01
|
||||
00 00 7f 7f 40 40 40 40
|
||||
7e 7e 01 01 01 01 7e 7e
|
||||
00 00 7f 7f 40 40 40 40
|
||||
7f 7f 41 41 41 41 7f 7f
|
||||
00 00 7f 7f 01 01 02 02
|
||||
04 04 08 08 10 10 10 10
|
||||
00 00 3e 3e 41 41 41 41
|
||||
3e 3e 41 41 41 41 3e 3e
|
||||
00 00 7f 7f 41 41 41 41
|
||||
7f 7f 01 01 01 01 7f 7f
|
||||
00 00 08 08 22 22 41 41
|
||||
7f 7f 41 41 41 41 41 41
|
||||
00 00 7e 7e 41 41 41 41
|
||||
7e 7e 41 41 41 41 7e 7e
|
||||
00 00 3e 3e 41 41 40 40
|
||||
40 40 40 40 41 41 3e 3e
|
||||
00 00 7e 7e 41 41 41 41
|
||||
41 41 41 41 41 41 7e 7e
|
||||
00 00 7f 7f 40 40 40 40
|
||||
7f 7f 40 40 40 40 7f 7f
|
||||
00 00 7f 7f 40 40 40 40
|
||||
7f 7f 40 40 40 40 40 40
|
||||
|
@ -0,0 +1,152 @@
|
||||
.size 8000
|
||||
|
||||
.text@48
|
||||
jp lstatint
|
||||
|
||||
.text@100
|
||||
jp lbegin
|
||||
|
||||
.data@143
|
||||
c0
|
||||
|
||||
.text@150
|
||||
lbegin:
|
||||
ld a, 30
|
||||
ldff(00), a
|
||||
xor a, a
|
||||
ldff(ff), a
|
||||
inc a
|
||||
ldff(4d), a
|
||||
stop, 00
|
||||
ldff(4d), a
|
||||
stop, 00
|
||||
ldff(4d), a
|
||||
stop, 00
|
||||
ld b, 96
|
||||
call lwaitly_b
|
||||
ld a, 98
|
||||
ldff(45), a
|
||||
ld a, 40
|
||||
ldff(41), a
|
||||
ld a, 02
|
||||
ldff(ff), a
|
||||
xor a, a
|
||||
ldff(0f), a
|
||||
ei
|
||||
|
||||
.text@1000
|
||||
lstatint:
|
||||
ld b, 00
|
||||
|
||||
.text@10da
|
||||
ldff a, (44)
|
||||
cmp a, b
|
||||
jpnz lprint_cnt
|
||||
|
||||
.text@129e
|
||||
ltest_ly:
|
||||
ldff a, (44)
|
||||
ld d, a
|
||||
ld a, b
|
||||
inc b
|
||||
and a, b
|
||||
cmp a, d
|
||||
jrnz lprint_cnt
|
||||
ld c, 35
|
||||
lwait_nly:
|
||||
dec c
|
||||
jrnz lwait_nly
|
||||
nop
|
||||
nop
|
||||
jr ltest_ly
|
||||
lprint_cnt:
|
||||
ld a, b
|
||||
jp lprint_a
|
||||
|
||||
.text@7000
|
||||
lprint_a:
|
||||
push af
|
||||
ld b, 91
|
||||
call lwaitly_b
|
||||
xor a, a
|
||||
ldff(40), a
|
||||
ld bc, 7a00
|
||||
ld hl, 8000
|
||||
ld d, 00
|
||||
lprint_copytiles:
|
||||
ld a, (bc)
|
||||
inc bc
|
||||
ld(hl++), a
|
||||
dec d
|
||||
jrnz lprint_copytiles
|
||||
pop af
|
||||
ld b, a
|
||||
swap a
|
||||
and a, 0f
|
||||
ld(9800), a
|
||||
ld a, b
|
||||
and a, 0f
|
||||
ld(9801), a
|
||||
ld a, c0
|
||||
ldff(47), a
|
||||
ld a, 80
|
||||
ldff(68), a
|
||||
ld a, ff
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
xor a, a
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
ldff(43), a
|
||||
ld a, 91
|
||||
ldff(40), a
|
||||
lprint_limbo:
|
||||
jr lprint_limbo
|
||||
|
||||
.text@7400
|
||||
lwaitly_b:
|
||||
ld c, 44
|
||||
lwaitly_b_loop:
|
||||
ldff a, (c)
|
||||
cmp a, b
|
||||
jrnz lwaitly_b_loop
|
||||
ret
|
||||
|
||||
.data@7a00
|
||||
00 00 7f 7f 41 41 41 41
|
||||
41 41 41 41 41 41 7f 7f
|
||||
00 00 08 08 08 08 08 08
|
||||
08 08 08 08 08 08 08 08
|
||||
00 00 7f 7f 01 01 01 01
|
||||
7f 7f 40 40 40 40 7f 7f
|
||||
00 00 7f 7f 01 01 01 01
|
||||
3f 3f 01 01 01 01 7f 7f
|
||||
00 00 41 41 41 41 41 41
|
||||
7f 7f 01 01 01 01 01 01
|
||||
00 00 7f 7f 40 40 40 40
|
||||
7e 7e 01 01 01 01 7e 7e
|
||||
00 00 7f 7f 40 40 40 40
|
||||
7f 7f 41 41 41 41 7f 7f
|
||||
00 00 7f 7f 01 01 02 02
|
||||
04 04 08 08 10 10 10 10
|
||||
00 00 3e 3e 41 41 41 41
|
||||
3e 3e 41 41 41 41 3e 3e
|
||||
00 00 7f 7f 41 41 41 41
|
||||
7f 7f 01 01 01 01 7f 7f
|
||||
00 00 08 08 22 22 41 41
|
||||
7f 7f 41 41 41 41 41 41
|
||||
00 00 7e 7e 41 41 41 41
|
||||
7e 7e 41 41 41 41 7e 7e
|
||||
00 00 3e 3e 41 41 40 40
|
||||
40 40 40 40 41 41 3e 3e
|
||||
00 00 7e 7e 41 41 41 41
|
||||
41 41 41 41 41 41 7e 7e
|
||||
00 00 7f 7f 40 40 40 40
|
||||
7f 7f 40 40 40 40 7f 7f
|
||||
00 00 7f 7f 40 40 40 40
|
||||
7f 7f 40 40 40 40 40 40
|
||||
|
@ -0,0 +1,149 @@
|
||||
.size 8000
|
||||
|
||||
.text@48
|
||||
jp lstatint
|
||||
|
||||
.text@100
|
||||
jp lbegin
|
||||
|
||||
.data@143
|
||||
c0
|
||||
|
||||
.text@150
|
||||
lbegin:
|
||||
ld a, 30
|
||||
ldff(00), a
|
||||
xor a, a
|
||||
ldff(ff), a
|
||||
inc a
|
||||
ldff(4d), a
|
||||
stop, 00
|
||||
ldff(4d), a
|
||||
stop, 00
|
||||
ldff(4d), a
|
||||
stop, 00
|
||||
ld b, 96
|
||||
call lwaitly_b
|
||||
ld a, 98
|
||||
ldff(45), a
|
||||
ld a, 40
|
||||
ldff(41), a
|
||||
ld a, 02
|
||||
ldff(ff), a
|
||||
xor a, a
|
||||
ldff(0f), a
|
||||
ei
|
||||
|
||||
.text@1000
|
||||
lstatint:
|
||||
ld b, 00
|
||||
|
||||
.text@10db
|
||||
ldff a, (44)
|
||||
cmp a, b
|
||||
jpnz lprint_cnt
|
||||
inc b
|
||||
|
||||
.text@129f
|
||||
ltest_ly:
|
||||
ldff a, (44)
|
||||
cmp a, b
|
||||
jrnz lprint_cnt
|
||||
inc b
|
||||
ld c, 36
|
||||
lwait_nly:
|
||||
dec c
|
||||
jrnz lwait_nly
|
||||
nop
|
||||
jr ltest_ly
|
||||
lprint_cnt:
|
||||
ld a, b
|
||||
jp lprint_a
|
||||
|
||||
.text@7000
|
||||
lprint_a:
|
||||
push af
|
||||
ld b, 91
|
||||
call lwaitly_b
|
||||
xor a, a
|
||||
ldff(40), a
|
||||
ld bc, 7a00
|
||||
ld hl, 8000
|
||||
ld d, 00
|
||||
lprint_copytiles:
|
||||
ld a, (bc)
|
||||
inc bc
|
||||
ld(hl++), a
|
||||
dec d
|
||||
jrnz lprint_copytiles
|
||||
pop af
|
||||
ld b, a
|
||||
swap a
|
||||
and a, 0f
|
||||
ld(9800), a
|
||||
ld a, b
|
||||
and a, 0f
|
||||
ld(9801), a
|
||||
ld a, c0
|
||||
ldff(47), a
|
||||
ld a, 80
|
||||
ldff(68), a
|
||||
ld a, ff
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
xor a, a
|
||||
ldff(69), a
|
||||
ldff(69), a
|
||||
ldff(43), a
|
||||
ld a, 91
|
||||
ldff(40), a
|
||||
lprint_limbo:
|
||||
jr lprint_limbo
|
||||
|
||||
.text@7400
|
||||
lwaitly_b:
|
||||
ld c, 44
|
||||
lwaitly_b_loop:
|
||||
ldff a, (c)
|
||||
cmp a, b
|
||||
jrnz lwaitly_b_loop
|
||||
ret
|
||||
|
||||
.data@7a00
|
||||
00 00 7f 7f 41 41 41 41
|
||||
41 41 41 41 41 41 7f 7f
|
||||
00 00 08 08 08 08 08 08
|
||||
08 08 08 08 08 08 08 08
|
||||
00 00 7f 7f 01 01 01 01
|
||||
7f 7f 40 40 40 40 7f 7f
|
||||
00 00 7f 7f 01 01 01 01
|
||||
3f 3f 01 01 01 01 7f 7f
|
||||
00 00 41 41 41 41 41 41
|
||||
7f 7f 01 01 01 01 01 01
|
||||
00 00 7f 7f 40 40 40 40
|
||||
7e 7e 01 01 01 01 7e 7e
|
||||
00 00 7f 7f 40 40 40 40
|
||||
7f 7f 41 41 41 41 7f 7f
|
||||
00 00 7f 7f 01 01 02 02
|
||||
04 04 08 08 10 10 10 10
|
||||
00 00 3e 3e 41 41 41 41
|
||||
3e 3e 41 41 41 41 3e 3e
|
||||
00 00 7f 7f 41 41 41 41
|
||||
7f 7f 01 01 01 01 7f 7f
|
||||
00 00 08 08 22 22 41 41
|
||||
7f 7f 41 41 41 41 41 41
|
||||
00 00 7e 7e 41 41 41 41
|
||||
7e 7e 41 41 41 41 7e 7e
|
||||
00 00 3e 3e 41 41 40 40
|
||||
40 40 40 40 41 41 3e 3e
|
||||
00 00 7e 7e 41 41 41 41
|
||||
41 41 41 41 41 41 7e 7e
|
||||
00 00 7f 7f 40 40 40 40
|
||||
7f 7f 40 40 40 40 7f 7f
|
||||
00 00 7f 7f 40 40 40 40
|
||||
7f 7f 40 40 40 40 40 40
|
||||
|
Loading…
x
Reference in New Issue
Block a user