1 struct flag_t { 2 bool n, v, p, b, h, i, z, c; 3 operator unsignedflag_t4 inline operator unsigned() const { 5 return (n << 7) | (v << 6) | (p << 5) | (b << 4) 6 | (h << 3) | (i << 2) | (z << 1) | (c << 0); 7 } 8 operator =flag_t9 inline unsigned operator=(uint8_t data) { 10 n = data & 0x80; v = data & 0x40; p = data & 0x20; b = data & 0x10; 11 h = data & 0x08; i = data & 0x04; z = data & 0x02; c = data & 0x01; 12 return data; 13 } 14 operator |=flag_t15 inline unsigned operator|=(uint8_t data) { return operator=(operator unsigned() | data); } operator ^=flag_t16 inline unsigned operator^=(uint8_t data) { return operator=(operator unsigned() ^ data); } operator &=flag_t17 inline unsigned operator&=(uint8_t data) { return operator=(operator unsigned() & data); } 18 }; 19 20 struct word_t { 21 union { 22 uint16_t w; 23 #ifdef BLARGG_BIG_ENDIAN 24 struct { uint8_t h, l; }; 25 #else 26 struct { uint8_t l, h; }; 27 #endif 28 }; 29 operator unsignedword_t30 inline operator unsigned() const { return w; } operator =word_t31 inline unsigned operator=(unsigned data) { return w = data; } 32 operator ++word_t33 inline unsigned operator++() { return ++w; } operator --word_t34 inline unsigned operator--() { return --w; } 35 operator ++word_t36 inline unsigned operator++(int) { unsigned data = w++; return data; } operator --word_t37 inline unsigned operator--(int) { unsigned data = w--; return data; } 38 operator +=word_t39 inline unsigned operator+=(unsigned data) { return w += data;; } operator -=word_t40 inline unsigned operator-=(unsigned data) { return w -= data;; } 41 operator |=word_t42 inline unsigned operator|=(unsigned data) { return w |= data; } operator ^=word_t43 inline unsigned operator^=(unsigned data) { return w ^= data; } operator &=word_t44 inline unsigned operator&=(unsigned data) { return w &= data; } 45 }; 46 47 struct regs_t { 48 word_t pc; 49 union { 50 uint16_t ya; 51 #ifdef BLARGG_BIG_ENDIAN 52 struct { uint8_t y, a; }; 53 #else 54 struct { uint8_t a, y; }; 55 #endif 56 }; 57 uint8_t x, s; 58 flag_t p; 59 }; 60