Exemple #1
0
  def opADC(self, x):
    data = self.ByteAt(x())
      
    if self.p & self.DECIMAL:
      if self.p & self.CARRY:
        tmp = 1
      else:
        tmp = 0
      data = convert_to_bin(data) + convert_to_bin(self.a) + tmp
      self.p &= ~(self.CARRY+self.OVERFLOW+self.NEGATIVE+self.ZERO)
      if data > 99:
        self.p |= self.CARRY + self.OVERFLOW
        data -= 100

      if data == 0:
        self.p |= self.ZERO
      else:
        self.p |= data & 128
      self.a = convert_to_bcd(data)
    else:
      if self.p & self.CARRY:
        tmp = 1
      else:
        tmp = 0
      result = data + self.a + tmp
      self.p &= ~(self.CARRY+self.OVERFLOW+self.NEGATIVE+self.ZERO)
      if ( ~(self.a ^ data) & (self.a ^ result) ) & 0x80:
        self.p |= self.OVERFLOW
      data = result
      if data > 255:
        self.p |= self.CARRY
        data &=255
      if data == 0:
        self.p |= self.ZERO
      else:
        self.p |= data & 128
      self.a = data
Exemple #2
0
  def opSBC(self, x):
    data = self.ByteAt(x())
      
    if self.p & self.DECIMAL:
      if self.p & self.CARRY:
        borrow = 0
      else:
        borrow = 1
    
      data = convert_to_bin(self.a) - convert_to_bin(data) - borrow
      self.p &= ~(self.CARRY + self.ZERO + self.NEGATIVE + self.OVERFLOW)
      if data == 0:
        self.p |= self.ZERO + self.CARRY
      elif data > 0:
        self.p |= self.CARRY
      else:
        self.p |= self.NEGATIVE
        data +=100
      self.a = convert_to_bcd(data)
    else:
      if self.p & self.CARRY:
        borrow = 0
      else:
        borrow = 1

      result = self.a + (~data & 0xFF) + (self.p & self.CARRY)
      self.p &= ~(self.CARRY + self.ZERO + self.OVERFLOW + self.NEGATIVE)
      if ( (self.a ^ data) & (self.a ^ result) ) & 0x80:
        self.p |= self.OVERFLOW
      data = result & 0xFF
      if data == 0:
        self.p |= self.ZERO
      if result & 0x100:
        self.p |= self.CARRY
      self.p |= data & self.NEGATIVE
      self.a = data
Exemple #3
0
 def test_convert_to_bin(self):
     self.assertEqual(0, convert_to_bin(0))
     self.assertEqual(99, convert_to_bin(0x99))
Exemple #4
0
 def test_convert_to_bin(self):
     self.assertEqual(0, convert_to_bin(0))
     self.assertEqual(99, convert_to_bin(0x99))