Library for RAM chip

farlepet:

int AM9111::_read()

{
 digitalWrite(_odp,0);
 digitalWrite(_wep,1);
 int rv = 0;
 bitWrite(_rbits,0,digitalRead(_IO[0]));
 bitWrite(_rbits,1,digitalRead(_IO[1]));
 bitWrite(_rbits,2,digitalRead(_IO[2]));
 bitWrite(_rbits,3,digitalRead(_IO[3]));
 _read() = _rbits;
 return rv;
}

I still don't totally get this. Are you trying to change _rbits? In which case why return anything from the function? In that case you want:

void AM9111::_read()
{
  digitalWrite(_odp,0);
  digitalWrite(_wep,1); 
  _rbits = 0;
  bitWrite(_rbits,0,digitalRead(_IO[0]));
  bitWrite(_rbits,1,digitalRead(_IO[1]));
  bitWrite(_rbits,2,digitalRead(_IO[2]));
  bitWrite(_rbits,3,digitalRead(_IO[3]));
}

But if you want to return stuff, and not affect things such as _rbits (have side-effects) then you actually want:

int AM9111::_read()
{
  digitalWrite(_odp,0);
  digitalWrite(_wep,1); 
  int rv = 0;
  bitWrite(rv,0,digitalRead(_IO[0]));
  bitWrite(rv,1,digitalRead(_IO[1]));
  bitWrite(rv,2,digitalRead(_IO[2]));
  bitWrite(rv,3,digitalRead(_IO[3]));
  return rv;
}