@@ -21,7 +21,7 @@ uses vars, machine; |
| 21 |
|
21 |
|
| 22 |
// temporary variables |
22 |
// temporary variables |
| 23 |
var |
23 |
var |
| 24 |
b: Pair; |
24 |
b_pair: Pair; |
| 25 |
cycle: byte; |
25 |
cycle: byte; |
| 26 |
b1: byte; |
26 |
b1: byte; |
| 27 |
w1, w2: word; |
27 |
w1, w2: word; |
@@ -73,7 +73,7 @@ end; |
| 73 |
function INC_BC: byte; |
73 |
function INC_BC: byte; |
| 74 |
begin |
74 |
begin |
| 75 |
asm |
75 |
asm |
| 76 |
INC bc.w |
76 |
INC [rip+bc.w] |
| 77 |
end; |
77 |
end; |
| 78 |
|
78 |
|
| 79 |
Result := 8; |
79 |
Result := 8; |
@@ -82,11 +82,11 @@ end; |
| 82 |
function INC_B: byte; |
82 |
function INC_B: byte; |
| 83 |
begin |
83 |
begin |
| 84 |
asm |
84 |
asm |
| 85 |
INC bc.h |
85 |
INC [rip+bc.h] |
| 86 |
LAHF |
86 |
LAHF |
| 87 |
AND EAX,$5100 |
87 |
AND EAX,$5100 |
| 88 |
AND af.l,1 |
88 |
AND [rip+af.l],1 |
| 89 |
OR af.l,AH |
89 |
OR [rip+af.l],AH |
| 90 |
end; |
90 |
end; |
| 91 |
|
91 |
|
| 92 |
Result := 4; |
92 |
Result := 4; |
@@ -95,12 +95,12 @@ end; |
| 95 |
function DEC_B: byte; |
95 |
function DEC_B: byte; |
| 96 |
begin |
96 |
begin |
| 97 |
asm |
97 |
asm |
| 98 |
DEC bc.h |
98 |
DEC [rip+bc.h] |
| 99 |
LAHF |
99 |
LAHF |
| 100 |
AND af.l,1 |
100 |
AND [rip+af.l],1 |
| 101 |
AND EAX,$5500 |
101 |
AND EAX,$5500 |
| 102 |
OR EAX,$400 |
102 |
OR EAX,$400 |
| 103 |
OR af.l,AH |
103 |
OR [rip+af.l],AH |
| 104 |
end; |
104 |
end; |
| 105 |
|
105 |
|
| 106 |
Result := 4; |
106 |
Result := 4; |
@@ -126,10 +126,10 @@ end; |
| 126 |
function RLCA: byte; |
126 |
function RLCA: byte; |
| 127 |
begin |
127 |
begin |
| 128 |
asm |
128 |
asm |
| 129 |
ROL af.h,1 |
129 |
ROL [rip+af.h],1 |
| 130 |
LAHF |
130 |
LAHF |
| 131 |
AND EAX,$100 |
131 |
AND EAX,$100 |
| 132 |
MOV af.l,AH |
132 |
MOV [rip+af.l],AH |
| 133 |
end; |
133 |
end; |
| 134 |
|
134 |
|
| 135 |
|
135 |
|
@@ -176,9 +176,9 @@ end; |
| 176 |
function ADD_HL_BC: byte; |
176 |
function ADD_HL_BC: byte; |
| 177 |
begin |
177 |
begin |
| 178 |
asm |
178 |
asm |
| 179 |
AND af.l,64 |
179 |
AND [rip+af.l],64 |
| 180 |
MOV AX,hl.w |
180 |
MOV AX,[rip+hl.w] |
| 181 |
MOV BX,bc.w |
181 |
MOV BX,[rip+bc.w] |
| 182 |
|
182 |
|
| 183 |
|
183 |
|
| 184 |
MOV ECX,EAX |
184 |
MOV ECX,EAX |
@@ -186,14 +186,14 @@ begin |
| 186 |
|
186 |
|
| 187 |
ADD AX,BX |
187 |
ADD AX,BX |
| 188 |
JNC @1 |
188 |
JNC @1 |
| 189 |
OR af.l,1 |
189 |
OR [rip+af.l],1 |
| 190 |
@1: |
190 |
@1: |
| 191 |
XOR ECX,EAX |
191 |
XOR ECX,EAX |
| 192 |
TEST ECX,4096 |
192 |
TEST ECX,4096 |
| 193 |
JZ @ende |
193 |
JZ @ende |
| 194 |
OR af.l,16 |
194 |
OR [rip+af.l],16 |
| 195 |
@ende: |
195 |
@ende: |
| 196 |
MOV hl.w,AX |
196 |
MOV [rip+hl.w],AX |
| 197 |
|
197 |
|
| 198 |
end; |
198 |
end; |
| 199 |
Result := 8; |
199 |
Result := 8; |
@@ -217,7 +217,7 @@ end; |
| 217 |
function DEC_BC: byte; |
217 |
function DEC_BC: byte; |
| 218 |
begin |
218 |
begin |
| 219 |
asm |
219 |
asm |
| 220 |
DEC bc.w |
220 |
DEC [rip+bc.w] |
| 221 |
end; |
221 |
end; |
| 222 |
|
222 |
|
| 223 |
Result := 8; |
223 |
Result := 8; |
@@ -226,11 +226,11 @@ end; |
| 226 |
function INC_C: byte; |
226 |
function INC_C: byte; |
| 227 |
begin |
227 |
begin |
| 228 |
asm |
228 |
asm |
| 229 |
INC bc.l |
229 |
INC [rip+bc.l] |
| 230 |
LAHF |
230 |
LAHF |
| 231 |
AND EAX,$5100 |
231 |
AND EAX,$5100 |
| 232 |
AND af.l,1 |
232 |
AND [rip+af.l],1 |
| 233 |
OR af.l,AH |
233 |
OR [rip+af.l],AH |
| 234 |
end; |
234 |
end; |
| 235 |
|
235 |
|
| 236 |
Result := 4; |
236 |
Result := 4; |
@@ -239,12 +239,12 @@ end; |
| 239 |
function DEC_C: byte; |
239 |
function DEC_C: byte; |
| 240 |
begin |
240 |
begin |
| 241 |
asm |
241 |
asm |
| 242 |
DEC bc.l |
242 |
DEC [rip+bc.l] |
| 243 |
LAHF |
243 |
LAHF |
| 244 |
AND af.l,1 |
244 |
AND [rip+af.l],1 |
| 245 |
AND EAX,$5500 |
245 |
AND EAX,$5500 |
| 246 |
OR EAX,$400 |
246 |
OR EAX,$400 |
| 247 |
OR af.l,AH |
247 |
OR [rip+af.l],AH |
| 248 |
end; |
248 |
end; |
| 249 |
|
249 |
|
| 250 |
Result := 4; |
250 |
Result := 4; |
@@ -269,10 +269,10 @@ end; |
| 269 |
function RRCA: byte; |
269 |
function RRCA: byte; |
| 270 |
begin |
270 |
begin |
| 271 |
asm |
271 |
asm |
| 272 |
ROR af.h,1 |
272 |
ROR [rip+af.h],1 |
| 273 |
LAHF |
273 |
LAHF |
| 274 |
AND EAX,$100 |
274 |
AND EAX,$100 |
| 275 |
MOV af.l,AH |
275 |
MOV [rip+af.l],AH |
| 276 |
end; |
276 |
end; |
| 277 |
|
277 |
|
| 278 |
|
278 |
|
@@ -328,7 +328,7 @@ end; |
| 328 |
function INC_DE: byte; |
328 |
function INC_DE: byte; |
| 329 |
begin |
329 |
begin |
| 330 |
asm |
330 |
asm |
| 331 |
INC de.w |
331 |
INC [rip+de.w] |
| 332 |
end; |
332 |
end; |
| 333 |
Result := 8; |
333 |
Result := 8; |
| 334 |
end; |
334 |
end; |
@@ -336,11 +336,11 @@ end; |
| 336 |
function INC_D: byte; |
336 |
function INC_D: byte; |
| 337 |
begin |
337 |
begin |
| 338 |
asm |
338 |
asm |
| 339 |
INC de.h |
339 |
INC [rip+de.h] |
| 340 |
LAHF |
340 |
LAHF |
| 341 |
AND EAX,$5100 |
341 |
AND EAX,$5100 |
| 342 |
AND af.l,1 |
342 |
AND [rip+af.l],1 |
| 343 |
OR af.l,AH |
343 |
OR [rip+af.l],AH |
| 344 |
end; |
344 |
end; |
| 345 |
|
345 |
|
| 346 |
Result := 4; |
346 |
Result := 4; |
@@ -349,12 +349,12 @@ end; |
| 349 |
function DEC_D: byte; |
349 |
function DEC_D: byte; |
| 350 |
begin |
350 |
begin |
| 351 |
asm |
351 |
asm |
| 352 |
DEC de.h |
352 |
DEC [rip+de.h] |
| 353 |
LAHF |
353 |
LAHF |
| 354 |
AND af.l,1 |
354 |
AND [rip+af.l],1 |
| 355 |
AND EAX,$5500 |
355 |
AND EAX,$5500 |
| 356 |
OR EAX,$400 |
356 |
OR EAX,$400 |
| 357 |
OR af.l,AH |
357 |
OR [rip+af.l],AH |
| 358 |
end; |
358 |
end; |
| 359 |
|
359 |
|
| 360 |
Result := 4; |
360 |
Result := 4; |
@@ -379,13 +379,13 @@ end; |
| 379 |
function RLA: byte; |
379 |
function RLA: byte; |
| 380 |
begin |
380 |
begin |
| 381 |
asm |
381 |
asm |
| 382 |
MOV AH,af.l |
382 |
MOV AH,[rip+af.l] |
| 383 |
AND EAX,$100 |
383 |
AND EAX,$100 |
| 384 |
SAHF |
384 |
SAHF |
| 385 |
RCL af.h,1 |
385 |
RCL [rip+af.h],1 |
| 386 |
LAHF |
386 |
LAHF |
| 387 |
AND EAX,$100 |
387 |
AND EAX,$100 |
| 388 |
MOV af.l,AH |
388 |
MOV [rip+af.l],AH |
| 389 |
end; |
389 |
end; |
| 390 |
|
390 |
|
| 391 |
Result := 4; |
391 |
Result := 4; |
@@ -393,18 +393,20 @@ end; |
| 393 |
|
393 |
|
| 394 |
function JR: byte; |
394 |
function JR: byte; |
| 395 |
begin |
395 |
begin |
| 396 |
{asm |
396 |
w1 := speekb(pc.w); |
| 397 |
XOR EAX,EAX |
397 |
asm |
| 398 |
MOV AX,pc.w |
398 |
// XOR EAX,EAX |
| 399 |
PUSH EAX |
399 |
// MOV AX,[rip+pc.w] |
| 400 |
CALL speekb |
400 |
// PUSH EAX |
|
|
401 |
// CALL speekb |
|
|
402 |
MOV AX, [rip+w1] |
| 401 |
LEA ESP,[ESP+4] |
403 |
LEA ESP,[ESP+4] |
| 402 |
INC word ptr pc.w |
404 |
INC word ptr [rip+pc.w] |
| 403 |
CBW |
405 |
CBW |
| 404 |
ADD pc.w,AX |
406 |
ADD [rip+pc.w],AX |
| 405 |
end;} |
407 |
end; |
| 406 |
|
408 |
|
| 407 |
Inc(pc.w, speekb(pc.w)+1); |
409 |
//Inc(pc.w, speekb(pc.w)+1); |
| 408 |
|
410 |
|
| 409 |
Result := 8; |
411 |
Result := 8; |
| 410 |
end; |
412 |
end; |
@@ -412,9 +414,9 @@ end; |
| 412 |
function ADD_HL_DE: byte; |
414 |
function ADD_HL_DE: byte; |
| 413 |
begin |
415 |
begin |
| 414 |
asm |
416 |
asm |
| 415 |
AND af.l,64 |
417 |
AND [rip+af.l],64 |
| 416 |
MOV AX,hl.w |
418 |
MOV AX,[rip+hl.w] |
| 417 |
MOV BX,de.w |
419 |
MOV BX,[rip+de.w] |
| 418 |
|
420 |
|
| 419 |
|
421 |
|
| 420 |
MOV ECX,EAX |
422 |
MOV ECX,EAX |
@@ -422,14 +424,14 @@ begin |
| 422 |
|
424 |
|
| 423 |
ADD AX,BX |
425 |
ADD AX,BX |
| 424 |
JNC @1 |
426 |
JNC @1 |
| 425 |
OR af.l,1 |
427 |
OR [rip+af.l],1 |
| 426 |
@1: |
428 |
@1: |
| 427 |
XOR CX,AX |
429 |
XOR CX,AX |
| 428 |
TEST CX,4096 |
430 |
TEST CX,4096 |
| 429 |
JZ @ende |
431 |
JZ @ende |
| 430 |
OR af.l,16 |
432 |
OR [rip+af.l],16 |
| 431 |
@ende: |
433 |
@ende: |
| 432 |
MOV hl.w,AX |
434 |
MOV [rip+hl.w],AX |
| 433 |
|
435 |
|
| 434 |
end; |
436 |
end; |
| 435 |
Result := 8; |
437 |
Result := 8; |
@@ -453,7 +455,7 @@ end; |
| 453 |
function DEC_DE: byte; |
455 |
function DEC_DE: byte; |
| 454 |
begin |
456 |
begin |
| 455 |
asm |
457 |
asm |
| 456 |
DEC de.w |
458 |
DEC [rip+de.w] |
| 457 |
end; |
459 |
end; |
| 458 |
|
460 |
|
| 459 |
Result := 8; |
461 |
Result := 8; |
@@ -462,11 +464,11 @@ end; |
| 462 |
function INC_E: byte; |
464 |
function INC_E: byte; |
| 463 |
begin |
465 |
begin |
| 464 |
asm |
466 |
asm |
| 465 |
INC de.l |
467 |
INC [rip+de.l] |
| 466 |
LAHF |
468 |
LAHF |
| 467 |
AND EAX,$5100 |
469 |
AND EAX,$5100 |
| 468 |
AND af.l,1 |
470 |
AND [rip+af.l],1 |
| 469 |
OR af.l,AH |
471 |
OR [rip+af.l],AH |
| 470 |
end; |
472 |
end; |
| 471 |
|
473 |
|
| 472 |
Result := 4; |
474 |
Result := 4; |
@@ -475,12 +477,12 @@ end; |
| 475 |
function DEC_E: byte; |
477 |
function DEC_E: byte; |
| 476 |
begin |
478 |
begin |
| 477 |
asm |
479 |
asm |
| 478 |
DEC de.l |
480 |
DEC [rip+de.l] |
| 479 |
LAHF |
481 |
LAHF |
| 480 |
AND af.l,1 |
482 |
AND [rip+af.l],1 |
| 481 |
AND EAX,$5500 |
483 |
AND EAX,$5500 |
| 482 |
OR EAX,$400 |
484 |
OR EAX,$400 |
| 483 |
OR af.l,AH |
485 |
OR [rip+af.l],AH |
| 484 |
end; |
486 |
end; |
| 485 |
|
487 |
|
| 486 |
Result := 4; |
488 |
Result := 4; |
@@ -505,12 +507,12 @@ end; |
| 505 |
function RRA: byte; |
507 |
function RRA: byte; |
| 506 |
begin |
508 |
begin |
| 507 |
asm |
509 |
asm |
| 508 |
MOV AH,af.l |
510 |
MOV AH,[rip+af.l] |
| 509 |
SAHF |
511 |
SAHF |
| 510 |
RCR af.h,1 |
512 |
RCR [rip+af.h],1 |
| 511 |
LAHF |
513 |
LAHF |
| 512 |
AND AH,1 |
514 |
AND AH,1 |
| 513 |
MOV af.l,AH |
515 |
MOV [rip+af.l],AH |
| 514 |
end; |
516 |
end; |
| 515 |
Result := 4; |
517 |
Result := 4; |
| 516 |
end; |
518 |
end; |
@@ -520,18 +522,18 @@ begin |
| 520 |
b1 := speekb(pc.w); |
522 |
b1 := speekb(pc.w); |
| 521 |
Inc(pc.w); |
523 |
Inc(pc.w); |
| 522 |
asm |
524 |
asm |
| 523 |
//PUSH dword ptr pc.w |
525 |
//PUSH dword ptr [rip+pc.w] |
| 524 |
//CALL speekb |
526 |
//CALL speekb |
| 525 |
//LEA ESP,[ESP+4] |
527 |
//LEA ESP,[ESP+4] |
| 526 |
//INC word ptr pc.w |
528 |
//INC word ptr [rip+pc.w] |
| 527 |
MOV AH, 0 |
529 |
MOV AH, 0 |
| 528 |
MOV AL, b1 |
530 |
MOV AL, b1 |
| 529 |
TEST af.l,64 |
531 |
TEST [rip+af.l],64 |
| 530 |
MOV cycle,8 |
532 |
MOV [rip+cycle],8 |
| 531 |
JNZ @ende |
533 |
JNZ @ende |
| 532 |
MOV cycle,12 |
534 |
MOV [rip+cycle],12 |
| 533 |
CBW |
535 |
CBW |
| 534 |
ADD pc.w,AX |
536 |
ADD [rip+pc.w],AX |
| 535 |
@ende: |
537 |
@ende: |
| 536 |
end; |
538 |
end; |
| 537 |
Result := cycle; |
539 |
Result := cycle; |
@@ -583,7 +585,7 @@ end; |
| 583 |
function INC_HL: byte; |
585 |
function INC_HL: byte; |
| 584 |
begin |
586 |
begin |
| 585 |
asm |
587 |
asm |
| 586 |
INC hl.w |
588 |
INC [rip+hl.w] |
| 587 |
end; |
589 |
end; |
| 588 |
Result := 8; |
590 |
Result := 8; |
| 589 |
end; |
591 |
end; |
@@ -591,11 +593,11 @@ end; |
| 591 |
function INC_H: byte; |
593 |
function INC_H: byte; |
| 592 |
begin |
594 |
begin |
| 593 |
asm |
595 |
asm |
| 594 |
INC hl.h |
596 |
INC [rip+hl.h] |
| 595 |
LAHF |
597 |
LAHF |
| 596 |
AND EAX,$5100 |
598 |
AND EAX,$5100 |
| 597 |
AND af.l,1 |
599 |
AND [rip+af.l],1 |
| 598 |
OR af.l,AH |
600 |
OR [rip+af.l],AH |
| 599 |
end; |
601 |
end; |
| 600 |
|
602 |
|
| 601 |
Result := 4; |
603 |
Result := 4; |
@@ -604,12 +606,12 @@ end; |
| 604 |
function DEC_H: byte; |
606 |
function DEC_H: byte; |
| 605 |
begin |
607 |
begin |
| 606 |
asm |
608 |
asm |
| 607 |
DEC hl.h |
609 |
DEC [rip+hl.h] |
| 608 |
LAHF |
610 |
LAHF |
| 609 |
AND af.l,1 |
611 |
AND [rip+af.l],1 |
| 610 |
AND EAX,$5500 |
612 |
AND EAX,$5500 |
| 611 |
OR EAX,$400 |
613 |
OR EAX,$400 |
| 612 |
OR af.l,AH |
614 |
OR [rip+af.l],AH |
| 613 |
end; |
615 |
end; |
| 614 |
|
616 |
|
| 615 |
Result := 4; |
617 |
Result := 4; |
@@ -634,11 +636,11 @@ end; |
| 634 |
function DAA: byte; |
636 |
function DAA: byte; |
| 635 |
begin |
637 |
begin |
| 636 |
asm |
638 |
asm |
| 637 |
MOV AH,af.l |
639 |
MOV AH,[rip+af.l] |
| 638 |
MOV BL,AH |
640 |
MOV BL,AH |
| 639 |
AND BL,4 |
641 |
AND BL,4 |
| 640 |
SAHF |
642 |
SAHF |
| 641 |
MOV AL,af.h |
643 |
MOV AL,[rip+af.h] |
| 642 |
JP @dec_adjust |
644 |
JP @dec_adjust |
| 643 |
//DAA |
645 |
//DAA |
| 644 |
JMP @ddld |
646 |
JMP @ddld |
@@ -647,11 +649,11 @@ begin |
| 647 |
//DAS |
649 |
//DAS |
| 648 |
|
650 |
|
| 649 |
@ddld: |
651 |
@ddld: |
| 650 |
MOV af.h,AL |
652 |
MOV [rip+af.h],AL |
| 651 |
LAHF |
653 |
LAHF |
| 652 |
AND AH,65 |
654 |
AND AH,65 |
| 653 |
OR AH,BL |
655 |
OR AH,BL |
| 654 |
MOV af.l,AH |
656 |
MOV [rip+af.l],AH |
| 655 |
end; |
657 |
end; |
| 656 |
|
658 |
|
| 657 |
Result := 4; |
659 |
Result := 4; |
@@ -663,18 +665,18 @@ begin |
| 663 |
b1 := speekb(pc.w); |
665 |
b1 := speekb(pc.w); |
| 664 |
Inc(pc.w); |
666 |
Inc(pc.w); |
| 665 |
asm |
667 |
asm |
| 666 |
//PUSH dword ptr pc.w |
668 |
//PUSH dword ptr [rip+pc.w] |
| 667 |
//CALL speekb |
669 |
//CALL speekb |
| 668 |
//LEA ESP,[ESP+4] |
670 |
//LEA ESP,[ESP+4] |
| 669 |
//INC word ptr pc.w |
671 |
//INC word ptr [rip+pc.w] |
| 670 |
MOV AH, 0 |
672 |
MOV AH, 0 |
| 671 |
MOV AL, b1 |
673 |
MOV AL, b1 |
| 672 |
TEST af.l,64 |
674 |
TEST [rip+af.l],64 |
| 673 |
MOV cycle,8 |
675 |
MOV [rip+cycle],8 |
| 674 |
JZ @ende |
676 |
JZ @ende |
| 675 |
MOV cycle,12 |
677 |
MOV [rip+cycle],12 |
| 676 |
CBW |
678 |
CBW |
| 677 |
ADD pc.w,AX |
679 |
ADD [rip+pc.w],AX |
| 678 |
@ende: |
680 |
@ende: |
| 679 |
end; |
681 |
end; |
| 680 |
|
682 |
|
@@ -684,20 +686,20 @@ end; |
| 684 |
function ADD_HL_HL: byte; |
686 |
function ADD_HL_HL: byte; |
| 685 |
begin |
687 |
begin |
| 686 |
asm |
688 |
asm |
| 687 |
AND af.l,64 |
689 |
AND [rip+af.l],64 |
| 688 |
MOV AX,hl.w |
690 |
MOV AX,[rip+hl.w] |
| 689 |
XOR ECX,ECX |
691 |
XOR ECX,ECX |
| 690 |
|
692 |
|
| 691 |
ADD AX,AX |
693 |
ADD AX,AX |
| 692 |
JNC @1 |
694 |
JNC @1 |
| 693 |
OR af.l,1 |
695 |
OR [rip+af.l],1 |
| 694 |
@1: |
696 |
@1: |
| 695 |
XOR ECX,EAX |
697 |
XOR ECX,EAX |
| 696 |
TEST CX,4096 |
698 |
TEST CX,4096 |
| 697 |
JZ @ende |
699 |
JZ @ende |
| 698 |
OR af.l,16 |
700 |
OR [rip+af.l],16 |
| 699 |
@ende: |
701 |
@ende: |
| 700 |
MOV hl.w,AX |
702 |
MOV [rip+hl.w],AX |
| 701 |
|
703 |
|
| 702 |
end; |
704 |
end; |
| 703 |
|
705 |
|
@@ -727,7 +729,7 @@ end; |
| 727 |
function DEC_HL: byte; |
729 |
function DEC_HL: byte; |
| 728 |
begin |
730 |
begin |
| 729 |
asm |
731 |
asm |
| 730 |
DEC hl.w |
732 |
DEC [rip+hl.w] |
| 731 |
end; |
733 |
end; |
| 732 |
|
734 |
|
| 733 |
Result := 8; |
735 |
Result := 8; |
@@ -736,11 +738,11 @@ end; |
| 736 |
function INC_L: byte; |
738 |
function INC_L: byte; |
| 737 |
begin |
739 |
begin |
| 738 |
asm |
740 |
asm |
| 739 |
INC hl.l |
741 |
INC [rip+hl.l] |
| 740 |
LAHF |
742 |
LAHF |
| 741 |
AND EAX,$5100 |
743 |
AND EAX,$5100 |
| 742 |
AND af.l,1 |
744 |
AND [rip+af.l],1 |
| 743 |
OR af.l,AH |
745 |
OR [rip+af.l],AH |
| 744 |
end; |
746 |
end; |
| 745 |
|
747 |
|
| 746 |
Result := 4; |
748 |
Result := 4; |
@@ -749,12 +751,12 @@ end; |
| 749 |
function DEC_L: byte; |
751 |
function DEC_L: byte; |
| 750 |
begin |
752 |
begin |
| 751 |
asm |
753 |
asm |
| 752 |
DEC hl.l |
754 |
DEC [rip+hl.l] |
| 753 |
LAHF |
755 |
LAHF |
| 754 |
AND af.l,1 |
756 |
AND [rip+af.l],1 |
| 755 |
AND EAX,$5500 |
757 |
AND EAX,$5500 |
| 756 |
OR EAX,$400 |
758 |
OR EAX,$400 |
| 757 |
OR af.l,AH |
759 |
OR [rip+af.l],AH |
| 758 |
end; |
760 |
end; |
| 759 |
|
761 |
|
| 760 |
Result := 4; |
762 |
Result := 4; |
@@ -779,8 +781,8 @@ end; |
| 779 |
function CPL: byte; |
781 |
function CPL: byte; |
| 780 |
begin |
782 |
begin |
| 781 |
asm |
783 |
asm |
| 782 |
XOR af.h,255 |
784 |
XOR [rip+af.h],255 |
| 783 |
OR af.l,$14 |
785 |
OR [rip+af.l],$14 |
| 784 |
end; |
786 |
end; |
| 785 |
|
787 |
|
| 786 |
Result := 4; |
788 |
Result := 4; |
@@ -792,18 +794,18 @@ begin |
| 792 |
b1 := speekb(pc.w); |
794 |
b1 := speekb(pc.w); |
| 793 |
Inc(pc.w); |
795 |
Inc(pc.w); |
| 794 |
asm |
796 |
asm |
| 795 |
//PUSH dword ptr pc.w |
797 |
//PUSH dword ptr [rip+pc.w] |
| 796 |
//CALL speekb |
798 |
//CALL speekb |
| 797 |
//LEA ESP,[ESP+4] |
799 |
//LEA ESP,[ESP+4] |
| 798 |
//INC word ptr pc.w |
800 |
//INC word ptr [rip+pc.w] |
| 799 |
MOV AH, 0 |
801 |
MOV AH, 0 |
| 800 |
MOV AL, b1 |
802 |
MOV AL, b1 |
| 801 |
TEST af.l,1 |
803 |
TEST [rip+af.l],1 |
| 802 |
MOV cycle,8 |
804 |
MOV [rip+cycle],8 |
| 803 |
JNZ @ende |
805 |
JNZ @ende |
| 804 |
MOV cycle,12 |
806 |
MOV [rip+cycle],12 |
| 805 |
CBW |
807 |
CBW |
| 806 |
ADD pc.w,AX |
808 |
ADD [rip+pc.w],AX |
| 807 |
@ende: |
809 |
@ende: |
| 808 |
end; |
810 |
end; |
| 809 |
|
811 |
|
@@ -858,7 +860,7 @@ end; |
| 858 |
function INC_SP: byte; |
860 |
function INC_SP: byte; |
| 859 |
begin |
861 |
begin |
| 860 |
asm |
862 |
asm |
| 861 |
INC sp_.w |
863 |
INC [rip+sp_.w] |
| 862 |
end; |
864 |
end; |
| 863 |
|
865 |
|
| 864 |
Result := 8; |
866 |
Result := 8; |
@@ -868,23 +870,23 @@ function INC_xHL: byte; |
| 868 |
begin |
870 |
begin |
| 869 |
w1 := speekb(hl.w); |
871 |
w1 := speekb(hl.w); |
| 870 |
asm |
872 |
asm |
| 871 |
MOV AX,hl.w |
873 |
MOV AX,[rip+hl.w] |
| 872 |
PUSH RAX |
874 |
PUSH RAX |
| 873 |
// PUSH EAX |
875 |
// PUSH EAX |
| 874 |
// CALL speekb |
876 |
// CALL speekb |
| 875 |
// LEA ESP,[ESP+4] |
877 |
// LEA ESP,[ESP+4] |
| 876 |
MOV AX, w1 |
878 |
MOV AX, [rip+w1] |
| 877 |
INC AL |
879 |
INC AL |
| 878 |
LAHF |
880 |
LAHF |
| 879 |
AND AH,$51 |
881 |
AND AH,$51 |
| 880 |
AND af.l,1 |
882 |
AND [rip+af.l],1 |
| 881 |
OR af.l,AH |
883 |
OR [rip+af.l],AH |
| 882 |
POP RBX |
884 |
POP RBX |
| 883 |
//PUSH EAX |
885 |
//PUSH EAX |
| 884 |
//PUSH EBX |
886 |
//PUSH EBX |
| 885 |
//CALL SpokeB |
887 |
//CALL SpokeB |
| 886 |
//LEA ESP,[ESP+8] |
888 |
//LEA ESP,[ESP+8] |
| 887 |
MOV w1, BX |
889 |
MOV [rip+w1], BX |
| 888 |
MOV w2, AX |
890 |
MOV w2, AX |
| 889 |
end; |
891 |
end; |
| 890 |
spokeb(w1, w2); |
892 |
spokeb(w1, w2); |
@@ -896,24 +898,24 @@ function DEC_xHL: byte; |
| 896 |
begin |
898 |
begin |
| 897 |
w1 := speekb(hl.w); |
899 |
w1 := speekb(hl.w); |
| 898 |
asm |
900 |
asm |
| 899 |
MOV AX,hl.w |
901 |
MOV AX,[rip+hl.w] |
| 900 |
PUSH RAX |
902 |
PUSH RAX |
| 901 |
//PUSH EAX |
903 |
//PUSH EAX |
| 902 |
//CALL speekb |
904 |
//CALL speekb |
| 903 |
//LEA ESP,[ESP+4] |
905 |
//LEA ESP,[ESP+4] |
| 904 |
MOV AX, w1 |
906 |
MOV AX, [rip+w1] |
| 905 |
DEC AL |
907 |
DEC AL |
| 906 |
LAHF |
908 |
LAHF |
| 907 |
AND af.l,1 |
909 |
AND [rip+af.l],1 |
| 908 |
AND AH,$55 |
910 |
AND AH,$55 |
| 909 |
OR EAX,$400 |
911 |
OR EAX,$400 |
| 910 |
OR af.l,AH |
912 |
OR [rip+af.l],AH |
| 911 |
POP RBX |
913 |
POP RBX |
| 912 |
//PUSH EAX |
914 |
//PUSH EAX |
| 913 |
//PUSH EBX |
915 |
//PUSH EBX |
| 914 |
//CALL SpokeB |
916 |
//CALL SpokeB |
| 915 |
//LEA ESP,[ESP+8] |
917 |
//LEA ESP,[ESP+8] |
| 916 |
MOV w1, BX |
918 |
MOV [rip+w1], BX |
| 917 |
MOV w2, AX |
919 |
MOV w2, AX |
| 918 |
end; |
920 |
end; |
| 919 |
spokeb(w1, w2); |
921 |
spokeb(w1, w2); |
@@ -945,8 +947,8 @@ end; |
| 945 |
function SCF: byte; |
947 |
function SCF: byte; |
| 946 |
begin |
948 |
begin |
| 947 |
asm |
949 |
asm |
| 948 |
AND af.l,64 |
950 |
AND [rip+af.l],64 |
| 949 |
OR af.l,1 |
951 |
OR [rip+af.l],1 |
| 950 |
end; |
952 |
end; |
| 951 |
|
953 |
|
| 952 |
Result := 4; |
954 |
Result := 4; |
@@ -957,17 +959,17 @@ function JR_C: byte; |
| 957 |
begin |
959 |
begin |
| 958 |
w1 := speekb(pc.w); |
960 |
w1 := speekb(pc.w); |
| 959 |
asm |
961 |
asm |
| 960 |
//PUSH dword ptr pc.w |
962 |
//PUSH dword ptr [rip+pc.w] |
| 961 |
//CALL speekb |
963 |
//CALL speekb |
| 962 |
//LEA ESP,[ESP+4] |
964 |
//LEA ESP,[ESP+4] |
| 963 |
MOV AX, w1 |
965 |
MOV AX, [rip+w1] |
| 964 |
INC word ptr pc.w |
966 |
INC word ptr [rip+pc.w] |
| 965 |
TEST af.l,1 |
967 |
TEST [rip+af.l],1 |
| 966 |
MOV cycle,8 |
968 |
MOV [rip+cycle],8 |
| 967 |
JZ @ende |
969 |
JZ @ende |
| 968 |
MOV cycle,12 |
970 |
MOV [rip+cycle],12 |
| 969 |
CBW |
971 |
CBW |
| 970 |
ADD pc.w,AX |
972 |
ADD [rip+pc.w],AX |
| 971 |
@ende: |
973 |
@ende: |
| 972 |
end; |
974 |
end; |
| 973 |
|
975 |
|
@@ -977,9 +979,9 @@ end; |
| 977 |
function ADD_HL_SP: byte; |
979 |
function ADD_HL_SP: byte; |
| 978 |
begin |
980 |
begin |
| 979 |
asm |
981 |
asm |
| 980 |
AND af.l,64 |
982 |
AND [rip+af.l],64 |
| 981 |
MOV AX,hl.w |
983 |
MOV AX,[rip+hl.w] |
| 982 |
MOV BX,sp_.w |
984 |
MOV BX,[rip+sp_.w] |
| 983 |
|
985 |
|
| 984 |
|
986 |
|
| 985 |
MOV ECX,EAX |
987 |
MOV ECX,EAX |
@@ -987,14 +989,14 @@ begin |
| 987 |
|
989 |
|
| 988 |
ADD AX,BX |
990 |
ADD AX,BX |
| 989 |
JNC @1 |
991 |
JNC @1 |
| 990 |
OR af.l,1 |
992 |
OR [rip+af.l],1 |
| 991 |
@1: |
993 |
@1: |
| 992 |
XOR ECX,EAX |
994 |
XOR ECX,EAX |
| 993 |
TEST ECX,4096 |
995 |
TEST ECX,4096 |
| 994 |
JZ @ende |
996 |
JZ @ende |
| 995 |
OR af.l,16 |
997 |
OR [rip+af.l],16 |
| 996 |
@ende: |
998 |
@ende: |
| 997 |
MOV hl.w,AX |
999 |
MOV [rip+hl.w],AX |
| 998 |
end; |
1000 |
end; |
| 999 |
Result := 8; |
1001 |
Result := 8; |
| 1000 |
end; |
1002 |
end; |
@@ -1022,7 +1024,7 @@ end; |
| 1022 |
function DEC_SP: byte; |
1024 |
function DEC_SP: byte; |
| 1023 |
begin |
1025 |
begin |
| 1024 |
asm |
1026 |
asm |
| 1025 |
DEC sp_.w |
1027 |
DEC [rip+sp_.w] |
| 1026 |
end; |
1028 |
end; |
| 1027 |
Result := 8; |
1029 |
Result := 8; |
| 1028 |
end; |
1030 |
end; |
@@ -1030,11 +1032,11 @@ end; |
| 1030 |
function INC_A: byte; |
1032 |
function INC_A: byte; |
| 1031 |
begin |
1033 |
begin |
| 1032 |
asm |
1034 |
asm |
| 1033 |
INC af.h |
1035 |
INC [rip+af.h] |
| 1034 |
LAHF |
1036 |
LAHF |
| 1035 |
AND EAX,$5100 |
1037 |
AND EAX,$5100 |
| 1036 |
AND af.l,1 |
1038 |
AND [rip+af.l],1 |
| 1037 |
OR af.l,AH |
1039 |
OR [rip+af.l],AH |
| 1038 |
end; |
1040 |
end; |
| 1039 |
|
1041 |
|
| 1040 |
Result := 4; |
1042 |
Result := 4; |
@@ -1043,12 +1045,12 @@ end; |
| 1043 |
function DEC_A: byte; |
1045 |
function DEC_A: byte; |
| 1044 |
begin |
1046 |
begin |
| 1045 |
asm |
1047 |
asm |
| 1046 |
DEC af.h |
1048 |
DEC [rip+af.h] |
| 1047 |
LAHF |
1049 |
LAHF |
| 1048 |
AND af.l,1 |
1050 |
AND [rip+af.l],1 |
| 1049 |
AND EAX,$5500 |
1051 |
AND EAX,$5500 |
| 1050 |
OR EAX,$400 |
1052 |
OR EAX,$400 |
| 1051 |
OR af.l,AH |
1053 |
OR [rip+af.l],AH |
| 1052 |
end; |
1054 |
end; |
| 1053 |
|
1055 |
|
| 1054 |
Result := 4; |
1056 |
Result := 4; |
@@ -1073,12 +1075,12 @@ end; |
| 1073 |
function CCF: byte; |
1075 |
function CCF: byte; |
| 1074 |
begin |
1076 |
begin |
| 1075 |
asm |
1077 |
asm |
| 1076 |
MOV AH,af.l |
1078 |
MOV AH,[rip+af.l] |
| 1077 |
SAHF |
1079 |
SAHF |
| 1078 |
CMC |
1080 |
CMC |
| 1079 |
LAHF |
1081 |
LAHF |
| 1080 |
AND AH,65 |
1082 |
AND AH,65 |
| 1081 |
MOV af.l,AH |
1083 |
MOV [rip+af.l],AH |
| 1082 |
end; |
1084 |
end; |
| 1083 |
|
1085 |
|
| 1084 |
Result := 4; |
1086 |
Result := 4; |
@@ -1594,11 +1596,11 @@ end; |
| 1594 |
function ADD_B: byte; |
1596 |
function ADD_B: byte; |
| 1595 |
begin |
1597 |
begin |
| 1596 |
asm |
1598 |
asm |
| 1597 |
MOV AL,bc.h |
1599 |
MOV AL,[rip+bc.h] |
| 1598 |
ADD af.h,AL |
1600 |
ADD [rip+af.h],AL |
| 1599 |
LAHF |
1601 |
LAHF |
| 1600 |
AND EAX,$5100 |
1602 |
AND EAX,$5100 |
| 1601 |
MOV af.l,AH |
1603 |
MOV [rip+af.l],AH |
| 1602 |
|
1604 |
|
| 1603 |
end; |
1605 |
end; |
| 1604 |
Result := 4; |
1606 |
Result := 4; |
@@ -1607,11 +1609,11 @@ end; |
| 1607 |
function ADD_C: byte; |
1609 |
function ADD_C: byte; |
| 1608 |
begin |
1610 |
begin |
| 1609 |
asm |
1611 |
asm |
| 1610 |
MOV AL,bc.l |
1612 |
MOV AL,[rip+bc.l] |
| 1611 |
ADD af.h,AL |
1613 |
ADD [rip+af.h],AL |
| 1612 |
LAHF |
1614 |
LAHF |
| 1613 |
AND AH,81 |
1615 |
AND AH,81 |
| 1614 |
MOV af.l,AH |
1616 |
MOV [rip+af.l],AH |
| 1615 |
|
1617 |
|
| 1616 |
end; |
1618 |
end; |
| 1617 |
Result := 4; |
1619 |
Result := 4; |
@@ -1620,11 +1622,11 @@ end; |
| 1620 |
function ADD_D: byte; |
1622 |
function ADD_D: byte; |
| 1621 |
begin |
1623 |
begin |
| 1622 |
asm |
1624 |
asm |
| 1623 |
MOV AL,de.h |
1625 |
MOV AL,[rip+de.h] |
| 1624 |
ADD af.h,AL |
1626 |
ADD [rip+af.h],AL |
| 1625 |
LAHF |
1627 |
LAHF |
| 1626 |
AND AH,81 |
1628 |
AND AH,81 |
| 1627 |
MOV af.l,AH |
1629 |
MOV [rip+af.l],AH |
| 1628 |
|
1630 |
|
| 1629 |
end; |
1631 |
end; |
| 1630 |
|
1632 |
|
@@ -1634,11 +1636,11 @@ end; |
| 1634 |
function ADD_E: byte; |
1636 |
function ADD_E: byte; |
| 1635 |
begin |
1637 |
begin |
| 1636 |
asm |
1638 |
asm |
| 1637 |
MOV AL,de.l |
1639 |
MOV AL,[rip+de.l] |
| 1638 |
ADD af.h,AL |
1640 |
ADD [rip+af.h],AL |
| 1639 |
LAHF |
1641 |
LAHF |
| 1640 |
AND AH,81 |
1642 |
AND AH,81 |
| 1641 |
MOV af.l,AH |
1643 |
MOV [rip+af.l],AH |
| 1642 |
|
1644 |
|
| 1643 |
end; |
1645 |
end; |
| 1644 |
|
1646 |
|
@@ -1648,11 +1650,11 @@ end; |
| 1648 |
function ADD_H: byte; |
1650 |
function ADD_H: byte; |
| 1649 |
begin |
1651 |
begin |
| 1650 |
asm |
1652 |
asm |
| 1651 |
MOV AL,hl.h |
1653 |
MOV AL,[rip+hl.h] |
| 1652 |
ADD af.h,AL |
1654 |
ADD [rip+af.h],AL |
| 1653 |
LAHF |
1655 |
LAHF |
| 1654 |
AND AH,81 |
1656 |
AND AH,81 |
| 1655 |
MOV af.l,AH |
1657 |
MOV [rip+af.l],AH |
| 1656 |
|
1658 |
|
| 1657 |
end; |
1659 |
end; |
| 1658 |
|
1660 |
|
@@ -1662,11 +1664,11 @@ end; |
| 1662 |
function ADD_L: byte; |
1664 |
function ADD_L: byte; |
| 1663 |
begin |
1665 |
begin |
| 1664 |
asm |
1666 |
asm |
| 1665 |
MOV AL,hl.l |
1667 |
MOV AL,[rip+hl.l] |
| 1666 |
ADD af.h,AL |
1668 |
ADD [rip+af.h],AL |
| 1667 |
LAHF |
1669 |
LAHF |
| 1668 |
AND AH,81 |
1670 |
AND AH,81 |
| 1669 |
MOV af.l,AH |
1671 |
MOV [rip+af.l],AH |
| 1670 |
|
1672 |
|
| 1671 |
end; |
1673 |
end; |
| 1672 |
Result := 4; |
1674 |
Result := 4; |
@@ -1676,16 +1678,16 @@ function ADD_xHL: byte; |
| 1676 |
begin |
1678 |
begin |
| 1677 |
w1 := speekb(hl.w); |
1679 |
w1 := speekb(hl.w); |
| 1678 |
asm |
1680 |
asm |
| 1679 |
//MOV AX,hl.w |
1681 |
//MOV AX,[rip+hl.w] |
| 1680 |
//PUSH EAX |
1682 |
//PUSH EAX |
| 1681 |
//CALL speekb |
1683 |
//CALL speekb |
| 1682 |
//LEA ESP,[ESP+4] |
1684 |
//LEA ESP,[ESP+4] |
| 1683 |
MOV AX, w1 |
1685 |
MOV AX, [rip+w1] |
| 1684 |
|
1686 |
|
| 1685 |
ADD af.h,AL |
1687 |
ADD [rip+af.h],AL |
| 1686 |
LAHF |
1688 |
LAHF |
| 1687 |
AND EAX,$5100 |
1689 |
AND EAX,$5100 |
| 1688 |
MOV af.l,AH |
1690 |
MOV [rip+af.l],AH |
| 1689 |
|
1691 |
|
| 1690 |
end; |
1692 |
end; |
| 1691 |
|
1693 |
|
@@ -1695,11 +1697,11 @@ end; |
| 1695 |
function ADD_A: byte; |
1697 |
function ADD_A: byte; |
| 1696 |
begin |
1698 |
begin |
| 1697 |
asm |
1699 |
asm |
| 1698 |
MOV AL,af.h |
1700 |
MOV AL,[rip+af.h] |
| 1699 |
ADD af.h,AL |
1701 |
ADD [rip+af.h],AL |
| 1700 |
LAHF |
1702 |
LAHF |
| 1701 |
AND AH,81 |
1703 |
AND AH,81 |
| 1702 |
MOV af.l,AH |
1704 |
MOV [rip+af.l],AH |
| 1703 |
|
1705 |
|
| 1704 |
end; |
1706 |
end; |
| 1705 |
|
1707 |
|
@@ -1709,13 +1711,13 @@ end; |
| 1709 |
function ADC_B: byte; |
1711 |
function ADC_B: byte; |
| 1710 |
begin |
1712 |
begin |
| 1711 |
asm |
1713 |
asm |
| 1712 |
MOV AH,af.l |
1714 |
MOV AH,[rip+af.l] |
| 1713 |
SAHF |
1715 |
SAHF |
| 1714 |
MOV AL,bc.h |
1716 |
MOV AL,[rip+bc.h] |
| 1715 |
ADC af.h,AL |
1717 |
ADC [rip+af.h],AL |
| 1716 |
LAHF |
1718 |
LAHF |
| 1717 |
AND EAX,$5100 |
1719 |
AND EAX,$5100 |
| 1718 |
MOV af.l,AH |
1720 |
MOV [rip+af.l],AH |
| 1719 |
|
1721 |
|
| 1720 |
end; |
1722 |
end; |
| 1721 |
|
1723 |
|
@@ -1725,13 +1727,13 @@ end; |
| 1725 |
function ADC_C: byte; |
1727 |
function ADC_C: byte; |
| 1726 |
begin |
1728 |
begin |
| 1727 |
asm |
1729 |
asm |
| 1728 |
MOV AH,af.l |
1730 |
MOV AH,[rip+af.l] |
| 1729 |
SAHF |
1731 |
SAHF |
| 1730 |
MOV AL,bc.l |
1732 |
MOV AL,[rip+bc.l] |
| 1731 |
ADC af.h,AL |
1733 |
ADC [rip+af.h],AL |
| 1732 |
LAHF |
1734 |
LAHF |
| 1733 |
AND EAX,$5100 |
1735 |
AND EAX,$5100 |
| 1734 |
MOV af.l,AH |
1736 |
MOV [rip+af.l],AH |
| 1735 |
|
1737 |
|
| 1736 |
end; |
1738 |
end; |
| 1737 |
|
1739 |
|
@@ -1741,13 +1743,13 @@ end; |
| 1741 |
function ADC_D: byte; |
1743 |
function ADC_D: byte; |
| 1742 |
begin |
1744 |
begin |
| 1743 |
asm |
1745 |
asm |
| 1744 |
MOV AH,af.l |
1746 |
MOV AH,[rip+af.l] |
| 1745 |
SAHF |
1747 |
SAHF |
| 1746 |
MOV AL,de.h |
1748 |
MOV AL,[rip+de.h] |
| 1747 |
ADC af.h,AL |
1749 |
ADC [rip+af.h],AL |
| 1748 |
LAHF |
1750 |
LAHF |
| 1749 |
AND EAX,$5100 |
1751 |
AND EAX,$5100 |
| 1750 |
MOV af.l,AH |
1752 |
MOV [rip+af.l],AH |
| 1751 |
|
1753 |
|
| 1752 |
end; |
1754 |
end; |
| 1753 |
Result := 4; |
1755 |
Result := 4; |
@@ -1756,13 +1758,13 @@ end; |
| 1756 |
function ADC_E: byte; |
1758 |
function ADC_E: byte; |
| 1757 |
begin |
1759 |
begin |
| 1758 |
asm |
1760 |
asm |
| 1759 |
MOV AH,af.l |
1761 |
MOV AH,[rip+af.l] |
| 1760 |
SAHF |
1762 |
SAHF |
| 1761 |
MOV AL,de.l |
1763 |
MOV AL,[rip+de.l] |
| 1762 |
ADC af.h,AL |
1764 |
ADC [rip+af.h],AL |
| 1763 |
LAHF |
1765 |
LAHF |
| 1764 |
AND EAX,$5100 |
1766 |
AND EAX,$5100 |
| 1765 |
MOV af.l,AH |
1767 |
MOV [rip+af.l],AH |
| 1766 |
|
1768 |
|
| 1767 |
end; |
1769 |
end; |
| 1768 |
|
1770 |
|
@@ -1772,13 +1774,13 @@ end; |
| 1772 |
function ADC_H: byte; |
1774 |
function ADC_H: byte; |
| 1773 |
begin |
1775 |
begin |
| 1774 |
asm |
1776 |
asm |
| 1775 |
MOV AH,af.l |
1777 |
MOV AH,[rip+af.l] |
| 1776 |
SAHF |
1778 |
SAHF |
| 1777 |
MOV AL,hl.h |
1779 |
MOV AL,[rip+hl.h] |
| 1778 |
ADC af.h,AL |
1780 |
ADC [rip+af.h],AL |
| 1779 |
LAHF |
1781 |
LAHF |
| 1780 |
AND EAX,$5100 |
1782 |
AND EAX,$5100 |
| 1781 |
MOV af.l,AH |
1783 |
MOV [rip+af.l],AH |
| 1782 |
|
1784 |
|
| 1783 |
end; |
1785 |
end; |
| 1784 |
|
1786 |
|
@@ -1788,13 +1790,13 @@ end; |
| 1788 |
function ADC_L: byte; |
1790 |
function ADC_L: byte; |
| 1789 |
begin |
1791 |
begin |
| 1790 |
asm |
1792 |
asm |
| 1791 |
MOV AH,af.l |
1793 |
MOV AH,[rip+af.l] |
| 1792 |
SAHF |
1794 |
SAHF |
| 1793 |
MOV AL,hl.l |
1795 |
MOV AL,[rip+hl.l] |
| 1794 |
ADC af.h,AL |
1796 |
ADC [rip+af.h],AL |
| 1795 |
LAHF |
1797 |
LAHF |
| 1796 |
AND EAX,$5100 |
1798 |
AND EAX,$5100 |
| 1797 |
MOV af.l,AH |
1799 |
MOV [rip+af.l],AH |
| 1798 |
|
1800 |
|
| 1799 |
end; |
1801 |
end; |
| 1800 |
|
1802 |
|
@@ -1805,19 +1807,19 @@ function ADC_xHL: byte; |
| 1805 |
begin |
1807 |
begin |
| 1806 |
w1 := speekb(hl.w); |
1808 |
w1 := speekb(hl.w); |
| 1807 |
asm |
1809 |
asm |
| 1808 |
//MOV AX,hl.w |
1810 |
//MOV AX,[rip+hl.w] |
| 1809 |
//PUSH EAX |
1811 |
//PUSH EAX |
| 1810 |
//CALL speekb |
1812 |
//CALL speekb |
| 1811 |
//LEA ESP,[ESP+4] |
1813 |
//LEA ESP,[ESP+4] |
| 1812 |
MOV AX, w1 |
1814 |
MOV AX, [rip+w1] |
| 1813 |
MOV AH,af.l |
1815 |
MOV AH,[rip+af.l] |
| 1814 |
AND AH,1 |
1816 |
AND AH,1 |
| 1815 |
SAHF |
1817 |
SAHF |
| 1816 |
|
1818 |
|
| 1817 |
ADC af.h,AL |
1819 |
ADC [rip+af.h],AL |
| 1818 |
LAHF |
1820 |
LAHF |
| 1819 |
AND EAX,$5100 |
1821 |
AND EAX,$5100 |
| 1820 |
MOV af.l,AH |
1822 |
MOV [rip+af.l],AH |
| 1821 |
|
1823 |
|
| 1822 |
end; |
1824 |
end; |
| 1823 |
|
1825 |
|
@@ -1827,13 +1829,13 @@ end; |
| 1827 |
function ADC_A: byte; |
1829 |
function ADC_A: byte; |
| 1828 |
begin |
1830 |
begin |
| 1829 |
asm |
1831 |
asm |
| 1830 |
MOV AH,af.l |
1832 |
MOV AH,[rip+af.l] |
| 1831 |
SAHF |
1833 |
SAHF |
| 1832 |
MOV AL,af.h |
1834 |
MOV AL,[rip+af.h] |
| 1833 |
ADC af.h,AL |
1835 |
ADC [rip+af.h],AL |
| 1834 |
LAHF |
1836 |
LAHF |
| 1835 |
AND EAX,$5100 |
1837 |
AND EAX,$5100 |
| 1836 |
MOV af.l,AH |
1838 |
MOV [rip+af.l],AH |
| 1837 |
|
1839 |
|
| 1838 |
end; |
1840 |
end; |
| 1839 |
|
1841 |
|
@@ -1843,11 +1845,11 @@ end; |
| 1843 |
function SUB_B: byte; |
1845 |
function SUB_B: byte; |
| 1844 |
begin |
1846 |
begin |
| 1845 |
asm |
1847 |
asm |
| 1846 |
MOV AL,bc.h |
1848 |
MOV AL,[rip+bc.h] |
| 1847 |
SUB af.h,AL |
1849 |
SUB [rip+af.h],AL |
| 1848 |
LAHF |
1850 |
LAHF |
| 1849 |
OR EAX,$400 |
1851 |
OR EAX,$400 |
| 1850 |
MOV af.l,AH |
1852 |
MOV [rip+af.l],AH |
| 1851 |
|
1853 |
|
| 1852 |
end; |
1854 |
end; |
| 1853 |
Result := 4; |
1855 |
Result := 4; |
@@ -1856,11 +1858,11 @@ end; |
| 1856 |
function SUB_C: byte; |
1858 |
function SUB_C: byte; |
| 1857 |
begin |
1859 |
begin |
| 1858 |
asm |
1860 |
asm |
| 1859 |
MOV AL,bc.l |
1861 |
MOV AL,[rip+bc.l] |
| 1860 |
SUB af.h,AL |
1862 |
SUB [rip+af.h],AL |
| 1861 |
LAHF |
1863 |
LAHF |
| 1862 |
OR EAX,$400 |
1864 |
OR EAX,$400 |
| 1863 |
MOV af.l,AH |
1865 |
MOV [rip+af.l],AH |
| 1864 |
|
1866 |
|
| 1865 |
end; |
1867 |
end; |
| 1866 |
|
1868 |
|
@@ -1870,11 +1872,11 @@ end; |
| 1870 |
function SUB_D: byte; |
1872 |
function SUB_D: byte; |
| 1871 |
begin |
1873 |
begin |
| 1872 |
asm |
1874 |
asm |
| 1873 |
MOV AL,de.h |
1875 |
MOV AL,[rip+de.h] |
| 1874 |
SUB af.h,AL |
1876 |
SUB [rip+af.h],AL |
| 1875 |
LAHF |
1877 |
LAHF |
| 1876 |
OR EAX,$400 |
1878 |
OR EAX,$400 |
| 1877 |
MOV af.l,AH |
1879 |
MOV [rip+af.l],AH |
| 1878 |
|
1880 |
|
| 1879 |
end; |
1881 |
end; |
| 1880 |
|
1882 |
|
@@ -1884,11 +1886,11 @@ end; |
| 1884 |
function SUB_E: byte; |
1886 |
function SUB_E: byte; |
| 1885 |
begin |
1887 |
begin |
| 1886 |
asm |
1888 |
asm |
| 1887 |
MOV AL,de.l |
1889 |
MOV AL,[rip+de.l] |
| 1888 |
SUB af.h,AL |
1890 |
SUB [rip+af.h],AL |
| 1889 |
LAHF |
1891 |
LAHF |
| 1890 |
OR EAX,$400 |
1892 |
OR EAX,$400 |
| 1891 |
MOV af.l,AH |
1893 |
MOV [rip+af.l],AH |
| 1892 |
|
1894 |
|
| 1893 |
end; |
1895 |
end; |
| 1894 |
|
1896 |
|
@@ -1899,11 +1901,11 @@ end; |
| 1899 |
function SUB_H: byte; |
1901 |
function SUB_H: byte; |
| 1900 |
begin |
1902 |
begin |
| 1901 |
asm |
1903 |
asm |
| 1902 |
MOV AL,hl.h |
1904 |
MOV AL,[rip+hl.h] |
| 1903 |
SUB af.h,AL |
1905 |
SUB [rip+af.h],AL |
| 1904 |
LAHF |
1906 |
LAHF |
| 1905 |
OR EAX,$400 |
1907 |
OR EAX,$400 |
| 1906 |
MOV af.l,AH |
1908 |
MOV [rip+af.l],AH |
| 1907 |
|
1909 |
|
| 1908 |
end; |
1910 |
end; |
| 1909 |
|
1911 |
|
@@ -1913,11 +1915,11 @@ end; |
| 1913 |
function SUB_L: byte; |
1915 |
function SUB_L: byte; |
| 1914 |
begin |
1916 |
begin |
| 1915 |
asm |
1917 |
asm |
| 1916 |
MOV AL,hl.l |
1918 |
MOV AL,[rip+hl.l] |
| 1917 |
SUB af.h,AL |
1919 |
SUB [rip+af.h],AL |
| 1918 |
LAHF |
1920 |
LAHF |
| 1919 |
OR EAX,$400 |
1921 |
OR EAX,$400 |
| 1920 |
MOV af.l,AH |
1922 |
MOV [rip+af.l],AH |
| 1921 |
|
1923 |
|
| 1922 |
end; |
1924 |
end; |
| 1923 |
|
1925 |
|
@@ -1928,16 +1930,16 @@ function SUB_xHL: byte; |
| 1928 |
begin |
1930 |
begin |
| 1929 |
w1 := speekb(hl.w); |
1931 |
w1 := speekb(hl.w); |
| 1930 |
asm |
1932 |
asm |
| 1931 |
//MOV AX,hl.w |
1933 |
//MOV AX,[rip+hl.w] |
| 1932 |
//PUSH EAX |
1934 |
//PUSH EAX |
| 1933 |
//CALL speekb |
1935 |
//CALL speekb |
| 1934 |
//LEA ESP,[ESP+4] |
1936 |
//LEA ESP,[ESP+4] |
| 1935 |
MOV AX, w1 |
1937 |
MOV AX, [rip+w1] |
| 1936 |
|
1938 |
|
| 1937 |
SUB af.h,AL |
1939 |
SUB [rip+af.h],AL |
| 1938 |
LAHF |
1940 |
LAHF |
| 1939 |
OR EAX,$400 |
1941 |
OR EAX,$400 |
| 1940 |
MOV af.l,AH |
1942 |
MOV [rip+af.l],AH |
| 1941 |
|
1943 |
|
| 1942 |
end; |
1944 |
end; |
| 1943 |
|
1945 |
|
@@ -1947,11 +1949,11 @@ end; |
| 1947 |
function SUB_A: byte; |
1949 |
function SUB_A: byte; |
| 1948 |
begin |
1950 |
begin |
| 1949 |
asm |
1951 |
asm |
| 1950 |
MOV AL,af.h |
1952 |
MOV AL,[rip+af.h] |
| 1951 |
SUB af.h,AL |
1953 |
SUB [rip+af.h],AL |
| 1952 |
LAHF |
1954 |
LAHF |
| 1953 |
OR EAX,$400 |
1955 |
OR EAX,$400 |
| 1954 |
MOV af.l,AH |
1956 |
MOV [rip+af.l],AH |
| 1955 |
|
1957 |
|
| 1956 |
end; |
1958 |
end; |
| 1957 |
Result := 4; |
1959 |
Result := 4; |
@@ -1961,13 +1963,13 @@ end; |
| 1961 |
function SBC_B: byte; |
1963 |
function SBC_B: byte; |
| 1962 |
begin |
1964 |
begin |
| 1963 |
asm |
1965 |
asm |
| 1964 |
MOV AH,af.l |
1966 |
MOV AH,[rip+af.l] |
| 1965 |
SAHF |
1967 |
SAHF |
| 1966 |
MOV AL,bc.h |
1968 |
MOV AL,[rip+bc.h] |
| 1967 |
SBB af.h,AL |
1969 |
SBB [rip+af.h],AL |
| 1968 |
LAHF |
1970 |
LAHF |
| 1969 |
OR EAX,$400 |
1971 |
OR EAX,$400 |
| 1970 |
MOV af.l,AH |
1972 |
MOV [rip+af.l],AH |
| 1971 |
|
1973 |
|
| 1972 |
end; |
1974 |
end; |
| 1973 |
|
1975 |
|
@@ -1978,13 +1980,13 @@ end; |
| 1978 |
function SBC_C: byte; |
1980 |
function SBC_C: byte; |
| 1979 |
begin |
1981 |
begin |
| 1980 |
asm |
1982 |
asm |
| 1981 |
MOV AH,af.l |
1983 |
MOV AH,[rip+af.l] |
| 1982 |
SAHF |
1984 |
SAHF |
| 1983 |
MOV AL,bc.l |
1985 |
MOV AL,[rip+bc.l] |
| 1984 |
SBB af.h,AL |
1986 |
SBB [rip+af.h],AL |
| 1985 |
LAHF |
1987 |
LAHF |
| 1986 |
OR EAX,$400 |
1988 |
OR EAX,$400 |
| 1987 |
MOV af.l,AH |
1989 |
MOV [rip+af.l],AH |
| 1988 |
|
1990 |
|
| 1989 |
end; |
1991 |
end; |
| 1990 |
|
1992 |
|
@@ -1994,13 +1996,13 @@ end; |
| 1994 |
function SBC_D: byte; |
1996 |
function SBC_D: byte; |
| 1995 |
begin |
1997 |
begin |
| 1996 |
asm |
1998 |
asm |
| 1997 |
MOV AH,af.l |
1999 |
MOV AH,[rip+af.l] |
| 1998 |
SAHF |
2000 |
SAHF |
| 1999 |
MOV AL,de.h |
2001 |
MOV AL,[rip+de.h] |
| 2000 |
SBB af.h,AL |
2002 |
SBB [rip+af.h],AL |
| 2001 |
LAHF |
2003 |
LAHF |
| 2002 |
OR EAX,$400 |
2004 |
OR EAX,$400 |
| 2003 |
MOV af.l,AH |
2005 |
MOV [rip+af.l],AH |
| 2004 |
|
2006 |
|
| 2005 |
end; |
2007 |
end; |
| 2006 |
|
2008 |
|
@@ -2010,13 +2012,13 @@ end; |
| 2010 |
function SBC_E: byte; |
2012 |
function SBC_E: byte; |
| 2011 |
begin |
2013 |
begin |
| 2012 |
asm |
2014 |
asm |
| 2013 |
MOV AH,af.l |
2015 |
MOV AH,[rip+af.l] |
| 2014 |
SAHF |
2016 |
SAHF |
| 2015 |
MOV AL,de.l |
2017 |
MOV AL,[rip+de.l] |
| 2016 |
SBB af.h,AL |
2018 |
SBB [rip+af.h],AL |
| 2017 |
LAHF |
2019 |
LAHF |
| 2018 |
OR EAX,$400 |
2020 |
OR EAX,$400 |
| 2019 |
MOV af.l,AH |
2021 |
MOV [rip+af.l],AH |
| 2020 |
|
2022 |
|
| 2021 |
end; |
2023 |
end; |
| 2022 |
|
2024 |
|
@@ -2026,13 +2028,13 @@ end; |
| 2026 |
function SBC_H: byte; |
2028 |
function SBC_H: byte; |
| 2027 |
begin |
2029 |
begin |
| 2028 |
asm |
2030 |
asm |
| 2029 |
MOV AH,af.l |
2031 |
MOV AH,[rip+af.l] |
| 2030 |
SAHF |
2032 |
SAHF |
| 2031 |
MOV AL,hl.h |
2033 |
MOV AL,[rip+hl.h] |
| 2032 |
SBB af.h,AL |
2034 |
SBB [rip+af.h],AL |
| 2033 |
LAHF |
2035 |
LAHF |
| 2034 |
OR EAX,$400 |
2036 |
OR EAX,$400 |
| 2035 |
MOV af.l,AH |
2037 |
MOV [rip+af.l],AH |
| 2036 |
|
2038 |
|
| 2037 |
end; |
2039 |
end; |
| 2038 |
|
2040 |
|
@@ -2042,13 +2044,13 @@ end; |
| 2042 |
function SBC_L: byte; |
2044 |
function SBC_L: byte; |
| 2043 |
begin |
2045 |
begin |
| 2044 |
asm |
2046 |
asm |
| 2045 |
MOV AH,af.l |
2047 |
MOV AH,[rip+af.l] |
| 2046 |
SAHF |
2048 |
SAHF |
| 2047 |
MOV AL,hl.l |
2049 |
MOV AL,[rip+hl.l] |
| 2048 |
SBB af.h,AL |
2050 |
SBB [rip+af.h],AL |
| 2049 |
LAHF |
2051 |
LAHF |
| 2050 |
OR EAX,$400 |
2052 |
OR EAX,$400 |
| 2051 |
MOV af.l,AH |
2053 |
MOV [rip+af.l],AH |
| 2052 |
|
2054 |
|
| 2053 |
end; |
2055 |
end; |
| 2054 |
|
2056 |
|
@@ -2059,19 +2061,19 @@ function SBC_xHL: byte; |
| 2059 |
begin |
2061 |
begin |
| 2060 |
w1 := speekb(hl.w); |
2062 |
w1 := speekb(hl.w); |
| 2061 |
asm |
2063 |
asm |
| 2062 |
//MOV AX,hl.w |
2064 |
//MOV AX,[rip+hl.w] |
| 2063 |
//PUSH EAX |
2065 |
//PUSH EAX |
| 2064 |
//CALL speekb |
2066 |
//CALL speekb |
| 2065 |
//LEA ESP,[ESP+4] |
2067 |
//LEA ESP,[ESP+4] |
| 2066 |
MOV AX, w1 |
2068 |
MOV AX, [rip+w1] |
| 2067 |
|
2069 |
|
| 2068 |
MOV AH,af.l |
2070 |
MOV AH,[rip+af.l] |
| 2069 |
SAHF |
2071 |
SAHF |
| 2070 |
|
2072 |
|
| 2071 |
SBB af.h,AL |
2073 |
SBB [rip+af.h],AL |
| 2072 |
LAHF |
2074 |
LAHF |
| 2073 |
OR EAX,$400 |
2075 |
OR EAX,$400 |
| 2074 |
MOV af.l,AH |
2076 |
MOV [rip+af.l],AH |
| 2075 |
|
2077 |
|
| 2076 |
end; |
2078 |
end; |
| 2077 |
Result := 8; |
2079 |
Result := 8; |
@@ -2080,13 +2082,13 @@ end; |
| 2080 |
function SBC_A: byte; |
2082 |
function SBC_A: byte; |
| 2081 |
begin |
2083 |
begin |
| 2082 |
asm |
2084 |
asm |
| 2083 |
MOV AH,af.l |
2085 |
MOV AH,[rip+af.l] |
| 2084 |
SAHF |
2086 |
SAHF |
| 2085 |
MOV AL,af.h |
2087 |
MOV AL,[rip+af.h] |
| 2086 |
SBB af.h,AL |
2088 |
SBB [rip+af.h],AL |
| 2087 |
LAHF |
2089 |
LAHF |
| 2088 |
OR EAX,$400 |
2090 |
OR EAX,$400 |
| 2089 |
MOV af.l,AH |
2091 |
MOV [rip+af.l],AH |
| 2090 |
|
2092 |
|
| 2091 |
end; |
2093 |
end; |
| 2092 |
Result := 4; |
2094 |
Result := 4; |
@@ -2095,12 +2097,12 @@ end; |
| 2095 |
function AND_B: byte; |
2097 |
function AND_B: byte; |
| 2096 |
begin |
2098 |
begin |
| 2097 |
asm |
2099 |
asm |
| 2098 |
MOV AL,bc.h |
2100 |
MOV AL,[rip+bc.h] |
| 2099 |
AND af.h,AL |
2101 |
AND [rip+af.h],AL |
| 2100 |
LAHF |
2102 |
LAHF |
| 2101 |
AND EAX,$4000 |
2103 |
AND EAX,$4000 |
| 2102 |
OR EAX,$1000 |
2104 |
OR EAX,$1000 |
| 2103 |
MOV af.l,AH |
2105 |
MOV [rip+af.l],AH |
| 2104 |
end; |
2106 |
end; |
| 2105 |
Result := 4; |
2107 |
Result := 4; |
| 2106 |
end; |
2108 |
end; |
@@ -2108,12 +2110,12 @@ end; |
| 2108 |
function AND_C: byte; |
2110 |
function AND_C: byte; |
| 2109 |
begin |
2111 |
begin |
| 2110 |
asm |
2112 |
asm |
| 2111 |
MOV AL,bc.l |
2113 |
MOV AL,[rip+bc.l] |
| 2112 |
AND af.h,AL |
2114 |
AND [rip+af.h],AL |
| 2113 |
LAHF |
2115 |
LAHF |
| 2114 |
AND EAX,$4000 |
2116 |
AND EAX,$4000 |
| 2115 |
OR EAX,$1000 |
2117 |
OR EAX,$1000 |
| 2116 |
MOV af.l,AH |
2118 |
MOV [rip+af.l],AH |
| 2117 |
end; |
2119 |
end; |
| 2118 |
|
2120 |
|
| 2119 |
Result := 4; |
2121 |
Result := 4; |
@@ -2122,12 +2124,12 @@ end; |
| 2122 |
function AND_D: byte; |
2124 |
function AND_D: byte; |
| 2123 |
begin |
2125 |
begin |
| 2124 |
asm |
2126 |
asm |
| 2125 |
MOV AL,de.h |
2127 |
MOV AL,[rip+de.h] |
| 2126 |
AND af.h,AL |
2128 |
AND [rip+af.h],AL |
| 2127 |
LAHF |
2129 |
LAHF |
| 2128 |
AND EAX,$4000 |
2130 |
AND EAX,$4000 |
| 2129 |
OR EAX,$1000 |
2131 |
OR EAX,$1000 |
| 2130 |
MOV af.l,AH |
2132 |
MOV [rip+af.l],AH |
| 2131 |
end; |
2133 |
end; |
| 2132 |
Result := 4; |
2134 |
Result := 4; |
| 2133 |
end; |
2135 |
end; |
@@ -2135,12 +2137,12 @@ end; |
| 2135 |
function AND_E: byte; |
2137 |
function AND_E: byte; |
| 2136 |
begin |
2138 |
begin |
| 2137 |
asm |
2139 |
asm |
| 2138 |
MOV AL,de.l |
2140 |
MOV AL,[rip+de.l] |
| 2139 |
AND af.h,AL |
2141 |
AND [rip+af.h],AL |
| 2140 |
LAHF |
2142 |
LAHF |
| 2141 |
AND EAX,$4000 |
2143 |
AND EAX,$4000 |
| 2142 |
OR EAX,$1000 |
2144 |
OR EAX,$1000 |
| 2143 |
MOV af.l,AH |
2145 |
MOV [rip+af.l],AH |
| 2144 |
end; |
2146 |
end; |
| 2145 |
Result := 4; |
2147 |
Result := 4; |
| 2146 |
end; |
2148 |
end; |
@@ -2148,12 +2150,12 @@ end; |
| 2148 |
function AND_H: byte; |
2150 |
function AND_H: byte; |
| 2149 |
begin |
2151 |
begin |
| 2150 |
asm |
2152 |
asm |
| 2151 |
MOV AL,hl.h |
2153 |
MOV AL,[rip+hl.h] |
| 2152 |
AND af.h,AL |
2154 |
AND [rip+af.h],AL |
| 2153 |
LAHF |
2155 |
LAHF |
| 2154 |
AND EAX,$4000 |
2156 |
AND EAX,$4000 |
| 2155 |
OR EAX,$1000 |
2157 |
OR EAX,$1000 |
| 2156 |
MOV af.l,AH |
2158 |
MOV [rip+af.l],AH |
| 2157 |
end; |
2159 |
end; |
| 2158 |
Result := 4; |
2160 |
Result := 4; |
| 2159 |
end; |
2161 |
end; |
@@ -2161,12 +2163,12 @@ end; |
| 2161 |
function AND_L: byte; |
2163 |
function AND_L: byte; |
| 2162 |
begin |
2164 |
begin |
| 2163 |
asm |
2165 |
asm |
| 2164 |
MOV AL,hl.l |
2166 |
MOV AL,[rip+hl.l] |
| 2165 |
AND af.h,AL |
2167 |
AND [rip+af.h],AL |
| 2166 |
LAHF |
2168 |
LAHF |
| 2167 |
AND EAX,$4000 |
2169 |
AND EAX,$4000 |
| 2168 |
OR EAX,$1000 |
2170 |
OR EAX,$1000 |
| 2169 |
MOV af.l,AH |
2171 |
MOV [rip+af.l],AH |
| 2170 |
end; |
2172 |
end; |
| 2171 |
Result := 4; |
2173 |
Result := 4; |
| 2172 |
end; |
2174 |
end; |
@@ -2175,17 +2177,17 @@ function AND_xHL: byte; |
| 2175 |
begin |
2177 |
begin |
| 2176 |
w1 := speekb(hl.w); |
2178 |
w1 := speekb(hl.w); |
| 2177 |
asm |
2179 |
asm |
| 2178 |
//MOV AX,hl.w |
2180 |
//MOV AX,[rip+hl.w] |
| 2179 |
//PUSH EAX |
2181 |
//PUSH EAX |
| 2180 |
//CALL speekb |
2182 |
//CALL speekb |
| 2181 |
//LEA ESP,[ESP+4] |
2183 |
//LEA ESP,[ESP+4] |
| 2182 |
MOV AX, w1 |
2184 |
MOV AX, [rip+w1] |
| 2183 |
|
2185 |
|
| 2184 |
AND af.h,AL |
2186 |
AND [rip+af.h],AL |
| 2185 |
LAHF |
2187 |
LAHF |
| 2186 |
AND EAX,$4000 |
2188 |
AND EAX,$4000 |
| 2187 |
OR EAX,$1000 |
2189 |
OR EAX,$1000 |
| 2188 |
MOV af.l,AH |
2190 |
MOV [rip+af.l],AH |
| 2189 |
end; |
2191 |
end; |
| 2190 |
Result := 8; |
2192 |
Result := 8; |
| 2191 |
end; |
2193 |
end; |
@@ -2193,12 +2195,12 @@ end; |
| 2193 |
function AND_A: byte; |
2195 |
function AND_A: byte; |
| 2194 |
begin |
2196 |
begin |
| 2195 |
asm |
2197 |
asm |
| 2196 |
MOV AL,af.h |
2198 |
MOV AL,[rip+af.h] |
| 2197 |
AND af.h,AL |
2199 |
AND [rip+af.h],AL |
| 2198 |
LAHF |
2200 |
LAHF |
| 2199 |
AND EAX,$4000 |
2201 |
AND EAX,$4000 |
| 2200 |
OR EAX,$1000 // AH |
2202 |
OR EAX,$1000 // AH |
| 2201 |
MOV af.l,AH |
2203 |
MOV [rip+af.l],AH |
| 2202 |
end; |
2204 |
end; |
| 2203 |
Result := 4; |
2205 |
Result := 4; |
| 2204 |
end; |
2206 |
end; |
@@ -2206,11 +2208,11 @@ end; |
| 2206 |
function XOR_B: byte; |
2208 |
function XOR_B: byte; |
| 2207 |
begin |
2209 |
begin |
| 2208 |
asm |
2210 |
asm |
| 2209 |
MOV AL,bc.h |
2211 |
MOV AL,[rip+bc.h] |
| 2210 |
XOR af.h,AL |
2212 |
XOR [rip+af.h],AL |
| 2211 |
LAHF |
2213 |
LAHF |
| 2212 |
AND EAX,$4000 |
2214 |
AND EAX,$4000 |
| 2213 |
MOV af.l,AH |
2215 |
MOV [rip+af.l],AH |
| 2214 |
end; |
2216 |
end; |
| 2215 |
Result := 4; |
2217 |
Result := 4; |
| 2216 |
end; |
2218 |
end; |
@@ -2218,11 +2220,11 @@ end; |
| 2218 |
function XOR_C: byte; |
2220 |
function XOR_C: byte; |
| 2219 |
begin |
2221 |
begin |
| 2220 |
asm |
2222 |
asm |
| 2221 |
MOV AL,bc.l |
2223 |
MOV AL,[rip+bc.l] |
| 2222 |
XOR af.h,AL |
2224 |
XOR [rip+af.h],AL |
| 2223 |
LAHF |
2225 |
LAHF |
| 2224 |
AND EAX,$4000 |
2226 |
AND EAX,$4000 |
| 2225 |
MOV af.l,AH |
2227 |
MOV [rip+af.l],AH |
| 2226 |
end; |
2228 |
end; |
| 2227 |
Result := 4; |
2229 |
Result := 4; |
| 2228 |
end; |
2230 |
end; |
@@ -2230,11 +2232,11 @@ end; |
| 2230 |
function XOR_D: byte; |
2232 |
function XOR_D: byte; |
| 2231 |
begin |
2233 |
begin |
| 2232 |
asm |
2234 |
asm |
| 2233 |
MOV AL,de.h |
2235 |
MOV AL,[rip+de.h] |
| 2234 |
XOR af.h,AL |
2236 |
XOR [rip+af.h],AL |
| 2235 |
LAHF |
2237 |
LAHF |
| 2236 |
AND EAX,$4000 |
2238 |
AND EAX,$4000 |
| 2237 |
MOV af.l,AH |
2239 |
MOV [rip+af.l],AH |
| 2238 |
end; |
2240 |
end; |
| 2239 |
Result := 4; |
2241 |
Result := 4; |
| 2240 |
end; |
2242 |
end; |
@@ -2242,11 +2244,11 @@ end; |
| 2242 |
function XOR_E: byte; |
2244 |
function XOR_E: byte; |
| 2243 |
begin |
2245 |
begin |
| 2244 |
asm |
2246 |
asm |
| 2245 |
MOV AL,de.l |
2247 |
MOV AL,[rip+de.l] |
| 2246 |
XOR af.h,AL |
2248 |
XOR [rip+af.h],AL |
| 2247 |
LAHF |
2249 |
LAHF |
| 2248 |
AND EAX,$4000 |
2250 |
AND EAX,$4000 |
| 2249 |
MOV af.l,AH |
2251 |
MOV [rip+af.l],AH |
| 2250 |
end; |
2252 |
end; |
| 2251 |
Result := 4; |
2253 |
Result := 4; |
| 2252 |
end; |
2254 |
end; |
@@ -2254,11 +2256,11 @@ end; |
| 2254 |
function XOR_H: byte; |
2256 |
function XOR_H: byte; |
| 2255 |
begin |
2257 |
begin |
| 2256 |
asm |
2258 |
asm |
| 2257 |
MOV AL,hl.h |
2259 |
MOV AL,[rip+hl.h] |
| 2258 |
XOR af.h,AL |
2260 |
XOR [rip+af.h],AL |
| 2259 |
LAHF |
2261 |
LAHF |
| 2260 |
AND EAX,$4000 |
2262 |
AND EAX,$4000 |
| 2261 |
MOV af.l,AH |
2263 |
MOV [rip+af.l],AH |
| 2262 |
end; |
2264 |
end; |
| 2263 |
Result := 4; |
2265 |
Result := 4; |
| 2264 |
end; |
2266 |
end; |
@@ -2266,11 +2268,11 @@ end; |
| 2266 |
function XOR_L: byte; |
2268 |
function XOR_L: byte; |
| 2267 |
begin |
2269 |
begin |
| 2268 |
asm |
2270 |
asm |
| 2269 |
MOV AL,hl.l |
2271 |
MOV AL,[rip+hl.l] |
| 2270 |
XOR af.h,AL |
2272 |
XOR [rip+af.h],AL |
| 2271 |
LAHF |
2273 |
LAHF |
| 2272 |
AND EAX,$4000 |
2274 |
AND EAX,$4000 |
| 2273 |
MOV af.l,AH |
2275 |
MOV [rip+af.l],AH |
| 2274 |
end; |
2276 |
end; |
| 2275 |
Result := 4; |
2277 |
Result := 4; |
| 2276 |
end; |
2278 |
end; |
@@ -2279,16 +2281,16 @@ function XOR_xHL: byte; |
| 2279 |
begin |
2281 |
begin |
| 2280 |
w1 := speekb(hl.w); |
2282 |
w1 := speekb(hl.w); |
| 2281 |
asm |
2283 |
asm |
| 2282 |
//MOV AX,hl.w |
2284 |
//MOV AX,[rip+hl.w] |
| 2283 |
//PUSH EAX |
2285 |
//PUSH EAX |
| 2284 |
//CALL speekb |
2286 |
//CALL speekb |
| 2285 |
//LEA ESP,[ESP+4] |
2287 |
//LEA ESP,[ESP+4] |
| 2286 |
MOV AX, w1 |
2288 |
MOV AX, [rip+w1] |
| 2287 |
|
2289 |
|
| 2288 |
XOR af.h,AL |
2290 |
XOR [rip+af.h],AL |
| 2289 |
LAHF |
2291 |
LAHF |
| 2290 |
AND EAX,$4000 |
2292 |
AND EAX,$4000 |
| 2291 |
MOV af.l,AH |
2293 |
MOV [rip+af.l],AH |
| 2292 |
end; |
2294 |
end; |
| 2293 |
Result := 8; |
2295 |
Result := 8; |
| 2294 |
end; |
2296 |
end; |
@@ -2305,11 +2307,11 @@ end; |
| 2305 |
function OR_B: byte; |
2307 |
function OR_B: byte; |
| 2306 |
begin |
2308 |
begin |
| 2307 |
asm |
2309 |
asm |
| 2308 |
MOV AL,bc.h |
2310 |
MOV AL,[rip+bc.h] |
| 2309 |
OR af.h,AL |
2311 |
OR [rip+af.h],AL |
| 2310 |
LAHF |
2312 |
LAHF |
| 2311 |
AND EAX,$4000 |
2313 |
AND EAX,$4000 |
| 2312 |
MOV af.l,AH |
2314 |
MOV [rip+af.l],AH |
| 2313 |
end; |
2315 |
end; |
| 2314 |
Result := 4; |
2316 |
Result := 4; |
| 2315 |
end; |
2317 |
end; |
@@ -2317,11 +2319,11 @@ end; |
| 2317 |
function OR_C: byte; |
2319 |
function OR_C: byte; |
| 2318 |
begin |
2320 |
begin |
| 2319 |
asm |
2321 |
asm |
| 2320 |
MOV AL,bc.l |
2322 |
MOV AL,[rip+bc.l] |
| 2321 |
OR af.h,AL |
2323 |
OR [rip+af.h],AL |
| 2322 |
LAHF |
2324 |
LAHF |
| 2323 |
AND EAX,$4000 |
2325 |
AND EAX,$4000 |
| 2324 |
MOV af.l,AH |
2326 |
MOV [rip+af.l],AH |
| 2325 |
end; |
2327 |
end; |
| 2326 |
|
2328 |
|
| 2327 |
Result := 4; |
2329 |
Result := 4; |
@@ -2330,11 +2332,11 @@ end; |
| 2330 |
function OR_D: byte; |
2332 |
function OR_D: byte; |
| 2331 |
begin |
2333 |
begin |
| 2332 |
asm |
2334 |
asm |
| 2333 |
MOV AL,de.h |
2335 |
MOV AL,[rip+de.h] |
| 2334 |
OR af.h,AL |
2336 |
OR [rip+af.h],AL |
| 2335 |
LAHF |
2337 |
LAHF |
| 2336 |
AND EAX,$4000 |
2338 |
AND EAX,$4000 |
| 2337 |
MOV af.l,AH |
2339 |
MOV [rip+af.l],AH |
| 2338 |
end; |
2340 |
end; |
| 2339 |
|
2341 |
|
| 2340 |
Result := 4; |
2342 |
Result := 4; |
@@ -2343,11 +2345,11 @@ end; |
| 2343 |
function OR_E: byte; |
2345 |
function OR_E: byte; |
| 2344 |
begin |
2346 |
begin |
| 2345 |
asm |
2347 |
asm |
| 2346 |
MOV AL,de.l |
2348 |
MOV AL,[rip+de.l] |
| 2347 |
OR af.h,AL |
2349 |
OR [rip+af.h],AL |
| 2348 |
LAHF |
2350 |
LAHF |
| 2349 |
AND EAX,$4000 |
2351 |
AND EAX,$4000 |
| 2350 |
MOV af.l,AH |
2352 |
MOV [rip+af.l],AH |
| 2351 |
end; |
2353 |
end; |
| 2352 |
Result := 4; |
2354 |
Result := 4; |
| 2353 |
end; |
2355 |
end; |
@@ -2355,11 +2357,11 @@ end; |
| 2355 |
function OR_H: byte; |
2357 |
function OR_H: byte; |
| 2356 |
begin |
2358 |
begin |
| 2357 |
asm |
2359 |
asm |
| 2358 |
MOV AL,hl.h |
2360 |
MOV AL,[rip+hl.h] |
| 2359 |
OR af.h,AL |
2361 |
OR [rip+af.h],AL |
| 2360 |
LAHF |
2362 |
LAHF |
| 2361 |
AND EAX,$4000 |
2363 |
AND EAX,$4000 |
| 2362 |
MOV af.l,AH |
2364 |
MOV [rip+af.l],AH |
| 2363 |
end; |
2365 |
end; |
| 2364 |
Result := 4; |
2366 |
Result := 4; |
| 2365 |
end; |
2367 |
end; |
@@ -2367,11 +2369,11 @@ end; |
| 2367 |
function OR_L: byte; |
2369 |
function OR_L: byte; |
| 2368 |
begin |
2370 |
begin |
| 2369 |
asm |
2371 |
asm |
| 2370 |
MOV AL,hl.l |
2372 |
MOV AL,[rip+hl.l] |
| 2371 |
OR af.h,AL |
2373 |
OR [rip+af.h],AL |
| 2372 |
LAHF |
2374 |
LAHF |
| 2373 |
AND EAX,$4000 |
2375 |
AND EAX,$4000 |
| 2374 |
MOV af.l,AH |
2376 |
MOV [rip+af.l],AH |
| 2375 |
end; |
2377 |
end; |
| 2376 |
Result := 4; |
2378 |
Result := 4; |
| 2377 |
end; |
2379 |
end; |
@@ -2381,17 +2383,17 @@ begin |
| 2381 |
w1 := speekb(hl.w); |
2383 |
w1 := speekb(hl.w); |
| 2382 |
|
2384 |
|
| 2383 |
asm |
2385 |
asm |
| 2384 |
//MOV AX,hl.w |
2386 |
//MOV AX,[rip+hl.w] |
| 2385 |
//PUSH EAX |
2387 |
//PUSH EAX |
| 2386 |
//CALL speekb |
2388 |
//CALL speekb |
| 2387 |
//LEA ESP,[ESP+4] |
2389 |
//LEA ESP,[ESP+4] |
| 2388 |
MOV AX, w1 |
2390 |
MOV AX, [rip+w1] |
| 2389 |
|
2391 |
|
| 2390 |
|
2392 |
|
| 2391 |
OR af.h,AL |
2393 |
OR [rip+af.h],AL |
| 2392 |
LAHF |
2394 |
LAHF |
| 2393 |
AND EAX,$4000 |
2395 |
AND EAX,$4000 |
| 2394 |
MOV af.l,AH |
2396 |
MOV [rip+af.l],AH |
| 2395 |
end; |
2397 |
end; |
| 2396 |
Result := 8; |
2398 |
Result := 8; |
| 2397 |
end; |
2399 |
end; |
@@ -2399,11 +2401,11 @@ end; |
| 2399 |
function OR_A: byte; |
2401 |
function OR_A: byte; |
| 2400 |
begin |
2402 |
begin |
| 2401 |
asm |
2403 |
asm |
| 2402 |
MOV AL,af.h |
2404 |
MOV AL,[rip+af.h] |
| 2403 |
OR af.h,AL |
2405 |
OR [rip+af.h],AL |
| 2404 |
LAHF |
2406 |
LAHF |
| 2405 |
AND EAX,$4000 |
2407 |
AND EAX,$4000 |
| 2406 |
MOV af.l,AH |
2408 |
MOV [rip+af.l],AH |
| 2407 |
end; |
2409 |
end; |
| 2408 |
Result := 4; |
2410 |
Result := 4; |
| 2409 |
end; |
2411 |
end; |
@@ -2411,11 +2413,11 @@ end; |
| 2411 |
function CP_B: byte; |
2413 |
function CP_B: byte; |
| 2412 |
begin |
2414 |
begin |
| 2413 |
asm |
2415 |
asm |
| 2414 |
MOV AL,bc.h |
2416 |
MOV AL,[rip+bc.h] |
| 2415 |
CMP af.h,AL |
2417 |
CMP [rip+af.h],AL |
| 2416 |
LAHF |
2418 |
LAHF |
| 2417 |
OR EAX,$400 |
2419 |
OR EAX,$400 |
| 2418 |
MOV af.l,AH |
2420 |
MOV [rip+af.l],AH |
| 2419 |
end; |
2421 |
end; |
| 2420 |
|
2422 |
|
| 2421 |
Result := 4; |
2423 |
Result := 4; |
@@ -2424,11 +2426,11 @@ end; |
| 2424 |
function CP_C: byte; |
2426 |
function CP_C: byte; |
| 2425 |
begin |
2427 |
begin |
| 2426 |
asm |
2428 |
asm |
| 2427 |
MOV AL,bc.l |
2429 |
MOV AL,[rip+bc.l] |
| 2428 |
CMP af.h,AL |
2430 |
CMP [rip+af.h],AL |
| 2429 |
LAHF |
2431 |
LAHF |
| 2430 |
OR EAX,$400 |
2432 |
OR EAX,$400 |
| 2431 |
MOV af.l,AH |
2433 |
MOV [rip+af.l],AH |
| 2432 |
|
2434 |
|
| 2433 |
end; |
2435 |
end; |
| 2434 |
|
2436 |
|
@@ -2438,11 +2440,11 @@ end; |
| 2438 |
function CP_D: byte; |
2440 |
function CP_D: byte; |
| 2439 |
begin |
2441 |
begin |
| 2440 |
asm |
2442 |
asm |
| 2441 |
MOV AL,de.h |
2443 |
MOV AL,[rip+de.h] |
| 2442 |
CMP af.h,AL |
2444 |
CMP [rip+af.h],AL |
| 2443 |
LAHF |
2445 |
LAHF |
| 2444 |
OR EAX,$400 |
2446 |
OR EAX,$400 |
| 2445 |
MOV af.l,AH |
2447 |
MOV [rip+af.l],AH |
| 2446 |
|
2448 |
|
| 2447 |
end; |
2449 |
end; |
| 2448 |
|
2450 |
|
@@ -2452,11 +2454,11 @@ end; |
| 2452 |
function CP_E: byte; |
2454 |
function CP_E: byte; |
| 2453 |
begin |
2455 |
begin |
| 2454 |
asm |
2456 |
asm |
| 2455 |
MOV AL,de.l |
2457 |
MOV AL,[rip+de.l] |
| 2456 |
CMP af.h,AL |
2458 |
CMP [rip+af.h],AL |
| 2457 |
LAHF |
2459 |
LAHF |
| 2458 |
OR EAX,$400 |
2460 |
OR EAX,$400 |
| 2459 |
MOV af.l,AH |
2461 |
MOV [rip+af.l],AH |
| 2460 |
end; |
2462 |
end; |
| 2461 |
Result := 4; |
2463 |
Result := 4; |
| 2462 |
end; |
2464 |
end; |
@@ -2464,11 +2466,11 @@ end; |
| 2464 |
function CP_H: byte; |
2466 |
function CP_H: byte; |
| 2465 |
begin |
2467 |
begin |
| 2466 |
asm |
2468 |
asm |
| 2467 |
MOV AL,hl.h |
2469 |
MOV AL,[rip+hl.h] |
| 2468 |
CMP af.h,AL |
2470 |
CMP [rip+af.h],AL |
| 2469 |
LAHF |
2471 |
LAHF |
| 2470 |
OR EAX,$400 |
2472 |
OR EAX,$400 |
| 2471 |
MOV af.l,AH |
2473 |
MOV [rip+af.l],AH |
| 2472 |
end; |
2474 |
end; |
| 2473 |
Result := 4; |
2475 |
Result := 4; |
| 2474 |
end; |
2476 |
end; |
@@ -2476,11 +2478,11 @@ end; |
| 2476 |
function CP_L: byte; |
2478 |
function CP_L: byte; |
| 2477 |
begin |
2479 |
begin |
| 2478 |
asm |
2480 |
asm |
| 2479 |
MOV AL,hl.l |
2481 |
MOV AL,[rip+hl.l] |
| 2480 |
CMP af.h,AL |
2482 |
CMP [rip+af.h],AL |
| 2481 |
LAHF |
2483 |
LAHF |
| 2482 |
OR EAX,$400 |
2484 |
OR EAX,$400 |
| 2483 |
MOV af.l,AH |
2485 |
MOV [rip+af.l],AH |
| 2484 |
end; |
2486 |
end; |
| 2485 |
Result := 4; |
2487 |
Result := 4; |
| 2486 |
end; |
2488 |
end; |
@@ -2489,17 +2491,17 @@ function CP_xHL: byte; |
| 2489 |
begin |
2491 |
begin |
| 2490 |
w1 := speekb(hl.w); |
2492 |
w1 := speekb(hl.w); |
| 2491 |
asm |
2493 |
asm |
| 2492 |
//MOV AX,hl.w |
2494 |
//MOV AX,[rip+hl.w] |
| 2493 |
//PUSH EAX |
2495 |
//PUSH EAX |
| 2494 |
//CALL speekb |
2496 |
//CALL speekb |
| 2495 |
//LEA ESP,[ESP+4] |
2497 |
//LEA ESP,[ESP+4] |
| 2496 |
MOV AX, w1 |
2498 |
MOV AX, [rip+w1] |
| 2497 |
|
2499 |
|
| 2498 |
|
2500 |
|
| 2499 |
CMP af.h,AL |
2501 |
CMP [rip+af.h],AL |
| 2500 |
LAHF |
2502 |
LAHF |
| 2501 |
OR EAX,$400 |
2503 |
OR EAX,$400 |
| 2502 |
MOV af.l,AH |
2504 |
MOV [rip+af.l],AH |
| 2503 |
end; |
2505 |
end; |
| 2504 |
Result := 8; |
2506 |
Result := 8; |
| 2505 |
end; |
2507 |
end; |
@@ -2507,12 +2509,12 @@ end; |
| 2507 |
function CP_A: byte; |
2509 |
function CP_A: byte; |
| 2508 |
begin |
2510 |
begin |
| 2509 |
asm |
2511 |
asm |
| 2510 |
MOV AL,af.h |
2512 |
MOV AL,[rip+af.h] |
| 2511 |
CMP af.h,AL |
2513 |
CMP [rip+af.h],AL |
| 2512 |
LAHF |
2514 |
LAHF |
| 2513 |
|
2515 |
|
| 2514 |
OR EAX,$400 |
2516 |
OR EAX,$400 |
| 2515 |
MOV af.l,AH |
2517 |
MOV [rip+af.l],AH |
| 2516 |
end; |
2518 |
end; |
| 2517 |
Result := 4; |
2519 |
Result := 4; |
| 2518 |
end; |
2520 |
end; |
@@ -2528,29 +2530,29 @@ begin |
| 2528 |
Inc(sp_.w); |
2530 |
Inc(sp_.w); |
| 2529 |
|
2531 |
|
| 2530 |
asm |
2532 |
asm |
| 2531 |
//TEST af.l,64 |
2533 |
//TEST [rip+af.l],64 |
| 2532 |
//MOV cycle,8 |
2534 |
//MOV [rip+cycle],8 |
| 2533 |
//JNZ @ende |
2535 |
//JNZ @ende |
| 2534 |
//PUSH dword ptr sp_.w |
2536 |
//PUSH dword ptr [rip+sp_.w] |
| 2535 |
//CALL speekb |
2537 |
//CALL speekb |
| 2536 |
//LEA ESP,[ESP+4] |
2538 |
//LEA ESP,[ESP+4] |
| 2537 |
// |
2539 |
// |
| 2538 |
//INC word ptr sp_.w |
2540 |
//INC word ptr [rip+sp_.w] |
| 2539 |
//PUSH EAX |
2541 |
//PUSH EAX |
| 2540 |
//PUSH dword ptr sp_.w |
2542 |
//PUSH dword ptr [rip+sp_.w] |
| 2541 |
//CALL speekb |
2543 |
//CALL speekb |
| 2542 |
//LEA ESP,[ESP+4] |
2544 |
//LEA ESP,[ESP+4] |
| 2543 |
//INC word ptr sp_.w |
2545 |
//INC word ptr [rip+sp_.w] |
| 2544 |
MOV EAX,i2 |
2546 |
MOV EAX,i2 |
| 2545 |
|
2547 |
|
| 2546 |
SHL EAX,8 |
2548 |
SHL EAX,8 |
| 2547 |
|
2549 |
|
| 2548 |
//POP EBX |
2550 |
//POP EBX |
| 2549 |
MOV EBX,i1 |
2551 |
MOV EBX,[rip+i1] |
| 2550 |
|
2552 |
|
| 2551 |
MOV AL,BL |
2553 |
MOV AL,BL |
| 2552 |
MOV pc.w,AX |
2554 |
MOV [rip+pc.w],AX |
| 2553 |
MOV cycle,20 |
2555 |
MOV [rip+cycle],20 |
| 2554 |
@ende: |
2556 |
@ende: |
| 2555 |
end; |
2557 |
end; |
| 2556 |
|
2558 |
|
@@ -2627,18 +2629,18 @@ begin |
| 2627 |
w1 := speekb(pc.w); |
2629 |
w1 := speekb(pc.w); |
| 2628 |
|
2630 |
|
| 2629 |
asm |
2631 |
asm |
| 2630 |
//PUSH dword ptr pc.w |
2632 |
//PUSH dword ptr [rip+pc.w] |
| 2631 |
//CALL speekb |
2633 |
//CALL speekb |
| 2632 |
//LEA ESP,[ESP+4] |
2634 |
//LEA ESP,[ESP+4] |
| 2633 |
MOV AX, w1 |
2635 |
MOV AX, [rip+w1] |
| 2634 |
INC word ptr pc.w |
2636 |
INC word ptr [rip+pc.w] |
| 2635 |
MOV AH,af.l |
2637 |
MOV AH,[rip+af.l] |
| 2636 |
SAHF |
2638 |
SAHF |
| 2637 |
|
2639 |
|
| 2638 |
ADD af.h,AL |
2640 |
ADD [rip+af.h],AL |
| 2639 |
LAHF |
2641 |
LAHF |
| 2640 |
AND EAX,$5100 |
2642 |
AND EAX,$5100 |
| 2641 |
MOV af.l,AH |
2643 |
MOV [rip+af.l],AH |
| 2642 |
|
2644 |
|
| 2643 |
end; |
2645 |
end; |
| 2644 |
|
2646 |
|
@@ -2735,19 +2737,19 @@ function ADC_BYTE: byte; |
| 2735 |
begin |
2737 |
begin |
| 2736 |
w1 := speekb(pc.w); |
2738 |
w1 := speekb(pc.w); |
| 2737 |
asm |
2739 |
asm |
| 2738 |
//PUSH dword ptr pc.w |
2740 |
//PUSH dword ptr [rip+pc.w] |
| 2739 |
//CALL speekb |
2741 |
//CALL speekb |
| 2740 |
//LEA ESP,[ESP+4] |
2742 |
//LEA ESP,[ESP+4] |
| 2741 |
MOV AX, w1 |
2743 |
MOV AX, [rip+w1] |
| 2742 |
|
2744 |
|
| 2743 |
INC word ptr pc.w |
2745 |
INC word ptr [rip+pc.w] |
| 2744 |
MOV AH,af.l |
2746 |
MOV AH,[rip+af.l] |
| 2745 |
SAHF |
2747 |
SAHF |
| 2746 |
|
2748 |
|
| 2747 |
ADC af.h,AL |
2749 |
ADC [rip+af.h],AL |
| 2748 |
LAHF |
2750 |
LAHF |
| 2749 |
AND EAX,$5100 |
2751 |
AND EAX,$5100 |
| 2750 |
MOV af.l,AH |
2752 |
MOV [rip+af.l],AH |
| 2751 |
|
2753 |
|
| 2752 |
end; |
2754 |
end; |
| 2753 |
|
2755 |
|
@@ -2838,15 +2840,15 @@ end; |
| 2838 |
|
2840 |
|
| 2839 |
function SUB_BYTE: byte; |
2841 |
function SUB_BYTE: byte; |
| 2840 |
begin |
2842 |
begin |
| 2841 |
b.l := speekb(pc.w); |
2843 |
b_pair.l := speekb(pc.w); |
| 2842 |
Inc(pc.w); |
2844 |
Inc(pc.w); |
| 2843 |
asm |
2845 |
asm |
| 2844 |
MOV AL,af.h |
2846 |
MOV AL,[rip+af.h] |
| 2845 |
SUB AL,b.l |
2847 |
SUB AL,[rip+b_pair.l] |
| 2846 |
LAHF |
2848 |
LAHF |
| 2847 |
OR AH,4 |
2849 |
OR AH,4 |
| 2848 |
MOV af.l,AH |
2850 |
MOV [rip+af.l],AH |
| 2849 |
MOV af.h,AL |
2851 |
MOV [rip+af.h],AL |
| 2850 |
end; |
2852 |
end; |
| 2851 |
|
2853 |
|
| 2852 |
Result := 8; |
2854 |
Result := 8; |
@@ -2914,12 +2916,12 @@ function CALL_C: byte; |
| 2914 |
begin |
2916 |
begin |
| 2915 |
if (af.l and 1) = 1 then |
2917 |
if (af.l and 1) = 1 then |
| 2916 |
begin |
2918 |
begin |
| 2917 |
b.l := speekb(pc.w); |
2919 |
b_pair.l := speekb(pc.w); |
| 2918 |
Inc(pc.w); |
2920 |
Inc(pc.w); |
| 2919 |
b.h := speekb(pc.w); |
2921 |
b_pair.h := speekb(pc.w); |
| 2920 |
Inc(pc.w); |
2922 |
Inc(pc.w); |
| 2921 |
push_pc; |
2923 |
push_pc; |
| 2922 |
pc.w := b.w; |
2924 |
pc.w := b_pair.w; |
| 2923 |
Result := 24; |
2925 |
Result := 24; |
| 2924 |
end |
2926 |
end |
| 2925 |
else |
2927 |
else |
@@ -2938,19 +2940,19 @@ function SBC_BYTE: byte; |
| 2938 |
begin |
2940 |
begin |
| 2939 |
w1 := speekb(pc.w); |
2941 |
w1 := speekb(pc.w); |
| 2940 |
asm |
2942 |
asm |
| 2941 |
//PUSH dword ptr pc.w |
2943 |
//PUSH dword ptr [rip+pc.w] |
| 2942 |
//CALL speekb |
2944 |
//CALL speekb |
| 2943 |
//LEA ESP,[ESP+4] |
2945 |
//LEA ESP,[ESP+4] |
| 2944 |
MOV AX, w1 |
2946 |
MOV AX, [rip+w1] |
| 2945 |
|
2947 |
|
| 2946 |
INC word ptr pc.w |
2948 |
INC word ptr [rip+pc.w] |
| 2947 |
MOV AH,af.l |
2949 |
MOV AH,[rip+af.l] |
| 2948 |
SAHF |
2950 |
SAHF |
| 2949 |
|
2951 |
|
| 2950 |
SBB af.h,AL |
2952 |
SBB [rip+af.h],AL |
| 2951 |
LAHF |
2953 |
LAHF |
| 2952 |
OR EAX,$400 |
2954 |
OR EAX,$400 |
| 2953 |
MOV af.l,AH |
2955 |
MOV [rip+af.l],AH |
| 2954 |
|
2956 |
|
| 2955 |
end; |
2957 |
end; |
| 2956 |
Result := 8; |
2958 |
Result := 8; |
@@ -2967,20 +2969,20 @@ function RET_PO: byte; |
| 2967 |
begin |
2969 |
begin |
| 2968 |
w1 := speekb(pc.w); |
2970 |
w1 := speekb(pc.w); |
| 2969 |
asm |
2971 |
asm |
| 2970 |
//PUSH dword ptr pc.w |
2972 |
//PUSH dword ptr [rip+pc.w] |
| 2971 |
//CALL speekb |
2973 |
//CALL speekb |
| 2972 |
//LEA ESP,[ESP+4] |
2974 |
//LEA ESP,[ESP+4] |
| 2973 |
MOV AX, w1 |
2975 |
MOV AX, [rip+w1] |
| 2974 |
|
2976 |
|
| 2975 |
INC word ptr pc.w |
2977 |
INC word ptr [rip+pc.w] |
| 2976 |
MOV AH,$ff |
2978 |
MOV AH,$ff |
| 2977 |
|
2979 |
|
| 2978 |
|
2980 |
|
| 2979 |
//push dword ptr af.h |
2981 |
//push dword ptr [rip+af.h] |
| 2980 |
//PUSH EAX |
2982 |
//PUSH EAX |
| 2981 |
//CALL SpokeB |
2983 |
//CALL SpokeB |
| 2982 |
//LEA ESP,[ESP+8] |
2984 |
//LEA ESP,[ESP+8] |
| 2983 |
MOV w1, AX |
2985 |
MOV [rip+w1], AX |
| 2984 |
end; |
2986 |
end; |
| 2985 |
|
2987 |
|
| 2986 |
spokeb(w1, af.h); |
2988 |
spokeb(w1, af.h); |
@@ -3017,13 +3019,13 @@ end; |
| 3017 |
|
3019 |
|
| 3018 |
function EX_HL_xSP: byte; |
3020 |
function EX_HL_xSP: byte; |
| 3019 |
begin |
3021 |
begin |
| 3020 |
B.l := SpeekB(SP_.W); |
3022 |
b_pair.l := SpeekB(SP_.W); |
| 3021 |
SpokeB(SP_.W, HL.l); |
3023 |
SpokeB(SP_.W, HL.l); |
| 3022 |
Inc(SP_.W); |
3024 |
Inc(SP_.W); |
| 3023 |
B.h := SpeekB(SP_.W); |
3025 |
b_pair.h := SpeekB(SP_.W); |
| 3024 |
SpokeB(SP_.W, HL.h); |
3026 |
SpokeB(SP_.W, HL.h); |
| 3025 |
Dec(SP_.W); |
3027 |
Dec(SP_.W); |
| 3026 |
HL.W := B.W; |
3028 |
HL.W := b_pair.W; |
| 3027 |
Result := 4; |
3029 |
Result := 4; |
| 3028 |
end; |
3030 |
end; |
| 3029 |
|
3031 |
|
@@ -3043,15 +3045,15 @@ end; |
| 3043 |
|
3045 |
|
| 3044 |
function AND_BYTE: byte; |
3046 |
function AND_BYTE: byte; |
| 3045 |
begin |
3047 |
begin |
| 3046 |
b.l := speekb(pc.w); |
3048 |
b_pair.l := speekb(pc.w); |
| 3047 |
Inc(pc.w); |
3049 |
Inc(pc.w); |
| 3048 |
asm |
3050 |
asm |
| 3049 |
MOV AL,b.l |
3051 |
MOV AL,[rip+b_pair.l] |
| 3050 |
AND af.h,AL |
3052 |
AND [rip+af.h],AL |
| 3051 |
LAHF |
3053 |
LAHF |
| 3052 |
AND AH,64 |
3054 |
AND AH,64 |
| 3053 |
OR AH,16 |
3055 |
OR AH,16 |
| 3054 |
MOV af.l,AH |
3056 |
MOV [rip+af.l],AH |
| 3055 |
end; |
3057 |
end; |
| 3056 |
|
3058 |
|
| 3057 |
Result := 8; |
3059 |
Result := 8; |
@@ -3066,13 +3068,13 @@ end; |
| 3066 |
|
3068 |
|
| 3067 |
function RET_PE: byte; |
3069 |
function RET_PE: byte; |
| 3068 |
begin |
3070 |
begin |
| 3069 |
b.l := speekb(pc.w); |
3071 |
b_pair.l := speekb(pc.w); |
| 3070 |
Inc(pc.w); |
3072 |
Inc(pc.w); |
| 3071 |
asm |
3073 |
asm |
| 3072 |
MOV AL,b.l |
3074 |
MOV AL,[rip+b_pair.l] |
| 3073 |
CBW |
3075 |
CBW |
| 3074 |
ADD sp_.w,AX |
3076 |
ADD [rip+sp_.w],AX |
| 3075 |
AND af.l,17 |
3077 |
AND [rip+af.l],17 |
| 3076 |
end; |
3078 |
end; |
| 3077 |
Result := 16; |
3079 |
Result := 16; |
| 3078 |
end; |
3080 |
end; |
@@ -3091,29 +3093,29 @@ begin |
| 3091 |
Inc(pc.w); |
3093 |
Inc(pc.w); |
| 3092 |
|
3094 |
|
| 3093 |
asm |
3095 |
asm |
| 3094 |
//PUSH dword ptr pc.w |
3096 |
//PUSH dword ptr [rip+pc.w] |
| 3095 |
//CALL speekb |
3097 |
//CALL speekb |
| 3096 |
//LEA ESP,[ESP+4] |
3098 |
//LEA ESP,[ESP+4] |
| 3097 |
//PUSH EAX |
3099 |
//PUSH EAX |
| 3098 |
//INC word ptr pc.w |
3100 |
//INC word ptr [rip+pc.w] |
| 3099 |
//PUSH dword ptr pc.w |
3101 |
//PUSH dword ptr [rip+pc.w] |
| 3100 |
//CALL speekb |
3102 |
//CALL speekb |
| 3101 |
//LEA ESP,[ESP+4] |
3103 |
//LEA ESP,[ESP+4] |
| 3102 |
//INC word ptr pc.w |
3104 |
//INC word ptr [rip+pc.w] |
| 3103 |
MOV EAX,i2 |
3105 |
MOV EAX,i2 |
| 3104 |
|
3106 |
|
| 3105 |
SHL EAX,8 |
3107 |
SHL EAX,8 |
| 3106 |
|
3108 |
|
| 3107 |
//POP EBX |
3109 |
//POP EBX |
| 3108 |
MOV EBX,i1 |
3110 |
MOV EBX,[rip+i1] |
| 3109 |
|
3111 |
|
| 3110 |
MOV AL,BL |
3112 |
MOV AL,BL |
| 3111 |
|
3113 |
|
| 3112 |
//PUSH dword ptr af.h |
3114 |
//PUSH dword ptr [rip+af.h] |
| 3113 |
//PUSH EAX |
3115 |
//PUSH EAX |
| 3114 |
//CALL SpokeB |
3116 |
//CALL SpokeB |
| 3115 |
//LEA ESP,[ESP+8] |
3117 |
//LEA ESP,[ESP+8] |
| 3116 |
MOV i1, EAX |
3118 |
MOV [rip+i1], EAX |
| 3117 |
end; |
3119 |
end; |
| 3118 |
|
3120 |
|
| 3119 |
spokeb(i1, af.h); |
3121 |
spokeb(i1, af.h); |
@@ -3123,9 +3125,9 @@ end; |
| 3123 |
|
3125 |
|
| 3124 |
function EX_DE_HL: byte; |
3126 |
function EX_DE_HL: byte; |
| 3125 |
begin |
3127 |
begin |
| 3126 |
b.w := de.W; |
3128 |
b_pair.w := de.W; |
| 3127 |
de.W := hl.W; |
3129 |
de.W := hl.W; |
| 3128 |
hl.W := b.w; |
3130 |
hl.W := b_pair.w; |
| 3129 |
Result := 4; |
3131 |
Result := 4; |
| 3130 |
end; |
3132 |
end; |
| 3131 |
|
3133 |
|
@@ -3155,17 +3157,17 @@ function XOR_BYTE: byte; |
| 3155 |
begin |
3157 |
begin |
| 3156 |
w1 := speekb(pc.w); |
3158 |
w1 := speekb(pc.w); |
| 3157 |
asm |
3159 |
asm |
| 3158 |
//PUSH dword ptr pc.w |
3160 |
//PUSH dword ptr [rip+pc.w] |
| 3159 |
//CALL speekb |
3161 |
//CALL speekb |
| 3160 |
//LEA ESP,[ESP+4] |
3162 |
//LEA ESP,[ESP+4] |
| 3161 |
MOV AX, w1 |
3163 |
MOV AX, [rip+w1] |
| 3162 |
|
3164 |
|
| 3163 |
INC word ptr pc.w |
3165 |
INC word ptr [rip+pc.w] |
| 3164 |
|
3166 |
|
| 3165 |
XOR af.h,AL |
3167 |
XOR [rip+af.h],AL |
| 3166 |
LAHF |
3168 |
LAHF |
| 3167 |
AND EAX,$4000 |
3169 |
AND EAX,$4000 |
| 3168 |
MOV af.l,AH |
3170 |
MOV [rip+af.l],AH |
| 3169 |
end; |
3171 |
end; |
| 3170 |
|
3172 |
|
| 3171 |
Result := 8; |
3173 |
Result := 8; |
@@ -3182,22 +3184,22 @@ function RET_P: byte; |
| 3182 |
begin |
3184 |
begin |
| 3183 |
w1 := speekb(pc.w); |
3185 |
w1 := speekb(pc.w); |
| 3184 |
asm |
3186 |
asm |
| 3185 |
//PUSH dword ptr pc.w |
3187 |
//PUSH dword ptr [rip+pc.w] |
| 3186 |
//CALL speekb |
3188 |
//CALL speekb |
| 3187 |
//LEA ESP,[ESP+4] |
3189 |
//LEA ESP,[ESP+4] |
| 3188 |
MOV AX, w1 |
3190 |
MOV AX, [rip+w1] |
| 3189 |
|
3191 |
|
| 3190 |
INC word ptr pc.w |
3192 |
INC word ptr [rip+pc.w] |
| 3191 |
XOR AH,AH |
3193 |
XOR AH,AH |
| 3192 |
MOV BX,$ff00 |
3194 |
MOV BX,$ff00 |
| 3193 |
ADD AX,BX |
3195 |
ADD AX,BX |
| 3194 |
|
3196 |
|
| 3195 |
|
3197 |
|
| 3196 |
MOV i1,EAX |
3198 |
MOV [rip+i1],EAX |
| 3197 |
//PUSH EAX |
3199 |
//PUSH EAX |
| 3198 |
//CALL speekb |
3200 |
//CALL speekb |
| 3199 |
//LEA ESP,[ESP+4] |
3201 |
//LEA ESP,[ESP+4] |
| 3200 |
//MOV af.h,AL |
3202 |
//MOV [rip+af.h],AL |
| 3201 |
end; |
3203 |
end; |
| 3202 |
af.h := speekb(i1); |
3204 |
af.h := speekb(i1); |
| 3203 |
|
3205 |
|
@@ -3206,10 +3208,10 @@ end; |
| 3206 |
|
3208 |
|
| 3207 |
function POP_AF: byte; |
3209 |
function POP_AF: byte; |
| 3208 |
begin |
3210 |
begin |
| 3209 |
b.l := speekb(sp_.w); |
3211 |
b_pair.l := speekb(sp_.w); |
| 3210 |
Inc(sp_.w); |
3212 |
Inc(sp_.w); |
| 3211 |
asm |
3213 |
asm |
| 3212 |
MOV AL,b.l |
3214 |
MOV AL,[rip+b_pair.l] |
| 3213 |
AND AL,240 |
3215 |
AND AL,240 |
| 3214 |
MOV BL,AL |
3216 |
MOV BL,AL |
| 3215 |
SHR AL,1 |
3217 |
SHR AL,1 |
@@ -3217,7 +3219,7 @@ begin |
| 3217 |
SHR BL,4 |
3219 |
SHR BL,4 |
| 3218 |
AND BL,5 |
3220 |
AND BL,5 |
| 3219 |
OR AL,BL |
3221 |
OR AL,BL |
| 3220 |
MOV af.l,AL |
3222 |
MOV [rip+af.l],AL |
| 3221 |
end; |
3223 |
end; |
| 3222 |
af.h := speekb(sp_.w); |
3224 |
af.h := speekb(sp_.w); |
| 3223 |
Inc(sp_.w); |
3225 |
Inc(sp_.w); |
@@ -3227,16 +3229,16 @@ end; |
| 3227 |
function JP_P: byte; |
3229 |
function JP_P: byte; |
| 3228 |
begin |
3230 |
begin |
| 3229 |
asm |
3231 |
asm |
| 3230 |
MOV AL,bc.l |
3232 |
MOV AL,[rip+bc.l] |
| 3231 |
XOR AH,AH |
3233 |
XOR AH,AH |
| 3232 |
MOV BX,$ff00 |
3234 |
MOV BX,$ff00 |
| 3233 |
ADD AX,BX |
3235 |
ADD AX,BX |
| 3234 |
|
3236 |
|
| 3235 |
mov i1,EAX |
3237 |
mov [rip+i1],EAX |
| 3236 |
//PUSH EAX |
3238 |
//PUSH EAX |
| 3237 |
//CALL speekb |
3239 |
//CALL speekb |
| 3238 |
//LEA ESP,[ESP+4] |
3240 |
//LEA ESP,[ESP+4] |
| 3239 |
//MOV af.h,AL |
3241 |
//MOV [rip+af.h],AL |
| 3240 |
end; |
3242 |
end; |
| 3241 |
af.h := speekb(i1); |
3243 |
af.h := speekb(i1); |
| 3242 |
|
3244 |
|
@@ -3258,7 +3260,7 @@ end; |
| 3258 |
function PUSH_AF: byte; |
3260 |
function PUSH_AF: byte; |
| 3259 |
begin |
3261 |
begin |
| 3260 |
asm |
3262 |
asm |
| 3261 |
MOV AL,af.l |
3263 |
MOV AL,[rip+af.l] |
| 3262 |
AND AL,85 |
3264 |
AND AL,85 |
| 3263 |
MOV BL,AL |
3265 |
MOV BL,AL |
| 3264 |
SHL AL,1 |
3266 |
SHL AL,1 |
@@ -3266,25 +3268,25 @@ begin |
| 3266 |
SHL BL,4 |
3268 |
SHL BL,4 |
| 3267 |
AND BL,80 |
3269 |
AND BL,80 |
| 3268 |
OR AL,BL |
3270 |
OR AL,BL |
| 3269 |
MOV b.l,AL |
3271 |
MOV [rip+b_pair.l],AL |
| 3270 |
end; |
3272 |
end; |
| 3271 |
Dec(sp_.w); |
3273 |
Dec(sp_.w); |
| 3272 |
SpokeB(sp_.w, af.h); |
3274 |
SpokeB(sp_.w, af.h); |
| 3273 |
Dec(sp_.w); |
3275 |
Dec(sp_.w); |
| 3274 |
SpokeB(sp_.w, b.l); |
3276 |
SpokeB(sp_.w, b_pair.l); |
| 3275 |
Result := 16; |
3277 |
Result := 16; |
| 3276 |
end; |
3278 |
end; |
| 3277 |
|
3279 |
|
| 3278 |
function OR_BYTE: byte; |
3280 |
function OR_BYTE: byte; |
| 3279 |
begin |
3281 |
begin |
| 3280 |
b.l := speekb(pc.w); |
3282 |
b_pair.l := speekb(pc.w); |
| 3281 |
Inc(pc.w); |
3283 |
Inc(pc.w); |
| 3282 |
asm |
3284 |
asm |
| 3283 |
MOV AL,b.l |
3285 |
MOV AL,[rip+b_pair.l] |
| 3284 |
OR af.h,AL |
3286 |
OR [rip+af.h],AL |
| 3285 |
LAHF |
3287 |
LAHF |
| 3286 |
AND AH,64 |
3288 |
AND AH,64 |
| 3287 |
MOV af.l,AH |
3289 |
MOV [rip+af.l],AH |
| 3288 |
end; |
3290 |
end; |
| 3289 |
|
3291 |
|
| 3290 |
Result := 8; |
3292 |
Result := 8; |
@@ -3301,12 +3303,12 @@ function RET_M: byte; |
| 3301 |
begin |
3303 |
begin |
| 3302 |
w1 := speekb(pc.w); |
3304 |
w1 := speekb(pc.w); |
| 3303 |
asm |
3305 |
asm |
| 3304 |
//PUSH dword ptr pc.w |
3306 |
//PUSH dword ptr [rip+pc.w] |
| 3305 |
//CALL speekb |
3307 |
//CALL speekb |
| 3306 |
//LEA ESP,[ESP+4] |
3308 |
//LEA ESP,[ESP+4] |
| 3307 |
MOV AX, w1 |
3309 |
MOV AX, [rip+w1] |
| 3308 |
|
3310 |
|
| 3309 |
INC word ptr pc.w |
3311 |
INC word ptr [rip+pc.w] |
| 3310 |
|
3312 |
|
| 3311 |
|
3313 |
|
| 3312 |
CBW |
3314 |
CBW |
@@ -3314,10 +3316,10 @@ begin |
| 3314 |
|
3316 |
|
| 3315 |
|
3317 |
|
| 3316 |
|
3318 |
|
| 3317 |
MOV BX,sp_.w |
3319 |
MOV BX,[rip+sp_.w] |
| 3318 |
ADD BX,AX |
3320 |
ADD BX,AX |
| 3319 |
MOV hl.w,BX |
3321 |
MOV [rip+hl.w],BX |
| 3320 |
AND af.l,17 |
3322 |
AND [rip+af.l],17 |
| 3321 |
end; |
3323 |
end; |
| 3322 |
Result := 12; |
3324 |
Result := 12; |
| 3323 |
end; |
3325 |
end; |
@@ -3325,8 +3327,8 @@ end; |
| 3325 |
function LD_SP_HL: byte; |
3327 |
function LD_SP_HL: byte; |
| 3326 |
begin |
3328 |
begin |
| 3327 |
asm |
3329 |
asm |
| 3328 |
MOV AX,hl.w |
3330 |
MOV AX,[rip+hl.w] |
| 3329 |
MOV sp_.w,AX |
3331 |
MOV [rip+sp_.w],AX |
| 3330 |
end; |
3332 |
end; |
| 3331 |
|
3333 |
|
| 3332 |
Result := 8; |
3334 |
Result := 8; |
@@ -3382,16 +3384,16 @@ function CP_BYTE: byte; |
| 3382 |
begin |
3384 |
begin |
| 3383 |
w1 := speekb(pc.w); |
3385 |
w1 := speekb(pc.w); |
| 3384 |
asm |
3386 |
asm |
| 3385 |
//PUSH dword ptr pc.w |
3387 |
//PUSH dword ptr [rip+pc.w] |
| 3386 |
//CALL speekb |
3388 |
//CALL speekb |
| 3387 |
//LEA ESP,[ESP+4] |
3389 |
//LEA ESP,[ESP+4] |
| 3388 |
MOV AX, w1 |
3390 |
MOV AX, [rip+w1] |
| 3389 |
|
3391 |
|
| 3390 |
INC word ptr pc.w |
3392 |
INC word ptr [rip+pc.w] |
| 3391 |
CMP af.h,AL |
3393 |
CMP [rip+af.h],AL |
| 3392 |
LAHF |
3394 |
LAHF |
| 3393 |
OR EAX,$400 |
3395 |
OR EAX,$400 |
| 3394 |
MOV af.l,AH |
3396 |
MOV [rip+af.l],AH |
| 3395 |
end; |
3397 |
end; |
| 3396 |
Result := 8; |
3398 |
Result := 8; |
| 3397 |
end; |
3399 |
end; |
@@ -3409,10 +3411,10 @@ begin |
| 3409 |
af.l := 64 |
3411 |
af.l := 64 |
| 3410 |
else |
3412 |
else |
| 3411 |
asm |
3413 |
asm |
| 3412 |
ROL bc.h,1 |
3414 |
ROL [rip+bc.h],1 |
| 3413 |
LAHF |
3415 |
LAHF |
| 3414 |
AND AH,1 |
3416 |
AND AH,1 |
| 3415 |
MOV af.l,AH |
3417 |
MOV [rip+af.l],AH |
| 3416 |
end; |
3418 |
end; |
| 3417 |
Result := 8; |
3419 |
Result := 8; |
| 3418 |
end; |
3420 |
end; |
@@ -3423,10 +3425,10 @@ begin |
| 3423 |
af.l := 64 |
3425 |
af.l := 64 |
| 3424 |
else |
3426 |
else |
| 3425 |
asm |
3427 |
asm |
| 3426 |
ROL bc.l,1 |
3428 |
ROL [rip+bc.l],1 |
| 3427 |
LAHF |
3429 |
LAHF |
| 3428 |
AND AH,1 |
3430 |
AND AH,1 |
| 3429 |
MOV af.l,AH |
3431 |
MOV [rip+af.l],AH |
| 3430 |
end; |
3432 |
end; |
| 3431 |
Result := 8; |
3433 |
Result := 8; |
| 3432 |
end; |
3434 |
end; |
@@ -3437,10 +3439,10 @@ begin |
| 3437 |
af.l := 64 |
3439 |
af.l := 64 |
| 3438 |
else |
3440 |
else |
| 3439 |
asm |
3441 |
asm |
| 3440 |
ROL de.h,1 |
3442 |
ROL [rip+de.h],1 |
| 3441 |
LAHF |
3443 |
LAHF |
| 3442 |
AND AH,1 |
3444 |
AND AH,1 |
| 3443 |
MOV af.l,AH |
3445 |
MOV [rip+af.l],AH |
| 3444 |
end; |
3446 |
end; |
| 3445 |
Result := 8; |
3447 |
Result := 8; |
| 3446 |
end; |
3448 |
end; |
@@ -3451,10 +3453,10 @@ begin |
| 3451 |
af.l := 64 |
3453 |
af.l := 64 |
| 3452 |
else |
3454 |
else |
| 3453 |
asm |
3455 |
asm |
| 3454 |
ROL de.l,1 |
3456 |
ROL [rip+de.l],1 |
| 3455 |
LAHF |
3457 |
LAHF |
| 3456 |
AND AH,1 |
3458 |
AND AH,1 |
| 3457 |
MOV af.l,AH |
3459 |
MOV [rip+af.l],AH |
| 3458 |
end; |
3460 |
end; |
| 3459 |
Result := 8; |
3461 |
Result := 8; |
| 3460 |
end; |
3462 |
end; |
@@ -3465,10 +3467,10 @@ begin |
| 3465 |
af.l := 64 |
3467 |
af.l := 64 |
| 3466 |
else |
3468 |
else |
| 3467 |
asm |
3469 |
asm |
| 3468 |
ROL hl.h,1 |
3470 |
ROL [rip+hl.h],1 |
| 3469 |
LAHF |
3471 |
LAHF |
| 3470 |
AND AH,1 |
3472 |
AND AH,1 |
| 3471 |
MOV af.l,AH |
3473 |
MOV [rip+af.l],AH |
| 3472 |
end; |
3474 |
end; |
| 3473 |
Result := 8; |
3475 |
Result := 8; |
| 3474 |
end; |
3476 |
end; |
@@ -3479,27 +3481,27 @@ begin |
| 3479 |
af.l := 64 |
3481 |
af.l := 64 |
| 3480 |
else |
3482 |
else |
| 3481 |
asm |
3483 |
asm |
| 3482 |
ROL hl.l,1 |
3484 |
ROL [rip+hl.l],1 |
| 3483 |
LAHF |
3485 |
LAHF |
| 3484 |
AND AH,1 |
3486 |
AND AH,1 |
| 3485 |
MOV af.l,AH |
3487 |
MOV [rip+af.l],AH |
| 3486 |
end; |
3488 |
end; |
| 3487 |
Result := 8; |
3489 |
Result := 8; |
| 3488 |
end; |
3490 |
end; |
| 3489 |
|
3491 |
|
| 3490 |
function RLC_xHL: byte; |
3492 |
function RLC_xHL: byte; |
| 3491 |
begin |
3493 |
begin |
| 3492 |
b.l := speekb(hl.w); |
3494 |
b_pair.l := speekb(hl.w); |
| 3493 |
if b.l = 0 then |
3495 |
if b_pair.l = 0 then |
| 3494 |
af.l := 64 |
3496 |
af.l := 64 |
| 3495 |
else |
3497 |
else |
| 3496 |
asm |
3498 |
asm |
| 3497 |
ROL b.l,1 |
3499 |
ROL [rip+b_pair.l],1 |
| 3498 |
LAHF |
3500 |
LAHF |
| 3499 |
AND AH,1 |
3501 |
AND AH,1 |
| 3500 |
MOV af.l,AH |
3502 |
MOV [rip+af.l],AH |
| 3501 |
end; |
3503 |
end; |
| 3502 |
SpokeB(hl.w, b.l); |
3504 |
SpokeB(hl.w, b_pair.l); |
| 3503 |
Result := 16; |
3505 |
Result := 16; |
| 3504 |
end; |
3506 |
end; |
| 3505 |
|
3507 |
|
@@ -3509,10 +3511,10 @@ begin |
| 3509 |
af.l := 64 |
3511 |
af.l := 64 |
| 3510 |
else |
3512 |
else |
| 3511 |
asm |
3513 |
asm |
| 3512 |
ROL af.h,1 |
3514 |
ROL [rip+af.h],1 |
| 3513 |
LAHF |
3515 |
LAHF |
| 3514 |
AND AH,1 |
3516 |
AND AH,1 |
| 3515 |
MOV af.l,AH |
3517 |
MOV [rip+af.l],AH |
| 3516 |
end; |
3518 |
end; |
| 3517 |
Result := 8; |
3519 |
Result := 8; |
| 3518 |
end; |
3520 |
end; |
@@ -3523,10 +3525,10 @@ begin |
| 3523 |
af.l := 64 |
3525 |
af.l := 64 |
| 3524 |
else |
3526 |
else |
| 3525 |
asm |
3527 |
asm |
| 3526 |
ROR bc.h,1 |
3528 |
ROR [rip+bc.h],1 |
| 3527 |
LAHF |
3529 |
LAHF |
| 3528 |
AND AH,235 |
3530 |
AND AH,235 |
| 3529 |
MOV af.l,AH |
3531 |
MOV [rip+af.l],AH |
| 3530 |
end; |
3532 |
end; |
| 3531 |
Result := 8; |
3533 |
Result := 8; |
| 3532 |
end; |
3534 |
end; |
@@ -3537,10 +3539,10 @@ begin |
| 3537 |
af.l := 64 |
3539 |
af.l := 64 |
| 3538 |
else |
3540 |
else |
| 3539 |
asm |
3541 |
asm |
| 3540 |
ROR bc.l,1 |
3542 |
ROR [rip+bc.l],1 |
| 3541 |
LAHF |
3543 |
LAHF |
| 3542 |
AND AH,1 |
3544 |
AND AH,1 |
| 3543 |
MOV af.l,AH |
3545 |
MOV [rip+af.l],AH |
| 3544 |
end; |
3546 |
end; |
| 3545 |
Result := 8; |
3547 |
Result := 8; |
| 3546 |
end; |
3548 |
end; |
@@ -3551,10 +3553,10 @@ begin |
| 3551 |
af.l := 64 |
3553 |
af.l := 64 |
| 3552 |
else |
3554 |
else |
| 3553 |
asm |
3555 |
asm |
| 3554 |
ROR de.h,1 |
3556 |
ROR [rip+de.h],1 |
| 3555 |
LAHF |
3557 |
LAHF |
| 3556 |
AND AH,1 |
3558 |
AND AH,1 |
| 3557 |
MOV af.l,AH |
3559 |
MOV [rip+af.l],AH |
| 3558 |
end; |
3560 |
end; |
| 3559 |
|
3561 |
|
| 3560 |
Result := 8; |
3562 |
Result := 8; |
@@ -3566,10 +3568,10 @@ begin |
| 3566 |
af.l := 64 |
3568 |
af.l := 64 |
| 3567 |
else |
3569 |
else |
| 3568 |
asm |
3570 |
asm |
| 3569 |
ROR de.l,1 |
3571 |
ROR [rip+de.l],1 |
| 3570 |
LAHF |
3572 |
LAHF |
| 3571 |
AND AH,1 |
3573 |
AND AH,1 |
| 3572 |
MOV af.l,AH |
3574 |
MOV [rip+af.l],AH |
| 3573 |
end; |
3575 |
end; |
| 3574 |
Result := 8; |
3576 |
Result := 8; |
| 3575 |
end; |
3577 |
end; |
@@ -3580,10 +3582,10 @@ begin |
| 3580 |
af.l := 64 |
3582 |
af.l := 64 |
| 3581 |
else |
3583 |
else |
| 3582 |
asm |
3584 |
asm |
| 3583 |
ROR hl.h,1 |
3585 |
ROR [rip+hl.h],1 |
| 3584 |
LAHF |
3586 |
LAHF |
| 3585 |
AND AH,1 |
3587 |
AND AH,1 |
| 3586 |
MOV af.l,AH |
3588 |
MOV [rip+af.l],AH |
| 3587 |
end; |
3589 |
end; |
| 3588 |
Result := 8; |
3590 |
Result := 8; |
| 3589 |
end; |
3591 |
end; |
@@ -3594,10 +3596,10 @@ begin |
| 3594 |
af.l := 64 |
3596 |
af.l := 64 |
| 3595 |
else |
3597 |
else |
| 3596 |
asm |
3598 |
asm |
| 3597 |
ROR hl.l,1 |
3599 |
ROR [rip+hl.l],1 |
| 3598 |
LAHF |
3600 |
LAHF |
| 3599 |
AND AH,1 |
3601 |
AND AH,1 |
| 3600 |
MOV af.l,AH |
3602 |
MOV [rip+af.l],AH |
| 3601 |
end; |
3603 |
end; |
| 3602 |
|
3604 |
|
| 3603 |
Result := 8; |
3605 |
Result := 8; |
@@ -3605,18 +3607,18 @@ end; |
| 3605 |
|
3607 |
|
| 3606 |
function RRC_xHL: byte; |
3608 |
function RRC_xHL: byte; |
| 3607 |
begin |
3609 |
begin |
| 3608 |
b.l := speekb(hl.w); |
3610 |
b_pair.l := speekb(hl.w); |
| 3609 |
if b.l = 0 then |
3611 |
if b_pair.l = 0 then |
| 3610 |
af.l := 64 |
3612 |
af.l := 64 |
| 3611 |
else |
3613 |
else |
| 3612 |
asm |
3614 |
asm |
| 3613 |
ROR b.l,1 |
3615 |
ROR [rip+b_pair.l],1 |
| 3614 |
LAHF |
3616 |
LAHF |
| 3615 |
AND AH,1 |
3617 |
AND AH,1 |
| 3616 |
MOV af.l,AH |
3618 |
MOV [rip+af.l],AH |
| 3617 |
end; |
3619 |
end; |
| 3618 |
|
3620 |
|
| 3619 |
SpokeB(w1, b.l); |
3621 |
SpokeB(w1, b_pair.l); |
| 3620 |
|
3622 |
|
| 3621 |
Result := 16; |
3623 |
Result := 16; |
| 3622 |
end; |
3624 |
end; |
@@ -3627,10 +3629,10 @@ begin |
| 3627 |
af.l := 64 |
3629 |
af.l := 64 |
| 3628 |
else |
3630 |
else |
| 3629 |
asm |
3631 |
asm |