[NTVDM]
[reactos.git] / subsystems / ntvdm / registers.c
1 /*
2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: ReactOS Virtual DOS Machine
4 * FILE: registers.c
5 * PURPOSE: Exported functions for manipulating registers
6 * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr)
7 */
8
9 /* INCLUDES *******************************************************************/
10
11 #define NDEBUG
12
13 #include "emulator.h"
14
15 /* PUBLIC FUNCTIONS ***********************************************************/
16
17 ULONG
18 CDECL
19 getEAX(VOID)
20 {
21 return EmulatorContext.GeneralRegs[EMULATOR_REG_AX].Long;
22 }
23
24 VOID
25 CDECL
26 setEAX(ULONG Value)
27 {
28 EmulatorContext.GeneralRegs[EMULATOR_REG_AX].Long = Value;
29 }
30
31 USHORT
32 CDECL
33 getAX(VOID)
34 {
35 return EmulatorContext.GeneralRegs[EMULATOR_REG_AX].LowWord;
36 }
37
38 VOID
39 CDECL
40 setAX(USHORT Value)
41 {
42 EmulatorContext.GeneralRegs[EMULATOR_REG_AX].LowWord = Value;
43 }
44
45 UCHAR
46 CDECL
47 getAH(VOID)
48 {
49 return EmulatorContext.GeneralRegs[EMULATOR_REG_AX].HighByte;
50 }
51
52 VOID
53 CDECL
54 setAH(UCHAR Value)
55 {
56 EmulatorContext.GeneralRegs[EMULATOR_REG_AX].HighByte = Value;
57 }
58
59 UCHAR
60 CDECL
61 getAL(VOID)
62 {
63 return EmulatorContext.GeneralRegs[EMULATOR_REG_AX].LowByte;
64 }
65
66 VOID
67 CDECL
68 setAL(UCHAR Value)
69 {
70 EmulatorContext.GeneralRegs[EMULATOR_REG_AX].LowByte = Value;
71 }
72
73 ULONG
74 CDECL
75 getEBX(VOID)
76 {
77 return EmulatorContext.GeneralRegs[EMULATOR_REG_BX].Long;
78 }
79
80 VOID
81 CDECL
82 setEBX(ULONG Value)
83 {
84 EmulatorContext.GeneralRegs[EMULATOR_REG_BX].Long = Value;
85 }
86
87 USHORT
88 CDECL
89 getBX(VOID)
90 {
91 return EmulatorContext.GeneralRegs[EMULATOR_REG_BX].LowWord;
92 }
93
94 VOID
95 CDECL
96 setBX(USHORT Value)
97 {
98 EmulatorContext.GeneralRegs[EMULATOR_REG_BX].LowWord = Value;
99 }
100
101 UCHAR
102 CDECL
103 getBH(VOID)
104 {
105 return EmulatorContext.GeneralRegs[EMULATOR_REG_BX].HighByte;
106 }
107
108 VOID
109 CDECL
110 setBH(UCHAR Value)
111 {
112 EmulatorContext.GeneralRegs[EMULATOR_REG_BX].HighByte = Value;
113 }
114
115 UCHAR
116 CDECL
117 getBL(VOID)
118 {
119 return EmulatorContext.GeneralRegs[EMULATOR_REG_BX].LowByte;
120 }
121
122 VOID
123 CDECL
124 setBL(UCHAR Value)
125 {
126 EmulatorContext.GeneralRegs[EMULATOR_REG_BX].LowByte = Value;
127 }
128
129
130
131 ULONG
132 CDECL
133 getECX(VOID)
134 {
135 return EmulatorContext.GeneralRegs[EMULATOR_REG_CX].Long;
136 }
137
138 VOID
139 CDECL
140 setECX(ULONG Value)
141 {
142 EmulatorContext.GeneralRegs[EMULATOR_REG_CX].Long = Value;
143 }
144
145 USHORT
146 CDECL
147 getCX(VOID)
148 {
149 return EmulatorContext.GeneralRegs[EMULATOR_REG_CX].LowWord;
150 }
151
152 VOID
153 CDECL
154 setCX(USHORT Value)
155 {
156 EmulatorContext.GeneralRegs[EMULATOR_REG_CX].LowWord = Value;
157 }
158
159 UCHAR
160 CDECL
161 getCH(VOID)
162 {
163 return EmulatorContext.GeneralRegs[EMULATOR_REG_CX].HighByte;
164 }
165
166 VOID
167 CDECL
168 setCH(UCHAR Value)
169 {
170 EmulatorContext.GeneralRegs[EMULATOR_REG_CX].HighByte = Value;
171 }
172
173 UCHAR
174 CDECL
175 getCL(VOID)
176 {
177 return EmulatorContext.GeneralRegs[EMULATOR_REG_CX].LowByte;
178 }
179
180 VOID
181 CDECL
182 setCL(UCHAR Value)
183 {
184 EmulatorContext.GeneralRegs[EMULATOR_REG_CX].LowByte = Value;
185 }
186
187
188
189 ULONG
190 CDECL
191 getEDX(VOID)
192 {
193 return EmulatorContext.GeneralRegs[EMULATOR_REG_DX].Long;
194 }
195
196 VOID
197 CDECL
198 setEDX(ULONG Value)
199 {
200 EmulatorContext.GeneralRegs[EMULATOR_REG_DX].Long = Value;
201 }
202
203 USHORT
204 CDECL
205 getDX(VOID)
206 {
207 return EmulatorContext.GeneralRegs[EMULATOR_REG_DX].LowWord;
208 }
209
210 VOID
211 CDECL
212 setDX(USHORT Value)
213 {
214 EmulatorContext.GeneralRegs[EMULATOR_REG_DX].LowWord = Value;
215 }
216
217 UCHAR
218 CDECL
219 getDH(VOID)
220 {
221 return EmulatorContext.GeneralRegs[EMULATOR_REG_DX].HighByte;
222 }
223
224 VOID
225 CDECL
226 setDH(UCHAR Value)
227 {
228 EmulatorContext.GeneralRegs[EMULATOR_REG_DX].HighByte = Value;
229 }
230
231 UCHAR
232 CDECL
233 getDL(VOID)
234 {
235 return EmulatorContext.GeneralRegs[EMULATOR_REG_DX].LowByte;
236 }
237
238 VOID
239 CDECL
240 setDL(UCHAR Value)
241 {
242 EmulatorContext.GeneralRegs[EMULATOR_REG_DX].LowByte = Value;
243 }
244
245
246
247 ULONG
248 CDECL
249 getESP(VOID)
250 {
251 return EmulatorGetRegister(EMULATOR_REG_SP);
252 }
253
254 VOID
255 CDECL
256 setESP(ULONG Value)
257 {
258 EmulatorSetStack(EmulatorGetRegister(EMULATOR_REG_SS), Value);
259 }
260
261 USHORT
262 CDECL
263 getSP(VOID)
264 {
265 return LOWORD(EmulatorGetRegister(EMULATOR_REG_SP));
266 }
267
268 VOID
269 CDECL
270 setSP(USHORT Value)
271 {
272 EmulatorSetStack(EmulatorGetRegister(EMULATOR_REG_SS), Value);
273 }
274
275
276
277 ULONG
278 CDECL
279 getEBP(VOID)
280 {
281 return EmulatorContext.GeneralRegs[EMULATOR_REG_BP].Long;
282 }
283
284 VOID
285 CDECL
286 setEBP(ULONG Value)
287 {
288 EmulatorContext.GeneralRegs[EMULATOR_REG_BP].Long = Value;
289 }
290
291 USHORT
292 CDECL
293 getBP(VOID)
294 {
295 return EmulatorContext.GeneralRegs[EMULATOR_REG_BP].LowWord;
296 }
297
298 VOID
299 CDECL
300 setBP(USHORT Value)
301 {
302 EmulatorContext.GeneralRegs[EMULATOR_REG_BP].LowWord = Value;
303 }
304
305
306
307 ULONG
308 CDECL
309 getESI(VOID)
310 {
311 return EmulatorContext.GeneralRegs[EMULATOR_REG_SI].Long;
312 }
313
314 VOID
315 CDECL
316 setESI(ULONG Value)
317 {
318 EmulatorContext.GeneralRegs[EMULATOR_REG_SI].Long = Value;
319 }
320
321 USHORT
322 CDECL
323 getSI(VOID)
324 {
325 return EmulatorContext.GeneralRegs[EMULATOR_REG_SI].LowWord;
326 }
327
328 VOID
329 CDECL
330 setSI(USHORT Value)
331 {
332 EmulatorContext.GeneralRegs[EMULATOR_REG_SI].LowWord = Value;
333 }
334
335
336
337 ULONG
338 CDECL
339 getEDI(VOID)
340 {
341 return EmulatorContext.GeneralRegs[EMULATOR_REG_DI].Long;
342 }
343
344 VOID
345 CDECL
346 setEDI(ULONG Value)
347 {
348 EmulatorContext.GeneralRegs[EMULATOR_REG_DI].Long = Value;
349 }
350
351 USHORT
352 CDECL
353 getDI(VOID)
354 {
355 return EmulatorContext.GeneralRegs[EMULATOR_REG_DI].LowWord;
356 }
357
358 VOID
359 CDECL
360 setDI(USHORT Value)
361 {
362 EmulatorContext.GeneralRegs[EMULATOR_REG_DI].LowWord = Value;
363 }
364
365
366
367 ULONG
368 CDECL
369 getEIP(VOID)
370 {
371 return EmulatorGetProgramCounter();
372 }
373
374 VOID
375 CDECL
376 setEIP(ULONG Value)
377 {
378 EmulatorExecute(EmulatorGetRegister(EMULATOR_REG_CS), Value);
379 }
380
381 USHORT
382 CDECL
383 getIP(VOID)
384 {
385 return LOWORD(EmulatorGetProgramCounter());
386 }
387
388 VOID
389 CDECL
390 setIP(USHORT Value)
391 {
392 EmulatorExecute(EmulatorGetRegister(EMULATOR_REG_CS), Value);
393 }
394
395
396
397 USHORT
398 CDECL
399 getCS(VOID)
400 {
401 return EmulatorGetRegister(EMULATOR_REG_CS);
402 }
403
404 VOID
405 CDECL
406 setCS(USHORT Value)
407 {
408 EmulatorSetRegister(EMULATOR_REG_CS, Value);
409 }
410
411 USHORT
412 CDECL
413 getSS(VOID)
414 {
415 return EmulatorGetRegister(EMULATOR_REG_SS);
416 }
417
418 VOID
419 CDECL
420 setSS(USHORT Value)
421 {
422 EmulatorSetRegister(EMULATOR_REG_SS, Value);
423 }
424
425 USHORT
426 CDECL
427 getDS(VOID)
428 {
429 return EmulatorGetRegister(EMULATOR_REG_DS);
430 }
431
432 VOID
433 CDECL
434 setDS(USHORT Value)
435 {
436 EmulatorSetRegister(EMULATOR_REG_DS, Value);
437 }
438
439 USHORT
440 CDECL
441 getES(VOID)
442 {
443 return EmulatorGetRegister(EMULATOR_REG_ES);
444 }
445
446 VOID
447 CDECL
448 setES(USHORT Value)
449 {
450 EmulatorSetRegister(EMULATOR_REG_ES, Value);
451 }
452
453 USHORT
454 CDECL
455 getFS(VOID)
456 {
457 return EmulatorGetRegister(EMULATOR_REG_FS);
458 }
459
460 VOID
461 CDECL
462 setFS(USHORT Value)
463 {
464 EmulatorSetRegister(EMULATOR_REG_FS, Value);
465 }
466
467 USHORT
468 CDECL
469 getGS(VOID)
470 {
471 return EmulatorGetRegister(EMULATOR_REG_GS);
472 }
473
474 VOID
475 CDECL
476 setGS(USHORT Value)
477 {
478 EmulatorSetRegister(EMULATOR_REG_GS, Value);
479 }
480
481
482
483 ULONG
484 CDECL
485 getCF(VOID)
486 {
487 return EmulatorGetFlag(EMULATOR_FLAG_CF);
488 }
489
490 VOID
491 CDECL
492 setCF(ULONG Flag)
493 {
494 if (Flag & 1)
495 EmulatorSetFlag(EMULATOR_FLAG_CF);
496 else
497 EmulatorClearFlag(EMULATOR_FLAG_CF);
498 }
499
500 ULONG
501 CDECL
502 getPF(VOID)
503 {
504 return EmulatorGetFlag(EMULATOR_FLAG_PF);
505 }
506
507 VOID
508 CDECL
509 setPF(ULONG Flag)
510 {
511 if (Flag & 1)
512 EmulatorSetFlag(EMULATOR_FLAG_PF);
513 else
514 EmulatorClearFlag(EMULATOR_FLAG_PF);
515 }
516
517 ULONG
518 CDECL
519 getAF(VOID)
520 {
521 return EmulatorGetFlag(EMULATOR_FLAG_AF);
522 }
523
524 VOID
525 CDECL
526 setAF(ULONG Flag)
527 {
528 if (Flag & 1)
529 EmulatorSetFlag(EMULATOR_FLAG_AF);
530 else
531 EmulatorClearFlag(EMULATOR_FLAG_AF);
532 }
533
534 ULONG
535 CDECL
536 getZF(VOID)
537 {
538 return EmulatorGetFlag(EMULATOR_FLAG_ZF);
539 }
540
541 VOID
542 CDECL
543 setZF(ULONG Flag)
544 {
545 if (Flag & 1)
546 EmulatorSetFlag(EMULATOR_FLAG_ZF);
547 else
548 EmulatorClearFlag(EMULATOR_FLAG_ZF);
549 }
550
551 ULONG
552 CDECL
553 getSF(VOID)
554 {
555 return EmulatorGetFlag(EMULATOR_FLAG_SF);
556 }
557
558 VOID
559 CDECL
560 setSF(ULONG Flag)
561 {
562 if (Flag & 1)
563 EmulatorSetFlag(EMULATOR_FLAG_SF);
564 else
565 EmulatorClearFlag(EMULATOR_FLAG_SF);
566 }
567
568 ULONG
569 CDECL
570 getIF(VOID)
571 {
572 return EmulatorGetFlag(EMULATOR_FLAG_IF);
573 }
574
575 VOID
576 CDECL
577 setIF(ULONG Flag)
578 {
579 if (Flag & 1)
580 EmulatorSetFlag(EMULATOR_FLAG_IF);
581 else
582 EmulatorClearFlag(EMULATOR_FLAG_IF);
583 }
584
585 ULONG
586 CDECL
587 getDF(VOID)
588 {
589 return EmulatorGetFlag(EMULATOR_FLAG_DF);
590 }
591
592 VOID
593 CDECL
594 setDF(ULONG Flag)
595 {
596 if (Flag & 1)
597 EmulatorSetFlag(EMULATOR_FLAG_DF);
598 else
599 EmulatorClearFlag(EMULATOR_FLAG_DF);
600 }
601
602 ULONG
603 CDECL
604 getOF(VOID)
605 {
606 return EmulatorGetFlag(EMULATOR_FLAG_OF);
607 }
608
609 VOID
610 CDECL
611 setOF(ULONG Flag)
612 {
613 if (Flag & 1)
614 EmulatorSetFlag(EMULATOR_FLAG_OF);
615 else
616 EmulatorClearFlag(EMULATOR_FLAG_OF);
617 }
618
619
620
621 USHORT
622 CDECL
623 getMSW(VOID)
624 {
625 return 0; // UNIMPLEMENTED
626 }
627
628 VOID
629 CDECL
630 setMSW(USHORT Value)
631 {
632 // UNIMPLEMENTED
633 }
634
635 /* EOF */