1 
2 // NOTE for bit string/field addressing
3 // ************************************
4 // modDim must be passed as 10 for bit string instructions,
5 // and as 11 for bit field instructions
6 
7 
8 
9 // Output variables for ReadAMAddress()
10 static UINT8 amFlag;
11 static UINT32 amOut;
12 static UINT32 bamOffset;
13 
14 // Appo temp var
15 static UINT32 amLength1,amLength2;
16 
17 
18 // Global vars used by AM functions
19 static UINT32 modAdd;
20 static UINT8 modM;
21 static UINT8 modVal;
22 static UINT8 modVal2;
23 static UINT8 modWriteValB;
24 static UINT16 modWriteValH;
25 static UINT32 modWriteValW;
26 static UINT8 modDim;
27 
28 // Addressing mode functions and tables
29 #include "am1.c" // ReadAM
30 #include "am2.c" // ReadAMAddress
31 #include "am3.c" // WriteAM
32 
33 /*
34   Input:
35   modAdd
36     modDim
37 
38   Output:
39     amOut
40     amLength
41 */
42 
ReadAM(void)43 static UINT32 ReadAM(void)
44 {
45 	modM=modM?1:0;
46 	modVal=OpRead8(modAdd);
47 	return AMTable1[modM][modVal>>5]();
48 }
49 
BitReadAM(void)50 static UINT32 BitReadAM(void)
51 {
52 	modM=modM?1:0;
53 	modVal=OpRead8(modAdd);
54 	return BAMTable1[modM][modVal>>5]();
55 }
56 
57 
58 
59 /*
60   Input:
61   modAdd
62     modDim
63 
64   Output:
65     amOut
66     amFlag
67     amLength
68 */
69 
ReadAMAddress(void)70 static UINT32 ReadAMAddress(void)
71 {
72 	modM=modM?1:0;
73 	modVal=OpRead8(modAdd);
74 	return AMTable2[modM][modVal>>5]();
75 }
76 
BitReadAMAddress(void)77 static UINT32 BitReadAMAddress(void)
78 {
79 	modM=modM?1:0;
80 	modVal=OpRead8(modAdd);
81 	return BAMTable2[modM][modVal>>5]();
82 }
83 
84 /*
85   Input:
86   modAdd
87     modDim
88     modWriteValB/H/W
89 
90   Output:
91     amOut
92     amLength
93 */
94 
WriteAM(void)95 static UINT32 WriteAM(void)
96 {
97 	modM=modM?1:0;
98 	modVal=OpRead8(modAdd);
99 	return AMTable3[modM][modVal>>5]();
100 }
101 
102 
103