srctree

Johan parent 24d868f6 e15ada63 2c319aad
Merge pull request #304 from johnor/fix-nestest-timing

Fix nestest timing
.github/workflows/ci-nestest.yaml added: 20, removed: 7, total 13
@@ -58,7 +58,7 @@ jobs:
./build/nestest/nestest nestest.nes > nestest-output.log
 
- name: Diff output
run: python3.7 nestest/test_nestest.py --nestest-log nestest.log --nestest-rom nestest.nes --nestest-bin build/nestest/nestest || true
run: python3.7 nestest/test_nestest.py --nestest-log nestest.log --nestest-rom nestest.nes --nestest-bin build/nestest/nestest --min-matching-lines 7000
 
- name: Upload artifacts
uses: actions/upload-artifact@v1
 
nestest/src/main.cpp added: 20, removed: 7, total 13
@@ -98,7 +98,7 @@ std::string get_execution_string(const n_e_s::nes::Nes &nes) {
reg_string,
nes.ppu().cycle() - 1,
nes.ppu().scanline(),
nes.current_cycle() / 3 + 7);
nes.current_cycle() / 12 + 7);
 
return result;
}
@@ -120,6 +120,9 @@ int main(int argc, char **argv) {
 
for (int i = 0; i < 1000000; ++i) {
nes.execute();
nes.execute();
nes.execute();
nes.execute();
 
const auto state = nes.cpu().state();
 
 
nestest/test_nestest.py added: 20, removed: 7, total 13
@@ -4,10 +4,12 @@ import pathlib
import subprocess
import sys
import typing
import re
from pathlib import Path
 
 
THIS_FILE = pathlib.Path(__file__).absolute().parent
REMOVE_REGEX = re.compile('PPU:\s*[-0-9]+,\s*[0-9]+')
 
 
def parse_args():
@@ -20,6 +22,8 @@ def parse_args():
default="nestest.nes")
parser.add_argument("--nestest-bin",
type=pathlib.Path)
parser.add_argument("--min-matching-lines",
type=int)
args = parser.parse_args()
return args
 
@@ -34,7 +38,7 @@ def run_nestest(nestest_bin: Path, nestest_rom: Path) -> typing.List[str]:
if 'Bad instruction' in l:
lines.append(l.strip())
break
line = l[0:l.index('PPU:')].strip()
line = REMOVE_REGEX.sub('', l).strip()
lines.append(line)
return lines
 
@@ -44,7 +48,7 @@ def load_log(nestest_log: Path) -> typing.List[str]:
lines = []
with nestest_log.open('r') as f:
for l in f:
line = l[0:l.index('PPU:')].strip()
line = REMOVE_REGEX.sub('', l).strip()
lines.append(line)
return lines
 
@@ -64,6 +68,12 @@ def main():
print(f'Missmatch detected on line: {line}')
print('\n'.join(diff))
 
if args.min_matching_lines:
if line < args.min_matching_lines:
print(f'Expected at least: {args.min_matching_lines} successful lines')
sys.exit(1)
else:
sys.exit(0)
sys.exit(0 if success else 1)