docs: def update(self, E=None, **F):
          '''
          D.update([E, ]**F) -> None
          Update the bitfield from dict/iterable E and F.
          If E present and has a .keys() method, does:   for k in E: D.k = E[k]
          If E present and lacks .keys() method, does:   for (k, v) in E: D.k = v
          In either case, this is followed by:           for k in F: D.k = F[k]
          
          The entire update is applied in a single read and a single write, 
          in case the target is a memory-mapped register.  The read and write
          are independent, rather than an atomic RMW cycle.
          
          '''
          
          temp = self.clone()
          if E:
              try:
                  for k in E.keys():
                      setattr(temp, k, E[k])
              except (AttributeError, ValueError):
                  for k, v in E:
                      setattr(temp, k, v)
                      
          for k, v in F.items():
              setattr(temp, k, v)
              
          self.base = temp.base