diff --git a/Sources/main.swift b/Sources/main.swift index 40cdad9..a81676a 100644 --- a/Sources/main.swift +++ b/Sources/main.swift @@ -40,22 +40,16 @@ let keyMap = [ SDLK_s : JoypadButton.BUTTON_B ] +var timer = Date.now.addingTimeInterval(0.01666) var frame = Frame() -let time: UnsafeMutablePointer = UnsafeMutablePointer.allocate(capacity: 1) -clock_gettime(CLOCK_REALTIME, time) -time.pointee.tv_nsec += Int(0.01666 * 1000000000) let bus = Bus(rom: rom, joypad1: joypad1) { ppu in Render.render(ppu, frame: frame) - - //wait here until 16.66 ms have passed - clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, time, nil) - var nextNSec = time.pointee.tv_nsec + Int(0.01666 * 1000000000) - if nextNSec > 999999999 { - nextNSec -= 999999999 - time.pointee.tv_sec += 1 + // wait here until 16.66 ms have passed + // i would use clock_nanosleep but that isn't available cross platform + if timer.timeIntervalSinceNow > 0 { + usleep(UInt32(timer.timeIntervalSinceNow * 1000000)) } - time.pointee.tv_nsec = nextNSec - + timer.addTimeInterval(0.01666) SDL_UpdateTexture(texture, nil, frame.data, 256 * 3) SDL_RenderCopy(canvas, texture, nil, nil) SDL_RenderPresent(canvas) @@ -88,4 +82,3 @@ let bus = Bus(rom: rom, joypad1: joypad1) { ppu in let cpu = CPU(bus: bus) cpu.reset() cpu.run() -time.deallocate()