diff options
author | Vladimir | 2011-06-07 22:52:06 +0400 |
---|---|---|
committer | Alyssa Milburn | 2011-06-15 17:31:42 +0200 |
commit | f7de3e8c386293b162225829a8268565408b0e4e (patch) | |
tree | 25395caeea6808e3aa37c7b4d0c793d25ad92da0 | |
parent | 222d9b23762d24ad3a752c8fbb9d2112cd2faeba (diff) | |
download | scummvm-rg350-f7de3e8c386293b162225829a8268565408b0e4e.tar.gz scummvm-rg350-f7de3e8c386293b162225829a8268565408b0e4e.tar.bz2 scummvm-rg350-f7de3e8c386293b162225829a8268565408b0e4e.zip |
DREAMWEB: simplified register part definition
-rw-r--r-- | engines/dreamweb/runtime.h | 34 |
1 files changed, 13 insertions, 21 deletions
diff --git a/engines/dreamweb/runtime.h b/engines/dreamweb/runtime.h index 1d3096d48d..be83686fe3 100644 --- a/engines/dreamweb/runtime.h +++ b/engines/dreamweb/runtime.h @@ -11,15 +11,6 @@ namespace dreamgen { //fixme: name clash #undef random -struct LowPartOfRegister { - enum { Mask = 0xff }; - enum { Shift = 0 }; -}; -struct HighPartOfRegister { - enum { Mask = 0xff00 }; - enum { Shift = 8 }; -}; - struct Register { uint16 _value; inline Register(): _value() {} @@ -33,13 +24,12 @@ struct Register { } }; -template<typename P> +template<int Mask, int Shift> struct RegisterPart { - typedef P PartTraits; Register &_reg; uint8 _value; - inline RegisterPart(Register ®) : _reg(reg), _value(reg._value >> PartTraits::Shift) {} + inline RegisterPart(Register ®) : _reg(reg), _value(reg._value >> Shift) {} inline operator uint8&() { return _value; @@ -53,9 +43,11 @@ struct RegisterPart { return *this; } inline ~RegisterPart() { - _reg._value = (_reg._value & ~PartTraits::Mask) | (_value << PartTraits::Shift); + _reg._value = (_reg._value & Mask) | (_value << Shift); } }; +typedef RegisterPart<0xff, 0> LowPartOfRegister; +typedef RegisterPart<0xff00, 8> HighPartOfRegister; class WordRef { Common::Array<uint8> &_data; @@ -189,14 +181,14 @@ public: enum { kDefaultDataSegment = 0x1000 }; Register ax, dx, bx, cx, si, di; - RegisterPart<LowPartOfRegister> al; - RegisterPart<HighPartOfRegister> ah; - RegisterPart<LowPartOfRegister> bl; - RegisterPart<HighPartOfRegister> bh; - RegisterPart<LowPartOfRegister> cl; - RegisterPart<HighPartOfRegister> ch; - RegisterPart<LowPartOfRegister> dl; - RegisterPart<HighPartOfRegister> dh; + LowPartOfRegister al; + HighPartOfRegister ah; + LowPartOfRegister bl; + HighPartOfRegister bh; + LowPartOfRegister cl; + HighPartOfRegister ch; + LowPartOfRegister dl; + HighPartOfRegister dh; SegmentRef cs, ds, es; Flags flags; |