root/lang/ruby/CPU-Z80/trunk/lib/CPU/Z80/register8.rb @ 4473

Revision 4473, 1.4 kB (checked in by mrkn, 7 years ago)

lang/ruby/CPU-Z80: import.

  • Property svn:keywords set to Id
Line 
1# $Id$
2
3module CPU
4  module Z80
5    class Register8
6      MASK8 = 0xFF
7
8      attr_reader :value
9
10      def value=(v)
11        @value = v & MASK8
12      end
13
14      def negative?
15        self.value & 0x80 != 0
16      end
17
18      def increment!
19        self.value += 1
20        self.value
21      end
22
23      def decrement!
24        self.value -= 1
25        self.value
26      end
27
28      def lshift!(n)
29        self.value <<= n
30        self.value
31      end
32
33      def rshift!(n, arithmetic)
34        v = if arithmetic and self.negative? then msb1(n) else 0 end
35        self.value = (self.value >> n) | v
36        self.value
37      end
38
39      def lrotate!(n)
40        v = (msb1(n) & self.value) >> 8 - n
41        self.value = (self.value << n) | v
42        self.value
43      end
44
45      def rrotate!(n)
46        v = self.value << 8 - n
47        self.value = lsb1(n) & (self.value >> n) | v
48        self.value
49      end
50
51      def bit_test(n)
52        self.value & (1 << n) != 0
53      end
54
55      def bit_set!(n)
56        self.value |= 1 << n
57        self.value
58      end
59
60      def bit_reset!(n)
61        self.value &= ~(1 << n)
62        self.value
63      end
64
65      def initialize(v=nil)
66        self.value = v || 0
67      end
68
69      private
70
71      def lsb1(n)
72        MASK8 >> n
73      end
74
75      def msb1(n)
76        ~lsb1(n) & MASK8
77      end
78    end
79  end
80end
81
82# Local Variables:
83# coding: utf-8
84# mode: ruby
85# ruby-indent-level: 2
86# ruby-indent-tabs-mode: nil
87# End:
Note: See TracBrowser for help on using the browser.