asm.s43 29.1 KB
Newer Older
lwc-tester committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078
/* Reference implementation of WAGE16 (l_ad=0, l_m=16)
 Written by:
 Yunjie Yi <yunjie.yi@uwaterloo.ca>
 */

#include "msp430.h"                     ; #define controlled include file

        NAME    main                    ; module name

        PUBLIC  main                    ; make the main label vissible
                                        ; outside this module
        ORG     0FFFEh
        DC16    init                    ; set reset vector to 'init' label

        RSEG    CSTACK                  ; pre-declaration of segment
        RSEG    CODE                    ; place program in 'CODE' segment

init:   MOV     #SFE(CSTACK), SP        ; set up stack

main:   NOP                             ; main program
        MOV.W   #WDTPW+WDTHOLD,&WDTCTL  ; Stop watchdog timer


;;begin main func

;;Pre-save VECTOR 1:________  WG
        MOV.B #0x00, &0xE521
        MOV.B #0x12, &0xE522
        MOV.B #0x0A, &0xE523
        MOV.B #0x4B, &0xE524
        MOV.B #0x66, &0xE525
        MOV.B #0x0C, &0xE526
        MOV.B #0x48, &0xE527
        MOV.B #0x73, &0xE528
        MOV.B #0x79, &0xE529
        MOV.B #0x3E, &0xE52A
        MOV.B #0x61, &0xE52B
        MOV.B #0x51, &0xE52C
        MOV.B #0x01, &0xE52D
        MOV.B #0x15, &0xE52E
        MOV.B #0x17, &0xE52F

        MOV.B #0x0E, &0xE530
        MOV.B #0x7E, &0xE531
        MOV.B #0x33, &0xE532
        MOV.B #0x68, &0xE533
        MOV.B #0x36, &0xE534
        MOV.B #0x42, &0xE535
        MOV.B #0x35, &0xE536
        MOV.B #0x37, &0xE537
        MOV.B #0x5E, &0xE538
        MOV.B #0x53, &0xE539
        MOV.B #0x4C, &0xE53A
        MOV.B #0x3F, &0xE53B
        MOV.B #0x54, &0xE53C
        MOV.B #0x58, &0xE53D
        MOV.B #0x6E, &0xE53E
        MOV.B #0x56, &0xE53F

        MOV.B #0x2A, &0xE540
        MOV.B #0x1D, &0xE541
        MOV.B #0x25, &0xE542
        MOV.B #0x6D, &0xE543
        MOV.B #0x65, &0xE544
        MOV.B #0x5B, &0xE545
        MOV.B #0x71, &0xE546
        MOV.B #0x2F, &0xE547
        MOV.B #0x20, &0xE548
        MOV.B #0x06, &0xE549
        MOV.B #0x18, &0xE54A
        MOV.B #0x29, &0xE54B
        MOV.B #0x3A, &0xE54C
        MOV.B #0x0D, &0xE54D
        MOV.B #0x7A, &0xE54E
        MOV.B #0x6C, &0xE54F

        MOV.B #0x1B, &0xE550
        MOV.B #0x19, &0xE551
        MOV.B #0x43, &0xE552
        MOV.B #0x70, &0xE553
        MOV.B #0x41, &0xE554
        MOV.B #0x49, &0xE555
        MOV.B #0x22, &0xE556
        MOV.B #0x77, &0xE557
        MOV.B #0x60, &0xE558
        MOV.B #0x4F, &0xE559
        MOV.B #0x45, &0xE55A
        MOV.B #0x55, &0xE55B
        MOV.B #0x02, &0xE55C
        MOV.B #0x63, &0xE55D
        MOV.B #0x47, &0xE55E
        MOV.B #0x75, &0xE55F

        MOV.B #0x2D, &0xE560
        MOV.B #0x40, &0xE561
        MOV.B #0x46, &0xE562
        MOV.B #0x7D, &0xE563
        MOV.B #0x5C, &0xE564
        MOV.B #0x7C, &0xE565
        MOV.B #0x59, &0xE566
        MOV.B #0x26, &0xE567
        MOV.B #0x0B, &0xE568
        MOV.B #0x09, &0xE569
        MOV.B #0x03, &0xE56A
        MOV.B #0x57, &0xE56B
        MOV.B #0x5D, &0xE56C
        MOV.B #0x27, &0xE56D
        MOV.B #0x78, &0xE56E
        MOV.B #0x30, &0xE56F

        MOV.B #0x2E, &0xE570
        MOV.B #0x44, &0xE571
        MOV.B #0x52, &0xE572
        MOV.B #0x3B, &0xE573
        MOV.B #0x08, &0xE574
        MOV.B #0x67, &0xE575
        MOV.B #0x2C, &0xE576
        MOV.B #0x05, &0xE577
        MOV.B #0x6B, &0xE578
        MOV.B #0x2B, &0xE579
        MOV.B #0x1A, &0xE57A
        MOV.B #0x21, &0xE57B
        MOV.B #0x38, &0xE57C
        MOV.B #0x07, &0xE57D
        MOV.B #0x0F, &0xE57E
        MOV.B #0x4A, &0xE57F

        MOV.B #0x11, &0xE580
        MOV.B #0x50, &0xE581
        MOV.B #0x6A, &0xE582
        MOV.B #0x28, &0xE583
        MOV.B #0x31, &0xE584
        MOV.B #0x10, &0xE585
        MOV.B #0x4D, &0xE586
        MOV.B #0x5F, &0xE587
        MOV.B #0x72, &0xE588
        MOV.B #0x39, &0xE589
        MOV.B #0x16, &0xE58A
        MOV.B #0x5A, &0xE58B
        MOV.B #0x13, &0xE58C
        MOV.B #0x04, &0xE58D
        MOV.B #0x3C, &0xE58E
        MOV.B #0x34, &0xE58F

        MOV.B #0x1F, &0xE590
        MOV.B #0x76, &0xE591
        MOV.B #0x1E, &0xE592
        MOV.B #0x14, &0xE593
        MOV.B #0x23, &0xE594
        MOV.B #0x1C, &0xE595
        MOV.B #0x32, &0xE596
        MOV.B #0x4E, &0xE597
        MOV.B #0x7B, &0xE598
        MOV.B #0x24, &0xE599
        MOV.B #0x74, &0xE59A
        MOV.B #0x7F, &0xE59B
        MOV.B #0x3D, &0xE59C
        MOV.B #0x69, &0xE59D
        MOV.B #0x64, &0xE59E
        MOV.B #0x62, &0xE59F

        MOV.B #0x6F, &0xE5A0

;;Pre-save VECTOR 2:________ r
 
        MOV.B #0x00, &0xE621
        MOV.B #0x78, &0xE622
        MOV.B #0x01, &0xE623
        MOV.B #0x79, &0xE624
        MOV.B #0x02, &0xE625
        MOV.B #0x7A, &0xE626
        MOV.B #0x03, &0xE627
        MOV.B #0x7B, &0xE628
        MOV.B #0x04, &0xE629
        MOV.B #0x7C, &0xE62A
        MOV.B #0x05, &0xE62B
        MOV.B #0x7D, &0xE62C
        MOV.B #0x06, &0xE62D
        MOV.B #0x7E, &0xE62E
        MOV.B #0x07, &0xE62F

        MOV.B #0x7F, &0xE630
        MOV.B #0x08, &0xE631
        MOV.B #0x70, &0xE632
        MOV.B #0x09, &0xE633
        MOV.B #0x71, &0xE634
        MOV.B #0x0A, &0xE635
        MOV.B #0x72, &0xE636
        MOV.B #0x0B, &0xE637
        MOV.B #0x73, &0xE638
        MOV.B #0x0C, &0xE639
        MOV.B #0x74, &0xE63A
        MOV.B #0x0D, &0xE63B
        MOV.B #0x75, &0xE63C
        MOV.B #0x0E, &0xE63D
        MOV.B #0x76, &0xE63E
        MOV.B #0x0F, &0xE63F

        MOV.B #0x77, &0xE640
        MOV.B #0x10, &0xE641
        MOV.B #0x68, &0xE642
        MOV.B #0x11, &0xE643
        MOV.B #0x69, &0xE644
        MOV.B #0x12, &0xE645
        MOV.B #0x6A, &0xE646
        MOV.B #0x13, &0xE647
        MOV.B #0x6B, &0xE648
        MOV.B #0x14, &0xE649
        MOV.B #0x6C, &0xE64A
        MOV.B #0x15, &0xE64B
        MOV.B #0x6D, &0xE64C
        MOV.B #0x16, &0xE64D
        MOV.B #0x6E, &0xE64E
        MOV.B #0x17, &0xE64F

        MOV.B #0x6F, &0xE650
        MOV.B #0x18, &0xE651
        MOV.B #0x60, &0xE652
        MOV.B #0x19, &0xE653
        MOV.B #0x61, &0xE654
        MOV.B #0x1A, &0xE655
        MOV.B #0x62, &0xE656
        MOV.B #0x1B, &0xE657
        MOV.B #0x63, &0xE658
        MOV.B #0x1C, &0xE659
        MOV.B #0x64, &0xE65A
        MOV.B #0x1D, &0xE65B
        MOV.B #0x65, &0xE65C
        MOV.B #0x1E, &0xE65D
        MOV.B #0x66, &0xE65E
        MOV.B #0x1F, &0xE65F

        MOV.B #0x67, &0xE660
        MOV.B #0x20, &0xE661
        MOV.B #0x58, &0xE662
        MOV.B #0x21, &0xE663
        MOV.B #0x59, &0xE664
        MOV.B #0x22, &0xE665
        MOV.B #0x5A, &0xE666
        MOV.B #0x23, &0xE667
        MOV.B #0x5B, &0xE668
        MOV.B #0x24, &0xE669
        MOV.B #0x5C, &0xE66A
        MOV.B #0x25, &0xE66B
        MOV.B #0x5D, &0xE66C
        MOV.B #0x26, &0xE66D
        MOV.B #0x5E, &0xE66E
        MOV.B #0x27, &0xE66F

        MOV.B #0x5F, &0xE670
        MOV.B #0x28, &0xE671
        MOV.B #0x50, &0xE672
        MOV.B #0x29, &0xE673
        MOV.B #0x51, &0xE674
        MOV.B #0x2A, &0xE675
        MOV.B #0x52, &0xE676
        MOV.B #0x2B, &0xE677
        MOV.B #0x53, &0xE678
        MOV.B #0x2C, &0xE679
        MOV.B #0x54, &0xE67A
        MOV.B #0x2D, &0xE67B
        MOV.B #0x55, &0xE67C
        MOV.B #0x2E, &0xE67D
        MOV.B #0x56, &0xE67E
        MOV.B #0x2F, &0xE67F

        MOV.B #0x57, &0xE680
        MOV.B #0x30, &0xE681
        MOV.B #0x48, &0xE682
        MOV.B #0x31, &0xE683
        MOV.B #0x49, &0xE684
        MOV.B #0x32, &0xE685
        MOV.B #0x4A, &0xE686
        MOV.B #0x33, &0xE687
        MOV.B #0x4B, &0xE688
        MOV.B #0x34, &0xE689
        MOV.B #0x4C, &0xE68A
        MOV.B #0x35, &0xE68B
        MOV.B #0x4D, &0xE68C
        MOV.B #0x36, &0xE68D
        MOV.B #0x4E, &0xE68E
        MOV.B #0x37, &0xE68F

        MOV.B #0x4F, &0xE690
        MOV.B #0x38, &0xE691
        MOV.B #0x40, &0xE692
        MOV.B #0x39, &0xE693
        MOV.B #0x41, &0xE694
        MOV.B #0x3A, &0xE695
        MOV.B #0x42, &0xE696
        MOV.B #0x3B, &0xE697
        MOV.B #0x43, &0xE698
        MOV.B #0x3C, &0xE699
        MOV.B #0x44, &0xE69A
        MOV.B #0x3D, &0xE69B
        MOV.B #0x45, &0xE69C
        MOV.B #0x3E, &0xE69D
        MOV.B #0x46, &0xE69E
        MOV.B #0x3F, &0xE69F

        MOV.B #0x47, &0xE6A0
       

;;Pre-save VECTOR 3:________     s-box
 
        MOV.B #0x2E, &0xE721
        MOV.B #0x1C, &0xE722
        MOV.B #0x6D, &0xE723
        MOV.B #0x2B, &0xE724
        MOV.B #0x35, &0xE725
        MOV.B #0x07, &0xE726
        MOV.B #0x7F, &0xE727
        MOV.B #0x3B, &0xE728
        MOV.B #0x28, &0xE729
        MOV.B #0x08, &0xE72A
        MOV.B #0x0B, &0xE72B
        MOV.B #0x5F, &0xE72C
        MOV.B #0x31, &0xE72D
        MOV.B #0x11, &0xE72E
        MOV.B #0x1B, &0xE72F
        MOV.B #0x4D, &0xE730
        MOV.B #0x6E, &0xE731
        MOV.B #0x54, &0xE732
        MOV.B #0x0D, &0xE733
        MOV.B #0x09, &0xE734
        MOV.B #0x1F, &0xE735
        MOV.B #0x45, &0xE736
        MOV.B #0x75, &0xE737
        MOV.B #0x53, &0xE738
        MOV.B #0x6A, &0xE739
        MOV.B #0x5D, &0xE73A
        MOV.B #0x61, &0xE73B
        MOV.B #0x00, &0xE73C
        MOV.B #0x04, &0xE73D
        MOV.B #0x78, &0xE73E
        MOV.B #0x06, &0xE73F
        MOV.B #0x1E, &0xE740
        MOV.B #0x37, &0xE741
        MOV.B #0x6F, &0xE742
        MOV.B #0x2F, &0xE743
        MOV.B #0x49, &0xE744
        MOV.B #0x64, &0xE745
        MOV.B #0x34, &0xE746
        MOV.B #0x7D, &0xE747
        MOV.B #0x19, &0xE748
        MOV.B #0x39, &0xE749
        MOV.B #0x33, &0xE74A
        MOV.B #0x43, &0xE74B
        MOV.B #0x57, &0xE74C
        MOV.B #0x60, &0xE74D
        MOV.B #0x62, &0xE74E
        MOV.B #0x13, &0xE74F
        MOV.B #0x05, &0xE750
        MOV.B #0x77, &0xE751
        MOV.B #0x47, &0xE752
        MOV.B #0x4F, &0xE753
        MOV.B #0x4B, &0xE754
        MOV.B #0x1D, &0xE755
        MOV.B #0x2D, &0xE756
        MOV.B #0x24, &0xE757
        MOV.B #0x48, &0xE758
        MOV.B #0x74, &0xE759
        MOV.B #0x58, &0xE75A
        MOV.B #0x25, &0xE75B
        MOV.B #0x5E, &0xE75C
        MOV.B #0x5A, &0xE75D
        MOV.B #0x76, &0xE75E
        MOV.B #0x41, &0xE75F
        MOV.B #0x42, &0xE760
        MOV.B #0x27, &0xE761
        MOV.B #0x3E, &0xE762
        MOV.B #0x6C, &0xE763
        MOV.B #0x01, &0xE764
        MOV.B #0x2C, &0xE765
        MOV.B #0x3C, &0xE766
        MOV.B #0x4E, &0xE767
        MOV.B #0x1A, &0xE768
        MOV.B #0x21, &0xE769
        MOV.B #0x2A, &0xE76A
        MOV.B #0x0A, &0xE76B
        MOV.B #0x55, &0xE76C
        MOV.B #0x3A, &0xE76D
        MOV.B #0x38, &0xE76E
        MOV.B #0x18, &0xE76F
        MOV.B #0x7E, &0xE770
        MOV.B #0x0C, &0xE771
        MOV.B #0x63, &0xE772
        MOV.B #0x67, &0xE773
        MOV.B #0x56, &0xE774
        MOV.B #0x50, &0xE775
        MOV.B #0x7C, &0xE776
        MOV.B #0x32, &0xE777
        MOV.B #0x7A, &0xE778
        MOV.B #0x68, &0xE779
        MOV.B #0x02, &0xE77A
        MOV.B #0x6B, &0xE77B
        MOV.B #0x17, &0xE77C
        MOV.B #0x7B, &0xE77D
        MOV.B #0x59, &0xE77E
        MOV.B #0x71, &0xE77F
        MOV.B #0x0F, &0xE780
        MOV.B #0x30, &0xE781
        MOV.B #0x10, &0xE782
        MOV.B #0x22, &0xE783
        MOV.B #0x3D, &0xE784
        MOV.B #0x40, &0xE785
        MOV.B #0x69, &0xE786
        MOV.B #0x52, &0xE787
        MOV.B #0x14, &0xE788
        MOV.B #0x36, &0xE789
        MOV.B #0x44, &0xE78A
        MOV.B #0x46, &0xE78B
        MOV.B #0x03, &0xE78C
        MOV.B #0x16, &0xE78D
        MOV.B #0x65, &0xE78E
        MOV.B #0x66, &0xE78F
        MOV.B #0x72, &0xE790
        MOV.B #0x12, &0xE791
        MOV.B #0x0E, &0xE792
        MOV.B #0x29, &0xE793
        MOV.B #0x4A, &0xE794
        MOV.B #0x4C, &0xE795
        MOV.B #0x70, &0xE796
        MOV.B #0x15, &0xE797
        MOV.B #0x26, &0xE798
        MOV.B #0x79, &0xE799
        MOV.B #0x51, &0xE79A
        MOV.B #0x23, &0xE79B
        MOV.B #0x3F, &0xE79C
        MOV.B #0x73, &0xE79D
        MOV.B #0x5B, &0xE79E
        MOV.B #0x20, &0xE79F
        MOV.B #0x5C, &0xE7A0

;; RC1 __
        MOV.B #0x3F, &0xE821
        MOV.B #0x0F, &0xE822
        MOV.B #0x03, &0xE823
        MOV.B #0x40, &0xE824
        MOV.B #0x10, &0xE825
        MOV.B #0x04, &0xE826
        MOV.B #0x41, &0xE827
        MOV.B #0x30, &0xE828
        MOV.B #0x0C, &0xE829
        MOV.B #0x43, &0xE82A
        MOV.B #0x50, &0xE82B
        MOV.B #0x14, &0xE82C
        MOV.B #0x45, &0xE82D
        MOV.B #0x71, &0xE82E
        MOV.B #0x3C, &0xE82F

        MOV.B #0x4F, &0xE830
        MOV.B #0x13, &0xE831
        MOV.B #0x44, &0xE832
        MOV.B #0x51, &0xE833
        MOV.B #0x34, &0xE834
        MOV.B #0x4D, &0xE835
        MOV.B #0x73, &0xE836
        MOV.B #0x5C, &0xE837
        MOV.B #0x57, &0xE838
        MOV.B #0x15, &0xE839
        MOV.B #0x65, &0xE83A
        MOV.B #0x79, &0xE83B
        MOV.B #0x3E, &0xE83C
        MOV.B #0x2F, &0xE83D
        MOV.B #0x0B, &0xE83E
        MOV.B #0x42, &0xE83F

        MOV.B #0x70, &0xE840
        MOV.B #0x1C, &0xE841
        MOV.B #0x47, &0xE842
        MOV.B #0x11, &0xE843
        MOV.B #0x24, &0xE844
        MOV.B #0x49, &0xE845
        MOV.B #0x32, &0xE846
        MOV.B #0x6C, &0xE847
        MOV.B #0x5B, &0xE848
        MOV.B #0x56, &0xE849
        MOV.B #0x35, &0xE84A
        MOV.B #0x6D, &0xE84B
        MOV.B #0x7B, &0xE84C
        MOV.B #0x5E, &0xE84D
        MOV.B #0x37, &0xE84E
        MOV.B #0x0D, &0xE84F

        MOV.B #0x63, &0xE850
        MOV.B #0x58, &0xE851
        MOV.B #0x16, &0xE852
        MOV.B #0x25, &0xE853
        MOV.B #0x69, &0xE854
        MOV.B #0x3A, &0xE855
        MOV.B #0x6E, &0xE856
        MOV.B #0x3B, &0xE857
        MOV.B #0x4E, &0xE858
        MOV.B #0x33, &0xE859
        MOV.B #0x4C, &0xE85A
        MOV.B #0x53, &0xE85B
        MOV.B #0x54, &0xE85C
        MOV.B #0x55, &0xE85D
        MOV.B #0x75, &0xE85E
        MOV.B #0x7D, &0xE85F

        MOV.B #0x7F, &0xE860
        MOV.B #0x1F, &0xE861
        MOV.B #0x07, &0xE862
        MOV.B #0x01, &0xE863
        MOV.B #0x20, &0xE864
        MOV.B #0x08, &0xE865
        MOV.B #0x02, &0xE866
        MOV.B #0x60, &0xE867
        MOV.B #0x18, &0xE868
        MOV.B #0x06, &0xE869
        MOV.B #0x21, &0xE86A
        MOV.B #0x28, &0xE86B
        MOV.B #0x0A, &0xE86C
        MOV.B #0x62, &0xE86D
        MOV.B #0x78, &0xE86E
        MOV.B #0x1E, &0xE86F

        MOV.B #0x27, &0xE870
        MOV.B #0x09, &0xE871
        MOV.B #0x22, &0xE872
        MOV.B #0x68, &0xE873
        MOV.B #0x1A, &0xE874
        MOV.B #0x66, &0xE875
        MOV.B #0x39, &0xE876
        MOV.B #0x2E, &0xE877
        MOV.B #0x2B, &0xE878
        MOV.B #0x4A, &0xE879
        MOV.B #0x72, &0xE87A
        MOV.B #0x7C, &0xE87B
        MOV.B #0x5F, &0xE87C
        MOV.B #0x17, &0xE87D
        MOV.B #0x05, &0xE87E
        MOV.B #0x61, &0xE87F

        MOV.B #0x38, &0xE880
        MOV.B #0x0E, &0xE881
        MOV.B #0x23, &0xE882
        MOV.B #0x48, &0xE883
        MOV.B #0x12, &0xE884
        MOV.B #0x64, &0xE885
        MOV.B #0x59, &0xE886
        MOV.B #0x36, &0xE887
        MOV.B #0x2D, &0xE888
        MOV.B #0x6B, &0xE889
        MOV.B #0x5A, &0xE88A
        MOV.B #0x76, &0xE88B
        MOV.B #0x3D, &0xE88C
        MOV.B #0x6F, &0xE88D
        MOV.B #0x1B, &0xE88E
        MOV.B #0x46, &0xE88F

;; RC0 __
        MOV.B #0x7F, &0xE921
        MOV.B #0x1F, &0xE922
        MOV.B #0x07, &0xE923
        MOV.B #0x01, &0xE924
        MOV.B #0x20, &0xE925
        MOV.B #0x08, &0xE926
        MOV.B #0x02, &0xE927
        MOV.B #0x60, &0xE928
        MOV.B #0x18, &0xE929
        MOV.B #0x06, &0xE92A
        MOV.B #0x21, &0xE92B
        MOV.B #0x28, &0xE92C
        MOV.B #0x0A, &0xE92D
        MOV.B #0x62, &0xE92E
        MOV.B #0x78, &0xE92F

        MOV.B #0x1E, &0xE930
        MOV.B #0x27, &0xE931
        MOV.B #0x09, &0xE932
        MOV.B #0x22, &0xE933
        MOV.B #0x68, &0xE934
        MOV.B #0x1A, &0xE935
        MOV.B #0x66, &0xE936
        MOV.B #0x39, &0xE937
        MOV.B #0x2E, &0xE938
        MOV.B #0x2B, &0xE939
        MOV.B #0x4A, &0xE93A
        MOV.B #0x72, &0xE93B
        MOV.B #0x7C, &0xE93C
        MOV.B #0x5F, &0xE93D
        MOV.B #0x17, &0xE93E
        MOV.B #0x05, &0xE93F

        MOV.B #0x61, &0xE940
        MOV.B #0x38, &0xE941
        MOV.B #0x0E, &0xE942
        MOV.B #0x23, &0xE943
        MOV.B #0x48, &0xE944
        MOV.B #0x12, &0xE945
        MOV.B #0x64, &0xE946
        MOV.B #0x59, &0xE947
        MOV.B #0x36, &0xE948
        MOV.B #0x2D, &0xE949
        MOV.B #0x6B, &0xE94A
        MOV.B #0x5A, &0xE94B
        MOV.B #0x76, &0xE94C
        MOV.B #0x3D, &0xE94D
        MOV.B #0x6F, &0xE94E
        MOV.B #0x1B, &0xE94F

        MOV.B #0x46, &0xE950
        MOV.B #0x31, &0xE951
        MOV.B #0x2C, &0xE952
        MOV.B #0x4B, &0xE953
        MOV.B #0x52, &0xE954
        MOV.B #0x74, &0xE955
        MOV.B #0x5D, &0xE956
        MOV.B #0x77, &0xE957
        MOV.B #0x1D, &0xE958
        MOV.B #0x67, &0xE959
        MOV.B #0x19, &0xE95A
        MOV.B #0x26, &0xE95B
        MOV.B #0x29, &0xE95C
        MOV.B #0x2A, &0xE95D
        MOV.B #0x6A, &0xE95E
        MOV.B #0x7A, &0xE95F

        MOV.B #0x7E, &0xE960
        MOV.B #0x3F, &0xE961
        MOV.B #0x0F, &0xE962
        MOV.B #0x03, &0xE963
        MOV.B #0x40, &0xE964
        MOV.B #0x10, &0xE965
        MOV.B #0x04, &0xE966
        MOV.B #0x41, &0xE967
        MOV.B #0x30, &0xE968
        MOV.B #0x0C, &0xE969
        MOV.B #0x43, &0xE96A
        MOV.B #0x50, &0xE96B
        MOV.B #0x14, &0xE96C
        MOV.B #0x45, &0xE96D
        MOV.B #0x71, &0xE96E
        MOV.B #0x3C, &0xE96F

        MOV.B #0x4F, &0xE970
        MOV.B #0x13, &0xE971
        MOV.B #0x44, &0xE972
        MOV.B #0x51, &0xE973
        MOV.B #0x34, &0xE974
        MOV.B #0x4D, &0xE975
        MOV.B #0x73, &0xE976
        MOV.B #0x5C, &0xE977
        MOV.B #0x57, &0xE978
        MOV.B #0x15, &0xE979
        MOV.B #0x65, &0xE97A
        MOV.B #0x79, &0xE97B
        MOV.B #0x3E, &0xE97C
        MOV.B #0x2F, &0xE97D
        MOV.B #0x0B, &0xE97E
        MOV.B #0x42, &0xE97F

        MOV.B #0x70, &0xE980
        MOV.B #0x1C, &0xE981
        MOV.B #0x47, &0xE982
        MOV.B #0x11, &0xE983
        MOV.B #0x24, &0xE984
        MOV.B #0x49, &0xE985
        MOV.B #0x32, &0xE986
        MOV.B #0x6C, &0xE987
        MOV.B #0x5B, &0xE988
        MOV.B #0x56, &0xE989
        MOV.B #0x35, &0xE98A
        MOV.B #0x6D, &0xE98B
        MOV.B #0x7B, &0xE98C
        MOV.B #0x5E, &0xE98D
        MOV.B #0x37, &0xE98E
        MOV.B #0x0D, &0xE98F


;;data:__

        MOV.B #0x00, &0xEA24  ;; S36 --------D9
        MOV.B #0x00, &0xEA23  ;; S35 --------D8
        MOV.B #0x00, &0xEA22  ;; S34 --------D7
        MOV.B #0x00, &0xEA21  ;; S33
        MOV.B #0x00, &0xEA20  ;; S32
        MOV.B #0x00, &0xEA1F  ;; S31
        MOV.B #0x00, &0xEA1E  ;; S30
        MOV.B #0x00, &0xEA1D  ;; S29
        MOV.B #0x00, &0xEA1C  ;; S28 --------D6
        MOV.B #0x00, &0xEA1B  ;; S27 --------D5
        MOV.B #0x00, &0xEA1A  ;; S26
        MOV.B #0x00, &0xEA19  ;; S25
        MOV.B #0x00, &0xEA18  ;; S24
        MOV.B #0x00, &0xEA17  ;; S23
        MOV.B #0x00, &0xEA16  ;; S22
        MOV.B #0x00, &0xEA15  ;; S21
        
        MOV.B #0x00, &0xEA14  ;; S20
        MOV.B #0x00, &0xEA13  ;; S19
        MOV.B #0x00, &0xEA12  ;; S18 --------D4
        MOV.B #0x00, &0xEA11  ;; S17
        MOV.B #0x00, &0xEA10  ;; S16 --------D3
        MOV.B #0x00, &0xEA0F  ;; S15 --------D2
        MOV.B #0x00, &0xEA0E  ;; S14
        MOV.B #0x00, &0xEA0D  ;; S13
        MOV.B #0x00, &0xEA0C  ;; S12
        MOV.B #0x00, &0xEA0B  ;; S11
        MOV.B #0x00, &0xEA0A  ;; S10
        MOV.B #0x00, &0xEA09  ;; S9 --------D1
        MOV.B #0x00, &0xEA08  ;; S8 --------D0
        MOV.B #0x00, &0xEA07  ;; S7
        MOV.B #0x00, &0xEA06  ;; S6
        MOV.B #0x00, &0xEA05  ;; S6
        
        MOV.B #0x00, &0xEA04  ;; S4
        MOV.B #0x00, &0xEA03  ;; S3
        MOV.B #0x00, &0xEA02  ;; S2
        MOV.B #0x00, &0xEA01  ;; S1
        MOV.B #0x00, &0xEA00  ;; S0


        ;;;;
        CALL #FFUNAE

;;End main func
JMP $                           ; jump to current location '$'
                                        ; (endless loop)

;;this is the mode 
FFUNAE:
        CALL #FFUN3    ;;1 initia

        CALL #FFUNLOAD
        CALL #FFUNKEY1
        CALL #FFUNSAVE
        
        CALL #FFUN3   ;2  initia

        CALL #FFUNLOAD
        CALL #FFUNKEY2
        CALL #FFUNSAVE
        
        CALL #FFUN3   ;3  initia



        MOV.W #0x0000, R15
        
WHIL8:  CMP.W #0x0010, R15    ;;xor with Ms
        JGE NEXT8

        CALL #FFUNLOAD
        CALL #FFUNM
        CALL #FFUNSAVE
        
        CALL #FFUN3  ;RUN Enc 16 times

        INC R15
        JMP WHIL8
NEXT8:


        CALL #FFUNLOAD
        CALL #FFUNKEY1
        CALL #FFUNSAVE
        CALL #FFUN3  ;8  Final
        
        CALL #FFUNLOAD
        CALL #FFUNKEY2
        CALL #FFUNSAVE
        
        CALL #FFUN3 ;10 Final
        
        
RET


;;load data
FFUNLOAD:

        MOV.B &0xEA24, R14  ;; S36 --------D9
        MOV.B &0xEA23, R13  ;; S35 --------D8
        MOV.B &0xEA22, R12  ;; S34 --------D7        
        MOV.B &0xEA1C, R11  ;; S28 --------D6
        MOV.B &0xEA1B, R10  ;; S27 --------D5
        MOV.B &0xEA12, R9  ;; S18 --------D4
        MOV.B &0xEA10, R8  ;; S16 --------D3
        MOV.B &0xEA0F, R7  ;; S15 --------D2
        MOV.B &0xEA09, R6  ;; S9 --------D1
        MOV.B &0xEA08, R5  ;; S8 --------D0
        MOV.B &0xEA00, R4  ;; S0 for domain seperator

RET

;;this is the key absorption part in the mode
FFUNKEY1: ;;(R12 - R4)

        XOR #0x00, R14 ;;XOR with key0
        XOR #0x00, R13
        XOR #0x00, R12
        XOR #0x00, R11
        XOR #0x00, R10
        XOR #0x00, R9
        XOR #0x00, R8
        XOR #0x00, R7
        XOR #0x00, R6
        XOR #0x00, R5

      
RET

;;this is the key absorption part in the mode
FFUNKEY2: ;;(R12 - R4)
        XOR #0x00, R14 ;;XOR with key1
        XOR #0x00, R13
        XOR #0x00, R12
        XOR #0x00, R11
        XOR #0x00, R10
        XOR #0x00, R9
        XOR #0x00, R8
        XOR #0x00, R7
        XOR #0x00, R6
        XOR #0x00, R5
RET


;;this is the message absorption part in the mode 
FFUNM: ;;(R12 - R4)
        XOR #0x00, R14 ;;XOR with AD0
        XOR #0x00, R13
        XOR #0x00, R12
        XOR #0x00, R11
        XOR #0x00, R10
        XOR #0x00, R9
        XOR #0x00, R8
        XOR #0x00, R7
        XOR #0x00, R6
        XOR #0x00, R5
        XOR #0x02, R4
RET

;;save data
FFUNSAVE:
        MOV.B R14, &0xEA24  ;; S36 --------D9
        MOV.B R13, &0xEA23  ;; S35 --------D8
        MOV.B R12, &0xEA22  ;; S34 --------D7        
        MOV.B R11, &0xEA1C  ;; S28 --------D6
        MOV.B R10, &0xEA1B  ;; S27 --------D5
        MOV.B R9, &0xEA12  ;; S18 --------D4
        MOV.B R8, &0xEA10  ;; S16 --------D3
        MOV.B R7, &0xEA0F  ;; S15 --------D2
        MOV.B R6, &0xEA09  ;; S9 --------D1
        MOV.B R5, &0xEA08  ;; S8 --------D0
        MOV.B R4, &0xEA00  ;; S0 for domain seperator
RET




;;this is permutation box
FFUN3:   ;;LOOP the sliscp-light
        PUSH R9
        PUSH R10
        PUSH R11
        PUSH R12
        PUSH R13
        PUSH R14
        PUSH R15
        
        
        MOV.W #0x0000, R15
WHIL1:  CMP.W #0x006F, R15
        JGE NEXTA
        CALL #FFUN
        JMP WHIL1
NEXTA:

        MOV.B &0xEA93, &0xEA24
        MOV.B &0xEA92, &0xEA23
        MOV.B &0xEA91, &0xEA22
        MOV.B &0xEA90, &0xEA21
        MOV.B &0xEA8F, &0xEA20
        MOV.B &0xEA8E, &0xEA1F
        MOV.B &0xEA8D, &0xEA1E
        MOV.B &0xEA8C, &0xEA1D
        MOV.B &0xEA8B, &0xEA1C
        MOV.B &0xEA8A, &0xEA1B
        MOV.B &0xEA89, &0xEA1A
        MOV.B &0xEA88, &0xEA19
        MOV.B &0xEA87, &0xEA18
        MOV.B &0xEA86, &0xEA17
        MOV.B &0xEA85, &0xEA16
        MOV.B &0xEA84, &0xEA15
        
        MOV.B &0xEA83, &0xEA14
        MOV.B &0xEA82, &0xEA13
        MOV.B &0xEA81, &0xEA12
        MOV.B &0xEA80, &0xEA11
        MOV.B &0xEA7F, &0xEA10
        MOV.B &0xEA7E, &0xEA0F
        MOV.B &0xEA7D, &0xEA0E
        MOV.B &0xEA7C, &0xEA0D
        MOV.B &0xEA7B, &0xEA0C
        MOV.B &0xEA7A, &0xEA0B
        MOV.B &0xEA79, &0xEA0A
        MOV.B &0xEA78, &0xEA09
        MOV.B &0xEA77, &0xEA08
        MOV.B &0xEA76, &0xEA07
        MOV.B &0xEA75, &0xEA06
        MOV.B &0xEA74, &0xEA05
        
        MOV.B &0xEA73, &0xEA04
        MOV.B &0xEA72, &0xEA03
        MOV.B &0xEA71, &0xEA02
        MOV.B &0xEA70, &0xEA01
        MOV.B &0xEA6F, &0xEA00

        POP R15
        POP R14
        POP R13
        POP R12
        POP R11
        POP R10
        POP R9
RET


;;this is WG permutation round
FFUN: ;;DATA: A24,  TABLE: 521 (WG), 621(r), 721(s-box)  821(RC1), 921(RC0) and R15
;; Load required* data to registers from memory
        MOV.W #0xEA24, R14 ;Save the very initial location of data
        ADD.W R15, R14  ;add reference R15, save the new loc to R14
        MOV.B @R14, R13   ;;S36
                            ;;fb-out will be saved in R12, then save to the loc
        SUB.W #5, R14   ;;S31  
        MOV.B @R14, R12
        
        SUB.W #1, R14 ;;S30
        MOV.B @R14, R11 
        XOR.W R11, R12
        
        SUB.W #4, R14  ;;S26
        MOV.B @R14, R11
        XOR.W R11, R12
        
        SUB.W #2, R14  ;;S24
        MOV.B @R14, R11
        XOR.W R11, R12
        
        SUB.W #5, R14  ;;S19
        MOV.B @R14, R11
        XOR.W R11, R12
        
        SUB.W #6, R14 ;;S13
        MOV.B @R14, R11
        XOR.W R11, R12
        
        SUB.W #1, R14 ;;S12
        MOV.B @R14, R11
        XOR.W R11, R12
        
        SUB.W #4, R14 ;;S8
        MOV.B @R14, R11
        XOR.W R11, R12
        
        SUB.W #2, R14 ;;S6
        MOV.B @R14, R11
        XOR.W R11, R12

        SUB.W #6, R14 ;;S0
        MOV.B @R14, R11
        
        ;;Begin get data from 
        MOV.W #0xE521,R10  ;;WG operation
        ADD.W R13, R10
        MOV.B @R10, R13  ;;overwrite R13, because no need update s36
        
        MOV.W #0xE621,R10
        ADD.W R11, R10
        MOV.B @R10, R11  ;;overwrite R11, because no need update s0

        XOR.W R13, R12
        XOR.W R11, R12
        
        MOV.W #0xE821,R10  ;get RC1
        ADD.W R15, R10
        MOV.B @R10, R11  ;;overwrite R11, because no need update s0
        XOR.W R11, R12

;;So far, fb-out has been saved in R12 ,DO NOT TOUCH R12 as temp reg



        MOV.W #0xEA24, R14 ;Save the very initial location of data, prepare for updating with s-box
        ADD.W R15, R14  ;add reference R15, save the new loc to R14

;;Begin updateing terms, (30, 24, 19, 11, 5), with s-box of (34, 27, 18, 15, 8)
        SUB.W #2, R14  ;; 1st update begin s30
        MOV.B @R14, R9
        SUB.W #4, R14
        MOV.B @R14, R10
        
        MOV.W #0xE721,R13 ;;;s-box operation 
        ADD.W R9, R13  ;R9 is the input
        MOV.B @R13, R9   ;R9 is also the output

        XOR R9, R10
        MOV.B R10, 0(R14) ;; 1st update finished



        SUB.W #3, R14  ;2nd update begin s24
        MOV.B @R14, R9
        SUB.W #3, R14
        MOV.B @R14, R10       
        
        MOV.W #0xE721,R13  ;;;s-box operation 
        ADD.W R9, R13  ;R9 is the input
        MOV.B @R13, R9   ;R9 is also the output

        XOR R9, R10
        MOV.B R10, 0(R14) ;; 2nd update finished



        SUB.W #6, R14  ;3rd update begin
        MOV.B @R14, R9
        ADD.W #1, R14
        MOV.B @R14, R10
        
        MOV.W #0xE521,R13  ;;WG operation 
        ADD.W R9, R13  ;R9 is the input
        MOV.B @R13, R9   ;R9 is also the output

        MOV.W #0xE921,R13  ;get RC0
        ADD.W R15, R13
        MOV.B @R13, R11
        XOR.W R11, R9   ;;xor RC1 with wap(s18), then save to R9

        XOR R9, R10
        MOV.B R10, 0(R14) ;; 3rd update finished



        SUB.W #4, R14  ;4th update begin
        MOV.B @R14, R9  ;s15
        SUB.W #4, R14
        MOV.B @R14, R10   ;s11
        
        MOV.W #0xE721,R13 ;;;s-box operation 
        ADD.W R9, R13  ;R9 is the input
        MOV.B @R13, R9   ;R9 is also the output

        XOR R9, R10
        MOV.B R10, 0(R14) ;; 4th update finished


        SUB.W #3, R14  ;5th update begin
        MOV.B @R14, R9
        SUB.W #3, R14
        MOV.B @R14, R10
        
        MOV.W #0xE721,R13
        ADD.W R9, R13  ;R9 is the input
        MOV.B @R13, R9   ;R9 is also the output

        XOR R9, R10
        MOV.B R10, 0(R14) ;; 5th update finished
     
        ADD.W #1, R15
        
        MOV.W #0xEA24, R14 ;Save the very initial location of data
        ADD.W R15, R14  ;add reference R15, save the new loc to R14
        MOV.B R12, 0(R14)
        RET


;;;;;;;;;;;;;;;;;;;;;;;;;;
 
;;End sub function
        END