Advertisement
Guest User

Untitled

a guest
Jul 17th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 7.88 KB | None | 0 0
  1. import Foundation
  2.  
  3. public class Cpu {
  4.  
  5.     enum InterruptType {
  6.         case none
  7.         case nmi
  8.         case irq
  9.     }
  10.  
  11.     enum AddressMode {
  12.         case absolute
  13.         case absoluteX
  14.         case absoluteY
  15.         case accumulator
  16.         case immediate
  17.         case implied
  18.         case indexedIndirect
  19.         case indirect
  20.         case inidrectIndexed
  21.         case relative
  22.         case zeroPage
  23.         case zeroPageX
  24.         case zeroPageY
  25.     }
  26.  
  27.     let opcodeName: [String] = [
  28.         "BRK", "ORA", "KIL", "SLO", "NOP", "ORA", "ASL", "SLO",
  29.         "PHP", "ORA", "ASL", "ANC", "NOP", "ORA", "ASL", "SLO",
  30.         "BPL", "ORA", "KIL", "SLO", "NOP", "ORA", "ASL", "SLO",
  31.         "CLC", "ORA", "NOP", "SLO", "NOP", "ORA", "ASL", "SLO",
  32.         "JSR", "AND", "KIL", "RLA", "BIT", "AND", "ROL", "RLA",
  33.         "PLP", "AND", "ROL", "ANC", "BIT", "AND", "ROL", "RLA",
  34.         "BMI", "AND", "KIL", "RLA", "NOP", "AND", "ROL", "RLA",
  35.         "SEC", "AND", "NOP", "RLA", "NOP", "AND", "ROL", "RLA",
  36.         "RTI", "EOR", "KIL", "SRE", "NOP", "EOR", "LSR", "SRE",
  37.         "PHA", "EOR", "LSR", "ALR", "JMP", "EOR", "LSR", "SRE",
  38.         "BVC", "EOR", "KIL", "SRE", "NOP", "EOR", "LSR", "SRE",
  39.         "CLI", "EOR", "NOP", "SRE", "NOP", "EOR", "LSR", "SRE",
  40.         "RTS", "ADC", "KIL", "RRA", "NOP", "ADC", "ROR", "RRA",
  41.         "PLA", "ADC", "ROR", "ARR", "JMP", "ADC", "ROR", "RRA",
  42.         "BVS", "ADC", "KIL", "RRA", "NOP", "ADC", "ROR", "RRA",
  43.         "SEI", "ADC", "NOP", "RRA", "NOP", "ADC", "ROR", "RRA",
  44.         "NOP", "STA", "NOP", "SAX", "STY", "STA", "STX", "SAX",
  45.         "DEY", "NOP", "TXA", "XAA", "STY", "STA", "STX", "SAX",
  46.         "BCC", "STA", "KIL", "AHX", "STY", "STA", "STX", "SAX",
  47.         "TYA", "STA", "TXS", "TAS", "SHY", "STA", "SHX", "AHX",
  48.         "LDY", "LDA", "LDX", "LAX", "LDY", "LDA", "LDX", "LAX",
  49.         "TAY", "LDA", "TAX", "LAX", "LDY", "LDA", "LDX", "LAX",
  50.         "BCS", "LDA", "KIL", "LAX", "LDY", "LDA", "LDX", "LAX",
  51.         "CLV", "LDA", "TSX", "LAS", "LDY", "LDA", "LDX", "LAX",
  52.         "CPY", "CMP", "NOP", "DCP", "CPY", "CMP", "DEC", "DCP",
  53.         "INY", "CMP", "DEX", "AXS", "CPY", "CMP", "DEC", "DCP",
  54.         "BNE", "CMP", "KIL", "DCP", "NOP", "CMP", "DEC", "DCP",
  55.         "CLD", "CMP", "NOP", "DCP", "NOP", "CMP", "DEC", "DCP",
  56.         "CPX", "SBC", "NOP", "ISC", "CPX", "SBC", "INC", "ISC",
  57.         "INX", "SBC", "NOP", "SBC", "CPX", "SBC", "INC", "ISC",
  58.         "BEQ", "SBC", "KIL", "ISC", "NOP", "SBC", "INC", "ISC",
  59.         "SED", "SBC", "NOP", "ISC", "NOP", "SBC", "INC", "ISC",
  60.     ]
  61.  
  62.     let opcodeSize: [UInt8] = [
  63.         0x1, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x2, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
  64.         0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x3, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
  65.         0x3, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x2, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
  66.         0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x3, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
  67.         0x1, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x2, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
  68.         0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x3, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
  69.         0x1, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x2, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
  70.         0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x3, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
  71.         0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x0, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
  72.         0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x3, 0x1, 0x0, 0x0, 0x3, 0x0, 0x0,
  73.         0x2, 0x2, 0x2, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x2, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
  74.         0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x3, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
  75.         0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x2, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
  76.         0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x3, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
  77.         0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x2, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
  78.         0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x3, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0
  79.     ]
  80.  
  81.     let opcodeCycleCount: [UInt8] = [
  82.         0x7, 0x6, 0x2, 0x8, 0x3, 0x3, 0x5, 0x5, 0x3, 0x2, 0x2, 0x2, 0x4, 0x4, 0x6, 0x6,
  83.         0x2, 0x5, 0x2, 0x8, 0x4, 0x4, 0x6, 0x6, 0x2, 0x4, 0x2, 0x7, 0x4, 0x4, 0x7, 0x7,
  84.         0x6, 0x6, 0x2, 0x8, 0x3, 0x3, 0x5, 0x5, 0x4, 0x2, 0x2, 0x2, 0x4, 0x4, 0x6, 0x6,
  85.         0x2, 0x5, 0x2, 0x8, 0x4, 0x4, 0x6, 0x6, 0x2, 0x4, 0x2, 0x7, 0x4, 0x4, 0x7, 0x7,
  86.         0x6, 0x6, 0x2, 0x8, 0x3, 0x3, 0x5, 0x5, 0x3, 0x2, 0x2, 0x2, 0x3, 0x4, 0x6, 0x6,
  87.         0x2, 0x5, 0x2, 0x8, 0x4, 0x4, 0x6, 0x6, 0x2, 0x4, 0x2, 0x7, 0x4, 0x4, 0x7, 0x7,
  88.         0x6, 0x6, 0x2, 0x8, 0x3, 0x3, 0x5, 0x5, 0x4, 0x2, 0x2, 0x2, 0x5, 0x4, 0x6, 0x6,
  89.         0x2, 0x5, 0x2, 0x8, 0x4, 0x4, 0x6, 0x6, 0x2, 0x4, 0x2, 0x7, 0x4, 0x4, 0x7, 0x7,
  90.         0x2, 0x6, 0x2, 0x6, 0x3, 0x3, 0x3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x4, 0x4, 0x4, 0x4,
  91.         0x2, 0x6, 0x2, 0x6, 0x4, 0x4, 0x4, 0x4, 0x2, 0x5, 0x2, 0x5, 0x5, 0x5, 0x5, 0x5,
  92.         0x2, 0x6, 0x2, 0x6, 0x3, 0x3, 0x3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x4, 0x4, 0x4, 0x4,
  93.         0x2, 0x5, 0x2, 0x5, 0x4, 0x4, 0x4, 0x4, 0x2, 0x4, 0x2, 0x4, 0x4, 0x4, 0x4, 0x4,
  94.         0x2, 0x6, 0x2, 0x8, 0x3, 0x3, 0x5, 0x5, 0x2, 0x2, 0x2, 0x2, 0x4, 0x4, 0x6, 0x6,
  95.         0x2, 0x5, 0x2, 0x8, 0x4, 0x4, 0x6, 0x6, 0x2, 0x4, 0x2, 0x7, 0x4, 0x4, 0x7, 0x7,
  96.         0x2, 0x6, 0x2, 0x8, 0x3, 0x3, 0x5, 0x5, 0x2, 0x2, 0x2, 0x2, 0x4, 0x4, 0x6, 0x6,
  97.         0x2, 0x5, 0x2, 0x8, 0x4, 0x4, 0x6, 0x6, 0x2, 0x4, 0x2, 0x7, 0x4, 0x4, 0x7, 0x7
  98.     ]
  99.  
  100.     let opcodePageCycleCount: [UInt8] = [
  101.         0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  102.         0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0,
  103.         0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  104.         0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0,
  105.         0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  106.         0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0,
  107.         0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  108.         0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0,
  109.         0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  110.         0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  111.         0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  112.         0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1,
  113.         0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  114.         0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0,
  115.         0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
  116.         0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0
  117.     ]
  118.  
  119.     let opcodeMode: [UInt8] = [
  120.         0x6, 0x7, 0x6, 0x7, 0xB, 0xB, 0xB, 0xB, 0x6, 0x5, 0x4, 0x5, 0x1, 0x1, 0x1, 0x1,
  121.         0xA, 0x9, 0x6, 0x9, 0xC, 0xC, 0xC, 0xC, 0x6, 0x3, 0x6, 0x3, 0x2, 0x2, 0x2, 0x2,
  122.         0x1, 0x7, 0x6, 0x7, 0xB, 0xB, 0xB, 0xB, 0x6, 0x5, 0x4, 0x5, 0x1, 0x1, 0x1, 0x1,
  123.         0xA, 0x9, 0x6, 0x9, 0xC, 0xC, 0xC, 0xC, 0x6, 0x3, 0x6, 0x3, 0x2, 0x2, 0x2, 0x2,
  124.         0x6, 0x7, 0x6, 0x7, 0xB, 0xB, 0xB, 0xB, 0x6, 0x5, 0x4, 0x5, 0x1, 0x1, 0x1, 0x1,
  125.         0xA, 0x9, 0x6, 0x9, 0xC, 0xC, 0xC, 0xC, 0x6, 0x3, 0x6, 0x3, 0x2, 0x2, 0x2, 0x2,
  126.         0x6, 0x7, 0x6, 0x7, 0xB, 0xB, 0xB, 0xB, 0x6, 0x5, 0x4, 0x5, 0x8, 0x1, 0x1, 0x1,
  127.         0xA, 0x9, 0x6, 0x9, 0xC, 0xC, 0xC, 0xC, 0x6, 0x3, 0x6, 0x3, 0x2, 0x2, 0x2, 0x2,
  128.         0x5, 0x7, 0x5, 0x7, 0xB, 0xB, 0xB, 0xB, 0x6, 0x5, 0x6, 0x5, 0x1, 0x1, 0x1, 0x1,
  129.         0xA, 0x9, 0x6, 0x9, 0xC, 0xC, 0xD, 0xD, 0x6, 0x3, 0x6, 0x3, 0x2, 0x2, 0x3, 0x3,
  130.         0x5, 0x7, 0x5, 0x7, 0xB, 0xB, 0xB, 0xB, 0x6, 0x5, 0x6, 0x5, 0x1, 0x1, 0x1, 0x1,
  131.         0xA, 0x9, 0x6, 0x9, 0xC, 0xC, 0xD, 0xD, 0x6, 0x3, 0x6, 0x3, 0x2, 0x2, 0x3, 0x3,
  132.         0x5, 0x7, 0x5, 0x7, 0xB, 0xB, 0xB, 0xB, 0x6, 0x5, 0x6, 0x5, 0x1, 0x1, 0x1, 0x1,
  133.         0xA, 0x9, 0x6, 0x9, 0xC, 0xC, 0xC, 0xC, 0x6, 0x3, 0x6, 0x3, 0x2, 0x2, 0x2, 0x2,
  134.         0x5, 0x7, 0x5, 0x7, 0xB, 0xB, 0xB, 0xB, 0x6, 0x5, 0x6, 0x5, 0x1, 0x1, 0x1, 0x1,
  135.         0xA, 0x9, 0x6, 0x9, 0xC, 0xC, 0xC, 0xC, 0x6, 0x3, 0x6, 0x3, 0x2, 0x2, 0x2, 0x2
  136.     ]
  137.    
  138.     var a: UInt8
  139.     var x: UInt8
  140.     var y: UInt8
  141.     var p: UInt8
  142.     var sp: UInt8
  143.     var pc: UInt16
  144.     var cycleCount: UInt64
  145.    
  146.     public init(_ fileName: String) {
  147.         self.a = 0x0
  148.         self.x = 0x0
  149.         self.y = 0x0
  150.         self.p = 0x24
  151.         self.sp = 0xFD
  152.         self.pc = 0xFFFC
  153.         self.cycleCount = 0x0
  154.     }
  155.    
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement