aboutsummaryrefslogtreecommitdiff
path: root/engines/dreamweb/runtime.h
diff options
context:
space:
mode:
authorVladimir2011-06-07 00:53:47 +0400
committerAlyssa Milburn2011-06-15 17:30:29 +0200
commit1ee6b0af692d0dc478ad50ec32c8a7144c40ee40 (patch)
tree967a1bcea0f737bb2882b3c8e91805729e790aed /engines/dreamweb/runtime.h
parent781d06709f4e5dbc0812c285248a08452f9f7005 (diff)
downloadscummvm-rg350-1ee6b0af692d0dc478ad50ec32c8a7144c40ee40.tar.gz
scummvm-rg350-1ee6b0af692d0dc478ad50ec32c8a7144c40ee40.tar.bz2
scummvm-rg350-1ee6b0af692d0dc478ad50ec32c8a7144c40ee40.zip
DREAMWEB: get rid of data, added simple segment management
Diffstat (limited to 'engines/dreamweb/runtime.h')
-rw-r--r--engines/dreamweb/runtime.h35
1 files changed, 26 insertions, 9 deletions
diff --git a/engines/dreamweb/runtime.h b/engines/dreamweb/runtime.h
index fb634b6e05..6adcdc73be 100644
--- a/engines/dreamweb/runtime.h
+++ b/engines/dreamweb/runtime.h
@@ -114,12 +114,10 @@ class SegmentRef {
Segment *_segment;
public:
- SegmentRef(Context *ctx): _context(ctx), _value(), _segment() {
+ SegmentRef(Context *ctx, uint16 value = 0, Segment *segment = 0): _context(ctx), _value(value), _segment(segment) {
}
- inline void reset(uint16 value) {
-
- }
+ inline void reset(uint16 value);
inline SegmentRef& operator=(const uint16 id) {
return *this;
@@ -143,6 +141,11 @@ public:
assert(_segment != 0);
return _segment->word(index);
}
+
+ inline void assign(const uint8 *b, const uint8 *e) {
+ assert(_segment != 0);
+ _segment->assign(b, e);
+ }
};
struct Flags {
@@ -174,9 +177,12 @@ struct Flags {
};
class Context {
- Common::HashMap<uint16, Segment> _segments;
+ typedef Common::HashMap<uint16, Segment> SegmentMap;
+ SegmentMap _segments;
public:
+ enum { kDefaultDataSegment };
+
Register ax, dx, bx, cx, si, di;
RegisterPart<kLowPartOfRegister> al;
RegisterPart<kHighPartOfRegister> ah;
@@ -191,9 +197,18 @@ public:
Flags flags;
inline Context(): al(ax), ah(ax), bl(bx), bh(bx), cl(cx), ch(cx), dl(dx), dh(dx), cs(this), ds(this), es(this) {
-
+ _segments[kDefaultDataSegment] = Segment();
+ cs.reset(1);
+ ds.reset(1);
+ es.reset(1);
}
-
+
+ SegmentRef getSegment(uint16 value) {
+ SegmentMap::iterator i = _segments.find(value);
+ assert(i != _segments.end());
+ return SegmentRef(this, value, &i->_value);
+ }
+
inline void _cmp(uint8 a, uint8 b) {
uint8 x = a;
_sub(x, b);
@@ -342,10 +357,12 @@ public:
stack.pop_back();
return v;
}
-
- Segment data;
};
+inline void SegmentRef::reset(uint16 value) {
+ *this = _context->getSegment(value);
+}
+
}
#endif