package nes import ( "crecher.net/gones/v2/cart" "crecher.net/gones/v2/cpu" ) type Console struct { CPU *cpu.CPU Cart *cart.Cartridge RAM [0x800]uint8 // PPU, APU, controllers once they exist cycles uint64 } func New(c *cart.Cartridge) *Console { n := &Console{Cart: c} n.CPU = cpu.NewCPU(n) n.CPU.Reset() return n } func (n *Console) Step() int { cycles := n.CPU.Step() n.cycles += uint64(cycles) return cycles } func (n *Console) StepFrame() { // 29780 is roughly one frame: // ~ 1789773 cycles per sec // ~ 60.1 fps // 1789773 / 60.1 = 29779.916... const cyclesPerFrame = 29780 for done := 0; done < cyclesPerFrame; { done += n.Step() } }