Rev 798 | Details | Compare with Previous | 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 | |||
800 | 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[]; |
||
800 | DimkaM | 16 | #else |
17 | struct TMakeRot |
||
18 | { |
||
19 | constexpr TMakeRot(); |
||
716 | lvd | 20 | |
800 | 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[]; |
800 | DimkaM | 35 | |
36 | |||
37 | #ifdef __ICL |
||
716 | lvd | 38 | extern unsigned char log_f[]; |
800 | DimkaM | 39 | #else |
40 | struct TLogf |
||
41 | { |
||
42 | constexpr TLogf(); |
||
716 | lvd | 43 | |
800 | 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[]; |
||
800 | DimkaM | 53 | |
54 | #ifdef __ICL |
||
716 | lvd | 55 | extern unsigned char adcf[]; |
800 | 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[]; |
||
800 | DimkaM | 74 | #else |
716 | lvd | 75 | |
800 | 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 | { |
||
796 | 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(); |