Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import Foundation
- public class Cpu {
- enum InterruptType {
- case none
- case nmi
- case irq
- }
- enum AddressMode {
- case absolute
- case absoluteX
- case absoluteY
- case accumulator
- case immediate
- case implied
- case indexedIndirect
- case indirect
- case inidrectIndexed
- case relative
- case zeroPage
- case zeroPageX
- case zeroPageY
- }
- let opcodeName: [String] = [
- "BRK", "ORA", "KIL", "SLO", "NOP", "ORA", "ASL", "SLO",
- "PHP", "ORA", "ASL", "ANC", "NOP", "ORA", "ASL", "SLO",
- "BPL", "ORA", "KIL", "SLO", "NOP", "ORA", "ASL", "SLO",
- "CLC", "ORA", "NOP", "SLO", "NOP", "ORA", "ASL", "SLO",
- "JSR", "AND", "KIL", "RLA", "BIT", "AND", "ROL", "RLA",
- "PLP", "AND", "ROL", "ANC", "BIT", "AND", "ROL", "RLA",
- "BMI", "AND", "KIL", "RLA", "NOP", "AND", "ROL", "RLA",
- "SEC", "AND", "NOP", "RLA", "NOP", "AND", "ROL", "RLA",
- "RTI", "EOR", "KIL", "SRE", "NOP", "EOR", "LSR", "SRE",
- "PHA", "EOR", "LSR", "ALR", "JMP", "EOR", "LSR", "SRE",
- "BVC", "EOR", "KIL", "SRE", "NOP", "EOR", "LSR", "SRE",
- "CLI", "EOR", "NOP", "SRE", "NOP", "EOR", "LSR", "SRE",
- "RTS", "ADC", "KIL", "RRA", "NOP", "ADC", "ROR", "RRA",
- "PLA", "ADC", "ROR", "ARR", "JMP", "ADC", "ROR", "RRA",
- "BVS", "ADC", "KIL", "RRA", "NOP", "ADC", "ROR", "RRA",
- "SEI", "ADC", "NOP", "RRA", "NOP", "ADC", "ROR", "RRA",
- "NOP", "STA", "NOP", "SAX", "STY", "STA", "STX", "SAX",
- "DEY", "NOP", "TXA", "XAA", "STY", "STA", "STX", "SAX",
- "BCC", "STA", "KIL", "AHX", "STY", "STA", "STX", "SAX",
- "TYA", "STA", "TXS", "TAS", "SHY", "STA", "SHX", "AHX",
- "LDY", "LDA", "LDX", "LAX", "LDY", "LDA", "LDX", "LAX",
- "TAY", "LDA", "TAX", "LAX", "LDY", "LDA", "LDX", "LAX",
- "BCS", "LDA", "KIL", "LAX", "LDY", "LDA", "LDX", "LAX",
- "CLV", "LDA", "TSX", "LAS", "LDY", "LDA", "LDX", "LAX",
- "CPY", "CMP", "NOP", "DCP", "CPY", "CMP", "DEC", "DCP",
- "INY", "CMP", "DEX", "AXS", "CPY", "CMP", "DEC", "DCP",
- "BNE", "CMP", "KIL", "DCP", "NOP", "CMP", "DEC", "DCP",
- "CLD", "CMP", "NOP", "DCP", "NOP", "CMP", "DEC", "DCP",
- "CPX", "SBC", "NOP", "ISC", "CPX", "SBC", "INC", "ISC",
- "INX", "SBC", "NOP", "SBC", "CPX", "SBC", "INC", "ISC",
- "BEQ", "SBC", "KIL", "ISC", "NOP", "SBC", "INC", "ISC",
- "SED", "SBC", "NOP", "ISC", "NOP", "SBC", "INC", "ISC",
- ]
- let opcodeSize: [UInt8] = [
- 0x1, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x2, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
- 0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x3, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
- 0x3, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x2, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
- 0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x3, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
- 0x1, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x2, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
- 0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x3, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
- 0x1, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x2, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
- 0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x3, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
- 0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x0, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
- 0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x3, 0x1, 0x0, 0x0, 0x3, 0x0, 0x0,
- 0x2, 0x2, 0x2, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x2, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
- 0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x3, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
- 0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x2, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
- 0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x3, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
- 0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x2, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0,
- 0x2, 0x2, 0x0, 0x0, 0x2, 0x2, 0x2, 0x0, 0x1, 0x3, 0x1, 0x0, 0x3, 0x3, 0x3, 0x0
- ]
- let opcodeCycleCount: [UInt8] = [
- 0x7, 0x6, 0x2, 0x8, 0x3, 0x3, 0x5, 0x5, 0x3, 0x2, 0x2, 0x2, 0x4, 0x4, 0x6, 0x6,
- 0x2, 0x5, 0x2, 0x8, 0x4, 0x4, 0x6, 0x6, 0x2, 0x4, 0x2, 0x7, 0x4, 0x4, 0x7, 0x7,
- 0x6, 0x6, 0x2, 0x8, 0x3, 0x3, 0x5, 0x5, 0x4, 0x2, 0x2, 0x2, 0x4, 0x4, 0x6, 0x6,
- 0x2, 0x5, 0x2, 0x8, 0x4, 0x4, 0x6, 0x6, 0x2, 0x4, 0x2, 0x7, 0x4, 0x4, 0x7, 0x7,
- 0x6, 0x6, 0x2, 0x8, 0x3, 0x3, 0x5, 0x5, 0x3, 0x2, 0x2, 0x2, 0x3, 0x4, 0x6, 0x6,
- 0x2, 0x5, 0x2, 0x8, 0x4, 0x4, 0x6, 0x6, 0x2, 0x4, 0x2, 0x7, 0x4, 0x4, 0x7, 0x7,
- 0x6, 0x6, 0x2, 0x8, 0x3, 0x3, 0x5, 0x5, 0x4, 0x2, 0x2, 0x2, 0x5, 0x4, 0x6, 0x6,
- 0x2, 0x5, 0x2, 0x8, 0x4, 0x4, 0x6, 0x6, 0x2, 0x4, 0x2, 0x7, 0x4, 0x4, 0x7, 0x7,
- 0x2, 0x6, 0x2, 0x6, 0x3, 0x3, 0x3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x4, 0x4, 0x4, 0x4,
- 0x2, 0x6, 0x2, 0x6, 0x4, 0x4, 0x4, 0x4, 0x2, 0x5, 0x2, 0x5, 0x5, 0x5, 0x5, 0x5,
- 0x2, 0x6, 0x2, 0x6, 0x3, 0x3, 0x3, 0x3, 0x2, 0x2, 0x2, 0x2, 0x4, 0x4, 0x4, 0x4,
- 0x2, 0x5, 0x2, 0x5, 0x4, 0x4, 0x4, 0x4, 0x2, 0x4, 0x2, 0x4, 0x4, 0x4, 0x4, 0x4,
- 0x2, 0x6, 0x2, 0x8, 0x3, 0x3, 0x5, 0x5, 0x2, 0x2, 0x2, 0x2, 0x4, 0x4, 0x6, 0x6,
- 0x2, 0x5, 0x2, 0x8, 0x4, 0x4, 0x6, 0x6, 0x2, 0x4, 0x2, 0x7, 0x4, 0x4, 0x7, 0x7,
- 0x2, 0x6, 0x2, 0x8, 0x3, 0x3, 0x5, 0x5, 0x2, 0x2, 0x2, 0x2, 0x4, 0x4, 0x6, 0x6,
- 0x2, 0x5, 0x2, 0x8, 0x4, 0x4, 0x6, 0x6, 0x2, 0x4, 0x2, 0x7, 0x4, 0x4, 0x7, 0x7
- ]
- let opcodePageCycleCount: [UInt8] = [
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0,
- 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
- 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0
- ]
- let opcodeMode: [UInt8] = [
- 0x6, 0x7, 0x6, 0x7, 0xB, 0xB, 0xB, 0xB, 0x6, 0x5, 0x4, 0x5, 0x1, 0x1, 0x1, 0x1,
- 0xA, 0x9, 0x6, 0x9, 0xC, 0xC, 0xC, 0xC, 0x6, 0x3, 0x6, 0x3, 0x2, 0x2, 0x2, 0x2,
- 0x1, 0x7, 0x6, 0x7, 0xB, 0xB, 0xB, 0xB, 0x6, 0x5, 0x4, 0x5, 0x1, 0x1, 0x1, 0x1,
- 0xA, 0x9, 0x6, 0x9, 0xC, 0xC, 0xC, 0xC, 0x6, 0x3, 0x6, 0x3, 0x2, 0x2, 0x2, 0x2,
- 0x6, 0x7, 0x6, 0x7, 0xB, 0xB, 0xB, 0xB, 0x6, 0x5, 0x4, 0x5, 0x1, 0x1, 0x1, 0x1,
- 0xA, 0x9, 0x6, 0x9, 0xC, 0xC, 0xC, 0xC, 0x6, 0x3, 0x6, 0x3, 0x2, 0x2, 0x2, 0x2,
- 0x6, 0x7, 0x6, 0x7, 0xB, 0xB, 0xB, 0xB, 0x6, 0x5, 0x4, 0x5, 0x8, 0x1, 0x1, 0x1,
- 0xA, 0x9, 0x6, 0x9, 0xC, 0xC, 0xC, 0xC, 0x6, 0x3, 0x6, 0x3, 0x2, 0x2, 0x2, 0x2,
- 0x5, 0x7, 0x5, 0x7, 0xB, 0xB, 0xB, 0xB, 0x6, 0x5, 0x6, 0x5, 0x1, 0x1, 0x1, 0x1,
- 0xA, 0x9, 0x6, 0x9, 0xC, 0xC, 0xD, 0xD, 0x6, 0x3, 0x6, 0x3, 0x2, 0x2, 0x3, 0x3,
- 0x5, 0x7, 0x5, 0x7, 0xB, 0xB, 0xB, 0xB, 0x6, 0x5, 0x6, 0x5, 0x1, 0x1, 0x1, 0x1,
- 0xA, 0x9, 0x6, 0x9, 0xC, 0xC, 0xD, 0xD, 0x6, 0x3, 0x6, 0x3, 0x2, 0x2, 0x3, 0x3,
- 0x5, 0x7, 0x5, 0x7, 0xB, 0xB, 0xB, 0xB, 0x6, 0x5, 0x6, 0x5, 0x1, 0x1, 0x1, 0x1,
- 0xA, 0x9, 0x6, 0x9, 0xC, 0xC, 0xC, 0xC, 0x6, 0x3, 0x6, 0x3, 0x2, 0x2, 0x2, 0x2,
- 0x5, 0x7, 0x5, 0x7, 0xB, 0xB, 0xB, 0xB, 0x6, 0x5, 0x6, 0x5, 0x1, 0x1, 0x1, 0x1,
- 0xA, 0x9, 0x6, 0x9, 0xC, 0xC, 0xC, 0xC, 0x6, 0x3, 0x6, 0x3, 0x2, 0x2, 0x2, 0x2
- ]
- var a: UInt8
- var x: UInt8
- var y: UInt8
- var p: UInt8
- var sp: UInt8
- var pc: UInt16
- var cycleCount: UInt64
- public init(_ fileName: String) {
- self.a = 0x0
- self.x = 0x0
- self.y = 0x0
- self.p = 0x24
- self.sp = 0xFD
- self.pc = 0xFFFC
- self.cycleCount = 0x0
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement