Advertisement
Guest User

Untitled

a guest
Jul 16th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.44 KB | None | 0 0
  1. // Emulator, an NES emulator
  2. // Copyright (C) 2018 Sam Breadman
  3.  
  4. import Cocoa
  5.  
  6. struct Rom {
  7.     let prg: [UInt8]
  8.     let chr: [UInt8]
  9.     let sram: [UInt8]
  10.     let mapper: UInt8
  11.     let mirror: UInt8
  12.     let battery: UInt8
  13. }
  14.  
  15. func loadRom(_ fileName: String) -> (Rom) {
  16.  
  17.     // Load file data
  18.     let fileUrl = Bundle.main.url(forResource: fileName, withExtension: "nes")
  19.     let fileData = try! Data(contentsOf: fileUrl!)
  20.    
  21.     // Load mapper type
  22.     let mapper1: UInt8 = fileData[0x6] >> 0x4
  23.     let mapper2: UInt8 = fileData[0x7] >> 0x4
  24.     let mapper: UInt8 = mapper1 | (mapper2 << 0x4)
  25.    
  26.     // Load mirroring type
  27.     let mirror1: UInt8 = fileData[0x6] & 0x1
  28.     let mirror2: UInt8 = (fileData[0x6] >> 0x3) & 0x1
  29.     let mirror: UInt8 = mirror1 | (mirror2 << 0x1)
  30.    
  31.     // Load battery type
  32.     let battery: UInt8 = (fileData[0x6] >> 0x1) & 0x1
  33.    
  34.     // Load PRG-ROM banks
  35.     let prgSize = Int(fileData[0x4]) * 0x4000
  36.     var prg: [UInt8] = Array(repeating: 0x0, count: prgSize)
  37.     for i in 0x0..<prgSize {
  38.         prg[i] = fileData[0x10 + i]
  39.     }
  40.    
  41.     // Load CHR-ROM banks
  42.     let chrSize = Int(fileData[0x5]) * 0x2000
  43.     var chr: [UInt8] = Array(repeating: 0x0, count: chrSize)
  44.     for i in 0x0..<chrSize {
  45.         chr[i] = fileData[0x10 + prgSize + i]
  46.     }
  47.    
  48.     // Load SRAM banks
  49.     let sram: [UInt8] = Array(repeating: 0x0, count: 0x1FFF)
  50.    
  51.     // Return data
  52.     return Rom (
  53.         prg: prg,
  54.         chr: chr,
  55.         sram: sram,
  56.         mapper: mapper,
  57.         mirror: mirror,
  58.         battery: battery
  59.     )
  60.    
  61. }
  62.  
  63. var rom = loadRom("rom")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement