Zesty - a pin-accurate, cycle-accurate NES emulator written in Zig
1//! NES and Famicom cartridges.
2const std = @import("std");
3const zesty = @import("zesty.zig");
4
5pub const Cartridge = union(enum) {
6 nrom128: Nrom128,
7
8 pub fn update(self: *Cartridge, pins: *zesty.Pins) void {
9 if (pins.romSel()) switch (self.*) {
10 inline else => |*v| v.update(pins),
11 };
12 }
13};
14
15pub const Nrom128 = struct {
16 rom: [0x4000]u8 = @splat(0x00),
17
18 pub fn update(self: *Nrom128, pins: *zesty.Pins) void {
19 if (pins.cpu_addr < 0x8000 or pins.cpu_rw != .read) return;
20 pins.cpu_data = self.rom[pins.cpu_addr & 0x3fff];
21 }
22};