Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Emulator, an NES emulator
- // Copyright (C) 2018 Sam Breadman
- import Cocoa
- struct Rom {
- let prg: [UInt8]
- let chr: [UInt8]
- let sram: [UInt8]
- let mapper: UInt8
- let mirror: UInt8
- let battery: UInt8
- }
- func loadRom(_ fileName: String) -> (Rom) {
- // Load file data
- let fileUrl = Bundle.main.url(forResource: fileName, withExtension: "nes")
- let fileData = try! Data(contentsOf: fileUrl!)
- // Load mapper type
- let mapper1: UInt8 = fileData[0x6] >> 0x4
- let mapper2: UInt8 = fileData[0x7] >> 0x4
- let mapper: UInt8 = mapper1 | (mapper2 << 0x4)
- // Load mirroring type
- let mirror1: UInt8 = fileData[0x6] & 0x1
- let mirror2: UInt8 = (fileData[0x6] >> 0x3) & 0x1
- let mirror: UInt8 = mirror1 | (mirror2 << 0x1)
- // Load battery type
- let battery: UInt8 = (fileData[0x6] >> 0x1) & 0x1
- // Load PRG-ROM banks
- let prgSize = Int(fileData[0x4]) * 0x4000
- var prg: [UInt8] = Array(repeating: 0x0, count: prgSize)
- for i in 0x0..<prgSize {
- prg[i] = fileData[0x10 + i]
- }
- // Load CHR-ROM banks
- let chrSize = Int(fileData[0x5]) * 0x2000
- var chr: [UInt8] = Array(repeating: 0x0, count: chrSize)
- for i in 0x0..<chrSize {
- chr[i] = fileData[0x10 + prgSize + i]
- }
- // Load SRAM banks
- let sram: [UInt8] = Array(repeating: 0x0, count: 0x1FFF)
- // Return data
- return Rom (
- prg: prg,
- chr: chr,
- sram: sram,
- mapper: mapper,
- mirror: mirror,
- battery: battery
- )
- }
- var rom = loadRom("rom")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement