diff options
author | Vladimir Menshakov | 2011-06-12 01:42:42 +0400 |
---|---|---|
committer | Alyssa Milburn | 2011-06-15 17:34:14 +0200 |
commit | 53e49d1a508e6864a67582716b9752d2edafdd55 (patch) | |
tree | 77a36edfb674401637e7ea4e5af140d07c1bd250 /devtools | |
parent | 3e605f3cc41639d6d39a9ec7d1cc4369e50f24a2 (diff) | |
download | scummvm-rg350-53e49d1a508e6864a67582716b9752d2edafdd55.tar.gz scummvm-rg350-53e49d1a508e6864a67582716b9752d2edafdd55.tar.bz2 scummvm-rg350-53e49d1a508e6864a67582716b9752d2edafdd55.zip |
DREAMWEB: removed unused file
Diffstat (limited to 'devtools')
-rw-r--r-- | devtools/tasmrecover/runtime.h | 330 |
1 files changed, 0 insertions, 330 deletions
diff --git a/devtools/tasmrecover/runtime.h b/devtools/tasmrecover/runtime.h deleted file mode 100644 index 5824728283..0000000000 --- a/devtools/tasmrecover/runtime.h +++ /dev/null @@ -1,330 +0,0 @@ -#ifndef TASM_RECOVER_H__ -#define TASM_RECOVER_H__ - -#include <stdint.h> -#include <assert.h> -#include <vector> - -typedef uint16_t uint16; -typedef uint8_t uint8; -typedef int16_t int16; -typedef int8_t int8; - -//little endian -#define REG_LOW 0 -#define REG_HIGH 1 - -struct Register { - union { - uint16 _value; - uint8 _part[2]; - }; - inline Register(): _value() {} - inline Register& operator=(uint16_t v) { _value = v; return *this; } - inline operator uint16&() { return _value; } - inline void cbw() { - if (_value & 0x80) - _value |= 0xff00; - else - _value &= 0xff; - } -}; - -template<unsigned PART> -struct RegisterPart { - uint8_t &_part; - - inline RegisterPart(Register ®) : _part(reg._part[PART]) {} - - inline operator uint8&() { - return _part; - } - inline RegisterPart& operator=(const RegisterPart& o) { - _part = o._part; - return *this; - } - inline RegisterPart& operator=(uint8_t v) { - _part = v; - return *this; - } -}; - -struct WordRef { - std::vector<uint8> &data; - unsigned index; - bool changed; - uint16_t value; - - inline WordRef(std::vector<uint8> &data, unsigned index) : data(data), index(index), changed(false) { - assert(index + 1 < data.size()); - value = data[index] | (data[index + 1] << 8); - } - inline WordRef& operator=(const WordRef &ref) { - changed = true; - value = ref.value; - return *this; - } - inline WordRef& operator=(uint16_t v) { - changed = true; - value = v; - return *this; - } - inline operator uint16_t() const { - return value; - } - inline operator uint16_t&() { - return value; - } - inline ~WordRef() { - if (changed) { - data[index] = value & 0xff; - data[index + 1] = value >> 8; - } - } -}; - -struct Segment { - std::vector<uint8> data; - inline uint8_t &byte(unsigned index) { - assert(index < data.size()); - return data[index]; - } - inline uint16_t word(unsigned index) const { - assert(index + 1 < data.size()); - return data[index] | (data[index + 1] << 8); - } - - inline WordRef word(unsigned index) { - return WordRef(data, index); - } -}; - - -struct SegmentRef { - public: - uint16_t value; - std::vector<uint8> *data; - inline SegmentRef& operator=(const SegmentRef &o) { - data = o.data; - return *this; - } - inline SegmentRef& operator=(const uint16_t id) { - return *this; - } - inline uint8_t &byte(unsigned index) { - assert(index < data->size()); - return (*data)[index]; - } - inline uint16_t word(unsigned index) const { - assert(index + 1 < data->size()); - return (*data)[index] | ((*data)[index + 1] << 8); - } - - inline operator uint16_t() const { - return value; - } - - inline WordRef word(unsigned index) { - return WordRef(*data, index); - } -}; - -struct Flags { - bool _z, _c, _s, _o; - inline Flags(): _z(true), _c(false), _s(false), _o(false) {} - - inline bool z() const { return _z; } - inline bool c() const { return _c; } - inline bool s() const { return _s; } - //complex flags: - inline bool g() const { return !_z && _s == _o; } - inline bool ge() const { return _z || _s == _o; } - inline bool l() const { return !_z && _s != _o; } - inline bool le() const { return _z || _s != _o; } - - inline void update_sign(uint8 v) { - bool s = v & 0x80; - _o = s != _s; - _s = s; - _z = v == 0; - } - - inline void update(uint16 v) { - bool s = v & 0x8000; - _o = s != _s; - _s = s; - _z = v == 0; - } -}; - -template<typename Data> -struct RegisterContext { - Register ax, dx, bx, cx, si, di; - RegisterPart<REG_LOW> al; - RegisterPart<REG_HIGH> ah; - RegisterPart<REG_LOW> bl; - RegisterPart<REG_HIGH> bh; - RegisterPart<REG_LOW> cl; - RegisterPart<REG_HIGH> ch; - RegisterPart<REG_LOW> dl; - RegisterPart<REG_HIGH> dh; - - SegmentRef cs, ds, es; - Flags flags; - - inline RegisterContext(): al(ax), ah(ax), bl(bx), bh(bx), cl(cx), ch(cx), dl(dx), dh(dx) {} - - inline void _cmp(uint8 a, uint8 b) { - uint8 x = a; - _sub(x, b); - } - inline void _cmp(uint16 a, uint16 b) { - uint16 x = a; - _sub(x, b); - } - inline void _test(uint8 a, uint8 b) { - uint8 x = a; - _and(x, b); - } - inline void _test(uint16 a, uint16 b) { - uint16 x = a; - _and(x, b); - } - - inline void _add(uint8 &dst, uint8 src) { - flags._c = dst + src < dst; - dst += src; - flags.update(dst); - } - inline void _add(uint16 &dst, uint16 src) { - flags._c = dst + src < dst; - dst += src; - flags.update(dst); - } - inline void _sub(uint8 &dst, uint8 src) { - flags._c = dst < src; - dst -= src; - flags.update(dst); - } - inline void _sub(uint16 &dst, uint16 src) { - flags._c = dst < src; - dst -= src; - flags.update(dst); - } - - inline void _and(uint8 &dst, uint8 src) { - dst &= src; - flags._c = false; - flags.update(dst); - } - inline void _and(uint16 &dst, uint16 src) { - dst &= src; - flags._c = false; - flags.update(dst); - } - inline void _or(uint8 &dst, uint8 src) { - dst |= src; - flags._c = false; - flags.update(dst); - } - inline void _or(uint16 &dst, uint16 src) { - dst |= src; - flags._c = false; - flags.update(dst); - } - - inline void _xor(uint8 &dst, uint8 src) { - dst ^= src; - flags._c = false; - flags.update(dst); - } - inline void _xor(uint16 &dst, uint16 src) { - dst ^= src; - flags._c = false; - flags.update(dst); - } - - inline void _shr(uint8 &dst, uint8 src) {} - inline void _shr(uint16 &dst, uint8 src) {} - inline void _shl(uint8 &dst, uint8 src) {} - inline void _shl(uint16 &dst, uint8 src) {} - inline void _mul(uint8 src) { - unsigned r = unsigned(al) * src; - ax = (uint16)r; - flags._c = r >= 0x10000; - flags._z = r == 0; - bool s = r & 0x8000; - flags._o = s != flags._s; - flags._s = s; - } - inline void _mul(uint16 src) { - unsigned r = unsigned(ax) * src; //assuming here that we have at least 32 bits - dx = (r >> 16) & 0xffff; - ax = r & 0xffff; - flags._c = false;//fixme - flags._z = r == 0; - bool s = r & 0x80000000; - flags._o = s != flags._s; - flags._s = s; - } - inline void _neg(uint8 &src) { - src = ~src; - flags._c = false; - flags.update(src); - } - inline void _neg(uint16 &src) { - src = ~src; - flags._c = false; - flags.update(src); - } - - inline void _movsb() { - es.byte(di++) = ds.byte(si++); - } - inline void _movsw() { - es.word(di) = ds.word(si); - di += 2; - si += 2; - } - inline void _lodsb() { - al = ds.byte(si++); - } - inline void _lodsw() { - ax = ds.word(si); - si += 2; - } - inline void _stosb() { - es.byte(di++) = al; - } - inline void _stosw() { - es.word(di) = al; - di += 2; - } - - inline void _xchg(uint16 &a, uint16 &b) { - uint16 x = a; - a = b; - b = x; - } - - inline void _xchg(uint8 &a, uint8 &b) { - uint8 t = a; - a = b; - b = t; - } - - std::vector<uint16> stack; - inline void push(uint16 v) { - stack.push_back(v); - } - inline uint16 pop() { - uint16 v = stack.back(); - stack.pop_back(); - return v; - } - - Data data; -}; - -#endif - |