From sommerfeld@orchard.medford.ma.us Sun Jan  3 09:40:31 1993
Delivery-Date: Sat, 02 Jan 93 10:01:32 -0800
Date: Fri, 1 Jan 93 12:15:31 -0500
From: Bill Sommerfeld <sommerfeld@orchard.medford.ma.us>
To: hughes@soda.berkeley.edu
Subject: DES code for HP48SX

%%HP: T(3)A(R)F(.);
@
@ Copyright 1992 by William E. Sommerfeld
@
@ Permission to use, copy, modify, and distribute this software 
@ for any purpose and without fee is hereby granted, provided 
@ that the above copyright notice appear in all copies and that both that 
@ copyright notice and this permission notice appear in supporting 
@ documentation. The author makes no representations about the 
@ suitability of this software for any purpose.  It is provided "as is"
@ without express or implied warranty.
@
@ Export of this software from the United States of America may require
@ an export license.  
@
@ This is a partial implementation of the Data Encryption Standard
@ for the HP 48S and 48SX calculators, in user RPL.
@ It is derived in a way from the DES-in-C core written by Dennis Ferguson,
@ but (as should be obvious) bears little resemblance to the C code..
@ The only things included here are key schedule generation and ECB mode
@ encryption ; decryption, CBC mode, etc, are not included, in the (perhaps
@ vain) hope of avoiding export restrictions.
@
@ This code is very slow.  Both DESECBE and DESKEYSCHED take around
@ 12 seconds to execute on a 160Kbyte 48SX; this is just 
@ barely fast enough for the original application (a challenge-response 
@ based authentication device which did a single encrypt of a random 64-bit 
@ block under an effectively constant key).
@ 
@ The input to DESKEYSCHED is a 64-bit binary integer, probably best
@ expressed in hex; the output is an array of decimal numbers.
@ DESECBE takes two inputs: first, the plaintext, a 64-bit binary
@ integer, and second, the key schedule generated by DESKEYSCHED; it
@ produces a 64-bit binary integer on output.
@
@ There is a lot of room for improvement; coding in system RPL, and 
@ possibly coding the main routine of the inner encrypt loop in machine code, 
@ should result in a significant performance improvement.  I haven't had 
@ time for this yet, though.
@
@		Bill Sommerfeld <sommerfeld@orchard.medford.ma.us>
@			December, 1992
@
DIR
@ DES key schedule expansion
  DESKEYSCHED
    \<<
	DESPERMCHOICE #7EFCh \-> c d tbsh 
        \<<
           1 16 START
    	     28 STWS
             IF tbsh #1h AND B\->R
             THEN
		 c RL RL 'c' STO 
  		 d RL RL 'd' STO
             ELSE
		 c RL 'c' STO 
  		 d RL 'd' STO
             END
	     64 STWS
             tbsh SR 'tbsh' STO
             PC2C c SRB SRB SR SR SR SR SR SR #3Fh AND                               1 + B\->R GET R\->B
             PC2C c SRB SR SR SR SR SR SR SR #0Fh AND c SRB SRB #30h AND OR #101o + B\->R GET R\->B OR
             PC2C c  SR SR SR SR #03h AND c  SRB SR #3Ch AND OR #201o + B\->R GET R\->B OR
             PC2C c         #07h AND c  SR SR SR SR #38h AND OR #301o + B\->R GET R\->B OR

             PC2D d SRB SRB SR SR SR SR SR SR #3Fh AND                               1 + B\->R GET R\->B 
             PC2D d SRB SR SR SR SR SR SR #0Fh AND d SRB SR SR SR SR SR SR SR #30h AND OR #101o + B\->R GET R\->B OR
             PC2D d  SR SR SR SR SR SR SR #3Fh AND                       #201o + B\->R GET R\->B OR
             PC2D d         #03h AND d  SR #3Ch AND OR #301o + B\->R GET R\->B OR
	     \-> ltmp rtmp 
	     \<<
	       ltmp #00FFFF00h AND rtmp #FF0000FFh AND OR B\->R
	       ltmp #FF0000FFh AND rtmp #00FFFF00h AND OR B\->R
             \>>
           NEXT
           32 
           \->ARRY
        \>>
    \>>
@ DES ECB encrypt.	B KS -> E (B, KS)
  DESECBE
    \<< \-> ks
       \<< 64 STWS
	 SPLIT DIP 
@ key sched index
         ks 1
         0 7 START
@           "SPER 1" HALT DROP
	   DESSPER
@	   "SPER 2" HALT DROP
           DESSPER
         NEXT
	 DROP DROP
@         "PREFP" HALT DROP	   
         DFP JOIN         
       \>>
    \>>
@ convert 1-8 char string into a 64-bit hex number.
  S\->DBLOCK
    \<< \-> s
      \<< # 0h 1 8
        FOR i RLB s
          i DUP SUB NUM R\->B +
        NEXT
      \>>
    \>>
@ DES initial permutation. L R -> IP(L R)
  DIP
    \<< \-> left right
      \<< left right DIPRIGHTBITS left right DIPLEFTBITS \-> temp right
         \<<
            DIA right SRB SRB SRB # FFh AND 1 + B\->R GET R\->B
            DIA right SRB SRB # FFh AND 1 + B\->R GET R\->B SL OR
            DIA right  SRB # FFh AND 1 + B\->R GET R\->B SL SL OR 
            DIA right         # FFh AND 1 + B\->R GET R\->B SL SL SL OR
            DIA temp SRB SRB SRB # FFh AND 1 + B\->R GET R\->B
            DIA temp SRB SRB # FFh AND 1 + B\->R GET R\->B SL OR
            DIA temp  SRB # FFh AND 1 + B\->R GET R\->B SL SL OR 
            DIA temp         # FFh AND 1 + B\->R GET R\->B SL SL SL OR
         \>>
      \>>
    \>>
  DFP
    \<< \-> left right
      \<< right left DFPRIGHTBITS right left DFPLEFTBITS \-> temp right
         \<<
            DFA right SRB SRB SRB # FFh AND 1 + B\->R GET R\->B SL SL SL SL SL SL
            DFA right SRB SRB # FFh AND 1 + B\->R GET R\->B SL SL SL SL OR
            DFA right  SRB # FFh AND 1 + B\->R GET R\->B SL SL OR 
            DFA right         # FFh AND 1 + B\->R GET R\->B OR
            DFA temp SRB SRB SRB # FFh AND 1 + B\->R GET R\->B SL SL SL SL SL SL
            DFA temp SRB SRB # FFh AND 1 + B\->R GET R\->B SL SL SL SL OR
            DFA temp  SRB # FFh AND 1 + B\->R GET R\->B SL SL OR 
            DFA temp         # FFh AND 1 + B\->R GET R\->B OR
         \>>
      \>>
    \>>
@ tables.
  DFA 
    [ 0 33554432 131072 33685504 512 33554944 131584 33686016 2
    33554434 131074 33685506 514 33554946 131586 33686018 16777216
    50331648 16908288 50462720 16777728 50332160 16908800 50463232
    16777218 50331650 16908290 50462722 16777730 50332162 16908802
    50463234 65536 33619968 196608 33751040 66048 33620480 197120
    33751552 65538 33619970 196610 33751042 66050 33620482 197122
    33751554 16842752 50397184 16973824 50528256 16843264 50397696
    16974336 50528768 16842754 50397186 16973826 50528258 16843266
    50397698 16974338 50528770 256 33554688 131328 33685760 768
    33555200 131840 33686272 258 33554690 131330 33685762 770 33555202
    131842 33686274 16777472 50331904 16908544 50462976 16777984
    50332416 16909056 50463488 16777474 50331906 16908546 50462978
    16777986 50332418 16909058 50463490 65792 33620224 196864 33751296
    66304 33620736 197376 33751808 65794 33620226 196866 33751298
    66306 33620738 197378 33751810 16843008 50397440 16974080 50528512
    16843520 50397952 16974592 50529024 16843010 50397442 16974082
    50528514 16843522 50397954 16974594 50529026 1 33554433 131073
    33685505 513 33554945 131585 33686017 3 33554435 131075 33685507
    515 33554947 131587 33686019 16777217 50331649 16908289 50462721
    16777729 50332161 16908801 50463233 16777219 50331651 16908291
    50462723 16777731 50332163 16908803 50463235 65537 33619969 196609
    33751041 66049 33620481 197121 33751553 65539 33619971 196611
    33751043 66051 33620483 197123 33751555 16842753 50397185 16973825
    50528257 16843265 50397697 16974337 50528769 16842755 50397187
    16973827 50528259 16843267 50397699 16974339 50528771 257 33554689
    131329 33685761 769 33555201 131841 33686273 259 33554691 131331
    33685763 771 33555203 131843 33686275 16777473 50331905 16908545
    50462977 16777985 50332417 16909057 50463489 16777475 50331907
    16908547 50462979 16777987 50332419 16909059 50463491 65793
    33620225 196865 33751297 66305 33620737 197377 33751809 65795
    33620227 196867 33751299 66307 33620739 197379 33751811 16843009
    50397441 16974081 50528513 16843521 50397953 16974593 50529025
    16843011 50397443 16974083 50528515 16843523 50397955 16974595
    50529027 ]
  DIA 
    [ 0 16 1 17 4096 4112 4097 4113 256 272 257 273 4352 4368 4353
    4369 1048576 1048592 1048577 1048593 1052672 1052688 1052673
    1052689 1048832 1048848 1048833 1048849 1052928 1052944 1052929
    1052945 65536 65552 65537 65553 69632 69648 69633 69649 65792
    65808 65793 65809 69888 69904 69889 69905 1114112 1114128 1114113
    1114129 1118208 1118224 1118209 1118225 1114368 1114384 1114369
    1114385 1118464 1118480 1118465 1118481 268435456 268435472
    268435457 268435473 268439552 268439568 268439553 268439569
    268435712 268435728 268435713 268435729 268439808 268439824
    268439809 268439825 269484032 269484048 269484033 269484049
    269488128 269488144 269488129 269488145 269484288 269484304
    269484289 269484305 269488384 269488400 269488385 269488401
    268500992 268501008 268500993 268501009 268505088 268505104
    268505089 268505105 268501248 268501264 268501249 268501265
    268505344 268505360 268505345 268505361 269549568 269549584
    269549569 269549585 269553664 269553680 269553665 269553681
    269549824 269549840 269549825 269549841 269553920 269553936
    269553921 269553937 16777216 16777232 16777217 16777233 16781312
    16781328 16781313 16781329 16777472 16777488 16777473 16777489
    16781568 16781584 16781569 16781585 17825792 17825808 17825793
    17825809 17829888 17829904 17829889 17829905 17826048 17826064
    17826049 17826065 17830144 17830160 17830145 17830161 16842752
    16842768 16842753 16842769 16846848 16846864 16846849 16846865
    16843008 16843024 16843009 16843025 16847104 16847120 16847105
    16847121 17891328 17891344 17891329 17891345 17895424 17895440
    17895425 17895441 17891584 17891600 17891585 17891601 17895680
    17895696 17895681 17895697 285212672 285212688 285212673 285212689
    285216768 285216784 285216769 285216785 285212928 285212944
    285212929 285212945 285217024 285217040 285217025 285217041
    286261248 286261264 286261249 286261265 286265344 286265360
    286265345 286265361 286261504 286261520 286261505 286261521
    286265600 286265616 286265601 286265617 285278208 285278224
    285278209 285278225 285282304 285282320 285282305 285282321
    285278464 285278480 285278465 285278481 285282560 285282576
    285282561 285282577 286326784 286326800 286326785 286326801
    286330880 286330896 286330881 286330897 286327040 286327056
    286327041 286327057 286331136 286331152 286331137 286331153 ]
  PC1CL
    [ 0 16 4096 4112 1048576 1048592 1052672 1052688 ]
  PC1DL
    [ 0 1048576 4096 1052672 16 1048592 4112 1052688 1 1048577 4097 1052673 17 1048593 4113 1052689 ]
  PC1CR
    [ 0 1 256 257 65536 65537 65792 65793 16777216 16777217 16777472 16777473 16842752 16842753 16843008 16843009 ]
  PC1DR
    [ 0 16777216 65536 16842752 256 16777472 65792 16843008 ]
  PC2C
    [
 0 4 65536 65540 1024 1028 66560 66564
 32 36 65568 65572 1056 1060 66592 66596
 16777216 16777220 16842752 16842756 16778240 16778244 16843776 16843780
 16777248 16777252 16842784 16842788 16778272 16778276 16843808 16843812
 131072 131076 196608 196612 132096 132100 197632 197636
 131104 131108 196640 196644 132128 132132 197664 197668
 16908288 16908292 16973824 16973828 16909312 16909316 16974848 16974852
 16908320 16908324 16973856 16973860 16909344 16909348 16974880 16974884
 0 33554432 2048 33556480 524288 34078720 526336 34080768
 1 33554433 2049 33556481 524289 34078721 526337 34080769
 256 33554688 2304 33556736 524544 34078976 526592 34081024
 257 33554689 2305 33556737 524545 34078977 526593 34081025
 268435456 301989888 268437504 301991936 268959744 302514176 268961792 302516224
 268435457 301989889 268437505 301991937 268959745 302514177 268961793 302516225
 268435712 301990144 268437760 301992192 268960000 302514432 268962048 302516480
 268435713 301990145 268437761 301992193 268960001 302514433 268962049 302516481
 0 262144 8192 270336 1048576 1310720 1056768 1318912
 536870912 537133056 536879104 537141248 537919488 538181632 537927680 538189824
 8 262152 8200 270344 1048584 1310728 1056776 1318920
 536870920 537133064 536879112 537141256 537919496 538181640 537927688 538189832
 2097152 2359296 2105344 2367488 3145728 3407872 3153920 3416064
 538968064 539230208 538976256 539238400 540016640 540278784 540024832 540286976
 2097160 2359304 2105352 2367496 3145736 3407880 3153928 3416072
 538968072 539230216 538976264 539238408 540016648 540278792 540024840 540286984
 0 16 134217728 134217744 512 528 134218240 134218256
 2 18 134217730 134217746 514 530 134218242 134218258
 67108864 67108880 201326592 201326608 67109376 67109392 201327104 201327120
 67108866 67108882 201326594 201326610 67109378 67109394 201327106 201327122
 4096 4112 134221824 134221840 4608 4624 134222336 134222352
 4098 4114 134221826 134221842 4610 4626 134222338 134222354
 67112960 67112976 201330688 201330704 67113472 67113488 201331200 201331216
 67112962 67112978 201330690 201330706 67113474 67113490 201331202 201331218
    ]
  PC2D
    [
 0 33554432 131072 33685504 256 33554688 131328 33685760
 8 33554440 131080 33685512 264 33554696 131336 33685768
 2097152 35651584 2228224 35782656 2097408 35651840 2228480 35782912
 2097160 35651592 2228232 35782664 2097416 35651848 2228488 35782920
 512 33554944 131584 33686016 768 33555200 131840 33686272
 520 33554952 131592 33686024 776 33555208 131848 33686280
 2097664 35652096 2228736 35783168 2097920 35652352 2228992 35783424
 2097672 35652104 2228744 35783176 2097928 35652360 2229000 35783432
 0 4096 32 4128 1048576 1052672 1048608 1052704
 134217728 134221824 134217760 134221856 135266304 135270400 135266336 135270432
 4 4100 36 4132 1048580 1052676 1048612 1052708
 134217732 134221828 134217764 134221860 135266308 135270404 135266340 135270436
 1024 5120 1056 5152 1049600 1053696 1049632 1053728
 134218752 134222848 134218784 134222880 135267328 135271424 135267360 135271456
 1028 5124 1060 5156 1049604 1053700 1049636 1053732
 134218756 134222852 134218788 134222884 135267332 135271428 135267364 135271460
 0 268435456 65536 268500992 2 268435458 65538 268500994
 8192 268443648 73728 268509184 8194 268443650 73730 268509186
 262144 268697600 327680 268763136 262146 268697602 327682 268763138
 270336 268705792 335872 268771328 270338 268705794 335874 268771330
 536870912 805306368 536936448 805371904 536870914 805306370 536936450 805371906
 536879104 805314560 536944640 805380096 536879106 805314562 536944642 805380098
 537133056 805568512 537198592 805634048 537133058 805568514 537198594 805634050
 537141248 805576704 537206784 805642240 537141250 805576706 537206786 805642242
 0 67108864 1 67108865 16777216 83886080 16777217 83886081
 16 67108880 17 67108881 16777232 83886096 16777233 83886097
 524288 67633152 524289 67633153 17301504 84410368 17301505 84410369
 524304 67633168 524305 67633169 17301520 84410384 17301521 84410385
 2048 67110912 2049 67110913 16779264 83888128 16779265 83888129
 2064 67110928 2065 67110929 16779280 83888144 16779281 83888145
 526336 67635200 526337 67635201 17303552 84412416 17303553 84412417
 526352 67635216 526353 67635217 17303568 84412432 17303569 84412433
    ]
 DSPA
    [
 1048576 34603009 33555457 0 1024 33555457 1049601 34604032
 34604033 1048576 0 33554433 1 33554432 34603009 1025
 33555456 1049601 1048577 33555456 33554433 34603008 34604032 1048577
 34603008 1024 1025 34604033 1049600 1 33554432 1049600
 33554432 1049600 1048576 33555457 33555457 34603009 34603009 1
 1048577 33554432 33555456 1048576 34604032 1025 1049601 34604032
 1025 33554433 34604033 34603008 1049600 0 1 34604033
 0 1049601 34603008 1024 33554433 33555456 1024 1048577
 8421888 0 32768 8421890 8421378 33282 2 32768
 512 8421888 8421890 512 8389122 8421378 8388608 2
 514 8389120 8389120 33280 33280 8421376 8421376 8389122
 32770 8388610 8388610 32770 0 514 33282 8388608
 32768 8421890 2 8421376 8421888 8388608 8388608 512
 8421378 32768 33280 8388610 512 2 8389122 33282
 8421890 32770 8421376 8389122 8388610 514 33282 8421888
 514 8389120 8389120 0 32770 33280 0 8421378
 260 67174656 0 67174404 67109120 0 65796 67109120
 65540 67108868 67108868 65536 67174660 65540 67174400 260
 67108864 4 67174656 256 65792 67174400 67174404 65796
 67109124 65792 65536 67109124 4 67174660 256 67108864
 67174656 67108864 65540 260 65536 67174656 67109120 0
 256 65540 67174660 67109120 67108868 256 0 67174404
 67109124 65536 67108864 67174660 4 65796 65792 67108868
 67174400 67109124 260 67174400 65796 4 67174404 65792
 128 17039488 17039360 553648256 262144 128 536870912 17039360
 537133184 262144 16777344 537133184 553648256 553910272 262272 536870912
 16777216 537133056 537133056 0 536871040 553910400 553910400 16777344
 553910272 536871040 0 553648128 17039488 16777216 553648128 262272
 262144 553648256 128 16777216 536870912 17039360 553648256 537133184
 16777344 536870912 553910272 17039488 537133184 128 16777216 553910272
 553910400 262272 553648128 553910400 17039360 0 537133056 553648128
 262272 16777344 536871040 262144 0 537133056 17039488 536871040
 2151682048 2147487808 2147487808 64 4198464 2151678016 2151677952 2147487744
 0 4198400 4198400 2151682112 2147483712 0 4194368 2151677952
 2147483648 4096 4194304 2151682048 64 4194304 2147487744 4160
 2151678016 2147483648 4160 4194368 4096 4198464 2151682112 2147483712
 4194368 2151677952 4198400 2151682112 2147483712 0 0 4198400
 4160 4194368 2151678016 2147483648 2151682048 2147487808 2147487808 64
 2151682112 2147483712 2147483648 4096 2151677952 2147487744 4198464 2151678016
 2147487744 4160 4194304 2151682048 64 4194304 4096 4198464
 268435464 270532608 8192 270540808 270532608 8 270540808 2097152
 268443648 2105352 2097152 268435464 2097160 268443648 268435456 8200
 0 2097160 268443656 8192 2105344 268443656 8 270532616
 270532616 0 2105352 270540800 8200 2105344 270540800 268435456
 268443648 8 270532616 2105344 270540808 2097152 8200 268435464
 2097152 268443648 268435456 8200 268435464 270540808 2105344 270532608
 2105352 270540800 0 270532616 8 8192 270532608 2105352
 8192 2097160 268443656 0 270540800 268435456 2097160 268443656
 134219808 2048 131072 134350880 134217728 134219808 32 134217728
 131104 134348800 134350880 133120 134350848 133152 2048 32
 134348800 134217760 134219776 2080 133120 131104 134348832 134350848
 2080 0 0 134348832 134217760 134219776 133152 131072
 133152 131072 134350848 2048 32 134348832 2048 133152
 134219776 32 134217760 134348800 134348832 134217728 131072 134219808
 0 134350880 131104 134217760 134348800 134219776 134219808 0
 134350880 133120 133120 2080 2080 131104 134217728 134350848
 1074282512 1073758208 16384 540688 524288 16 1074266128 1073758224
 1073741840 1074282512 1074282496 1073741824 1073758208 524288 16 1074266128
 540672 524304 1073758224 0 1073741824 16384 540688 1074266112
 524304 1073741840 0 540672 16400 1074282496 1074266112 16400
 0 540688 1074266128 524288 1073758224 1074266112 1074282496 16384
 1074266112 1073758208 16 1074282512 540688 16 16384 1073741824
 16400 1074282496 524288 1073741840 524304 1073758224 1073741840 524304
 540672 0 1073758208 16400 1073741824 1074266128 1074282512 540672
    ]

  ROT28L
    \<<
        RCWS 28 STWS 3 ROLLD 
    \>>
  SPLIT
    \<< DUP SRB SRB SRB SRB SWAP # FFFFFFFFh AND \>>
  JOIN
    \<< SWAP SLB SLB SLB SLB OR \>>
  DIPLEFTBITS
    \<< \-> left right
      \<< 
	left # 55555555h AND SL right # 55555555h AND OR
      \>>
    \>>
  DIPRIGHTBITS
    \<< \-> left right
      \<< 
	left # AAAAAAAAh AND right # AAAAAAAAh AND SR OR
      \>>
    \>>
@ DES final permutation. B -> FP(B)
  DFPLEFTBITS
    \<< \-> left right
      \<<
	left # 0F0F0F0Fh AND SL SL SL SL right # 0F0F0F0Fh AND OR
      \>>
    \>>
  DFPRIGHTBITS
    \<< \-> left right
      \<<
	left # F0F0F0F0h AND right # F0F0F0F0h AND SR SR SR SR OR
      \>>
    \>>
@ part of key schedule expansion: key -> c d
  DESPERMCHOICE
    \<<
	SPLIT \-> kl kr
        \<< 
           PC1CL kl SRB SRB SRB SR SR SR SR SR #7h AND 1 + B\->R GET R\->B 
           PC1CL kl SRB SRB SR SR SR SR SR #7h AND 1 + B\->R GET R\->B SL       OR
           PC1CL kl SRB SR SR SR SR SR #7h AND 1 + B\->R GET R\->B SL SL    OR
           PC1CL kl  SR SR SR SR SR #7h AND 1 + B\->R GET R\->B SL SL SL OR
           PC1CR kr SRB SRB SRB SR SR SR SR #Fh AND 1 + B\->R GET R\->B          OR
           PC1CR kr SRB SRB SR SR SR SR #Fh AND 1 + B\->R GET R\->B SL       OR
           PC1CR kr SRB SR SR SR SR #Fh AND 1 + B\->R GET R\->B SL SL    OR
           PC1CR kr  SR SR SR SR #Fh AND 1 + B\->R GET R\->B SL SL SL OR
           PC1DL kl SRB SRB SRB SR #Fh AND 1 + B\->R GET R\->B 
           PC1DL kl SRB SRB SR #Fh AND 1 + B\->R GET R\->B SL       OR
           PC1DL kl  SRB SR #Fh AND 1 + B\->R GET R\->B SL SL    OR
           PC1DL kl  SR #Fh AND 1 + B\->R GET R\->B SL SL SL OR
           PC1DR kr SRB SRB SRB SR #7h AND 1 + B\->R GET R\->B          OR
           PC1DR kr SRB SRB SR #7h AND 1 + B\->R GET R\->B SL       OR
           PC1DR kr SRB SR #7h AND 1 + B\->R GET R\->B SL SL    OR
           PC1DR kr  SR #7h AND 1 + B\->R GET R\->B SL SL SL OR
        \>>
    \>>
@ DES_SP_ENCRYPT_ROUND:	l r ks ksidx -> r l ks ksidx
  DESSPER 
    \<< 32 STWS
	\-> l r ks ksidx
       \<< r RRB RR RR RR   ks ksidx GET R\->B XOR 
	   r RRB RRB RRB RL ks ksidx 1 + GET R\->B XOR 
           \-> t1 t2
        \<<
            r l 
	    DSPA t1 SRB SRB SRB #77o AND   1 + B\->R GET R\->B XOR
	    DSPA t1 SRB SRB #77o AND #101o + B\->R GET R\->B XOR
	    DSPA t1  SRB #77o AND #201o + B\->R GET R\->B XOR
	    DSPA t1         #77o AND #301o + B\->R GET R\->B XOR
	    DSPA t2 SRB SRB SRB #77o AND #401o + B\->R GET R\->B XOR
	    DSPA t2 SRB SRB #77o AND #501o + B\->R GET R\->B XOR
	    DSPA t2 SRB #77o AND #601o + B\->R GET R\->B XOR
	    DSPA t2         #77o AND #701o + B\->R GET R\->B XOR
            ks ksidx 2 +
        \>>
       \>>
      64 STWS 
    \>>
END


