Subversion Repositories pentevo

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
716 lvd 1
#pragma once
2
extern const unsigned char rl0[];
3
extern const unsigned char rl1[];
4
 
5
extern const unsigned char rr0[];
6
extern const unsigned char rr1[];
7
 
805 DimkaM 8
extern const unsigned char rlcf[];
9
extern const unsigned char rrcf[];
10
 
11
#ifdef __ICL
716 lvd 12
extern unsigned char rol[];
13
extern unsigned char ror[];
14
extern unsigned char rlcaf[];
15
extern unsigned char rrcaf[];
805 DimkaM 16
#else
17
struct TMakeRot
18
{
19
    constexpr TMakeRot();
716 lvd 20
 
805 DimkaM 21
    u8 rol[0x100];
22
    u8 ror[0x100];
23
    u8 rlcaf[0x100];
24
    u8 rrcaf[0x100];
25
};
26
 
27
extern const TMakeRot MakeRot;
28
#define rol MakeRot.rol
29
#define ror MakeRot.ror
30
#define rlcaf MakeRot.rlcaf
31
#define rrcaf MakeRot.rrcaf
32
#endif
33
 
716 lvd 34
extern const unsigned char sraf[];
805 DimkaM 35
 
36
 
37
#ifdef __ICL
716 lvd 38
extern unsigned char log_f[];
805 DimkaM 39
#else
40
struct TLogf
41
{
42
    constexpr TLogf();
716 lvd 43
 
805 DimkaM 44
    u8 log_f[0x100];
45
};
46
 
47
extern const TLogf Logf;
48
#define log_f Logf.log_f
49
#endif
50
 
716 lvd 51
extern const unsigned char incf[];
52
extern const unsigned char decf[];
805 DimkaM 53
 
54
#ifdef __ICL
716 lvd 55
extern unsigned char adcf[];
805 DimkaM 56
#else
57
 
58
struct TMakeAdcf
59
{
60
    constexpr TMakeAdcf();
61
 
62
    u8 adcf[0x20000];
63
};
64
 
65
extern const TMakeAdcf MakeAdcf;
66
 
67
#define adcf MakeAdcf.adcf
68
#endif
69
 
70
#ifdef __ICL
716 lvd 71
extern unsigned char sbcf[];
72
extern unsigned char cpf[];
73
extern unsigned char cpf8b[];
805 DimkaM 74
#else
716 lvd 75
 
805 DimkaM 76
struct TMakeSbc
77
{
78
    constexpr TMakeSbc();
79
 
80
    u8 sbcf[0x20000];
81
    u8 cpf[0x10000];
82
    u8 cpf8b[0x10000];
83
};
84
 
85
extern const TMakeSbc MakeSbc;
86
 
87
#define sbcf MakeSbc.sbcf
88
#define cpf MakeSbc.cpf
89
#define cpf8b MakeSbc.cpf8b
90
#endif
91
 
716 lvd 92
Z80INLINE void and8(Z80 *cpu, unsigned char src)
93
{
94
   cpu->a &= src;
95
   cpu->f = log_f[cpu->a] | HF;
96
}
97
 
98
Z80INLINE void or8(Z80 *cpu, unsigned char src)
99
{
100
   cpu->a |= src;
101
   cpu->f = log_f[cpu->a];
102
}
103
 
104
Z80INLINE void xor8(Z80 *cpu, unsigned char src)
105
{
106
   cpu->a ^= src;
107
   cpu->f = log_f[cpu->a];
108
}
109
 
110
Z80INLINE void bitmem(Z80 *cpu, unsigned char src, unsigned char bit)
111
{
112
   cpu->f = log_f[src & (1 << bit)] | HF | (cpu->f & CF);
113
   cpu->f = (cpu->f & ~(F3|F5)) | (cpu->memh & (F3|F5));
114
}
115
 
116
Z80INLINE void set(unsigned char &src, unsigned char bit)
117
{
118
   src |= (1 << bit);
119
}
120
 
121
Z80INLINE void res(unsigned char &src, unsigned char bit)
122
{
123
   src &= ~(1 << bit);
124
}
125
 
126
Z80INLINE void bit(Z80 *cpu, unsigned char src, unsigned char bit)
127
{
128
   cpu->f = log_f[src & (1 << bit)] | HF | (cpu->f & CF) | (src & (F3|F5));
129
}
130
 
131
Z80INLINE unsigned char resbyte(unsigned char src, unsigned char bit)
132
{
133
   return src & ~(1 << bit);
134
}
135
 
136
Z80INLINE unsigned char setbyte(unsigned char src, unsigned char bit)
137
{
784 DimkaM 138
   return u8(src | (1U << bit));
716 lvd 139
}
140
 
141
Z80INLINE void inc8(Z80 *cpu, unsigned char &x)
142
{
143
   cpu->f = incf[x] | (cpu->f & CF);
144
   x++;
145
}
146
 
147
Z80INLINE void dec8(Z80 *cpu, unsigned char &x)
148
{
149
   cpu->f = decf[x] | (cpu->f & CF);
150
   x--;
151
}
152
 
153
Z80INLINE void add8(Z80 *cpu, unsigned char src)
154
{
155
   cpu->f = adcf[cpu->a + src*0x100];
156
   cpu->a += src;
157
}
158
 
159
Z80INLINE void sub8(Z80 *cpu, unsigned char src)
160
{
161
   cpu->f = sbcf[cpu->a*0x100 + src];
162
   cpu->a -= src;
163
}
164
 
165
Z80INLINE void adc8(Z80 *cpu, unsigned char src)
166
{
167
   unsigned char carry = ((cpu->f) & CF);
168
   cpu->f = adcf[cpu->a + src*0x100 + 0x10000*carry];
169
   cpu->a += src + carry;
170
}
171
 
172
Z80INLINE void sbc8(Z80 *cpu, unsigned char src)
173
{
174
   unsigned char carry = ((cpu->f) & CF);
175
   cpu->f = sbcf[cpu->a*0x100 + src + 0x10000*carry];
176
   cpu->a -= src + carry;
177
}
178
 
179
Z80INLINE void cp8(Z80 *cpu, unsigned char src)
180
{
181
   cpu->f = cpf[cpu->a*0x100 + src];
182
}
183
 
184
void init_z80tables();