]> Shamusworld >> Repos - thunder/blob - test/union.cpp
ef052abe4e1cc60122d17b4c5e4b4af53495ec3d
[thunder] / test / union.cpp
1 // Union bit fields...
2
3 //#include <dos.h>
4 //#include <conio.h>
5 #include <fstream>
6 #include <iostream>
7 #include <string.h>
8 #include <iomanip>
9 #include <stdio.h>
10 #include <stdlib.h>
11
12 using namespace std;
13
14 union {
15         struct {
16                 unsigned char C: 1;   // Carry flag 
17                 unsigned char V: 1;   // oVerflow flag
18                 unsigned char Z: 1;   // Zero flag
19                 unsigned char N: 1;   // Negative flag
20                 unsigned char I: 1;   // IRQ flag
21                 unsigned char H: 1;   // Half carry flag
22                 unsigned char F: 1;   // Fast IRQ flag
23                 unsigned char E: 1;   // Entire flag
24                 } flag;
25         unsigned char byte; } cc;
26
27 union BYTE {
28         struct {
29                 unsigned char b0: 1;  unsigned char b1: 1;  unsigned char b2: 1;
30                 unsigned char b3: 1;  unsigned char b4: 1;  unsigned char b5: 1;
31                 unsigned char b6: 1;  unsigned char b7: 1;
32                 } bit;
33         unsigned char byte; };
34
35 union WORD {
36         struct { unsigned char lo: 8;  unsigned char hi: 8; } b;
37         unsigned int word; } hilo;
38
39
40 int main(int, char * [])
41 {
42         for(int i=0; i<256; i++)
43         {
44                 cc.byte = i;
45                 cout << (cc.flag.E ? "1" : ".") << " " << (cc.flag.F ? "1" : ".") << " "
46                         << (cc.flag.H ? "1" : ".") << " " << (cc.flag.I ? "1" : ".") << " "
47                         << (cc.flag.N ? "1" : ".") << " " << (cc.flag.Z ? "1" : ".") << " "
48                         << (cc.flag.V ? "1" : ".") << " " << (cc.flag.C ? "1" : ".") << endl;
49         }
50
51         hilo.word = 0x6A44;
52         cout << hex << hilo.word << " "
53                 << (int) hilo.b.lo << " " << (int) hilo.b.hi << endl;
54
55         BYTE b;
56         b.byte = (unsigned char)0xA5;
57         cout << "Byte = " << hex << (int)b.byte << ", bits = "
58                 << (b.bit.b7 ? "1" : "0")
59                 << (b.bit.b6 ? "1" : "0")
60                 << (b.bit.b5 ? "1" : "0")
61                 << (b.bit.b4 ? "1" : "0")
62                 << (b.bit.b3 ? "1" : "0")
63                 << (b.bit.b2 ? "1" : "0")
64                 << (b.bit.b1 ? "1" : "0")
65                 << (b.bit.b0 ? "1" : "0")
66                 << endl;
67
68         b.bit.b4 ^= 1;
69         cout << "Byte = " << hex << (int)b.byte << ", bits = "
70                 << (b.bit.b7 ? "1" : "0")
71                 << (b.bit.b6 ? "1" : "0")
72                 << (b.bit.b5 ? "1" : "0")
73                 << (b.bit.b4 ? "1" : "0")
74                 << (b.bit.b3 ? "1" : "0")
75                 << (b.bit.b2 ? "1" : "0")
76                 << (b.bit.b1 ? "1" : "0")
77                 << (b.bit.b0 ? "1" : "0")
78                 << endl;
79
80         return 0;
81 }
82