aboutsummaryrefslogtreecommitdiff
path: root/nes/nes.go
diff options
context:
space:
mode:
Diffstat (limited to 'nes/nes.go')
-rw-r--r--nes/nes.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/nes/nes.go b/nes/nes.go
new file mode 100644
index 0000000..c4d09a0
--- /dev/null
+++ b/nes/nes.go
@@ -0,0 +1,34 @@
+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() {
+ const cyclesPerFrame = 29780 // 29780 ~ 1789773 / 60.1
+ for done := 0; done < cyclesPerFrame; {
+ done += n.Step()
+ }
+} \ No newline at end of file