Commit e3fc1b5

Nick committed on
WIP porting CPU to 64 bit. Currently buggy but sort of working.
commit e3fc1b5a232b15164d516324cba6e45517b80d66 parent abe89a3
1 changed files +888−886
ModifiedCpu/z80cpu.pas +888−886
@@ -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
Diff truncated after the static-page render limit. Clone the repository to inspect the complete change.