macro AddInitialRoundKey lcla &i .top lda state1+&i eor rk+&i sta state1+&i &i seta &i+2 aif &i<16,.top mend macro NormalRound &round aif &round/2*2=&round,.evenround MixColumn 0,0,5,10,15,state1,state2 MixColumn 4,4,9,14,3,state1,state2 MixColumn 8,8,13,2,7,state1,state2 MixColumn 12,12,1,6,11,state1,state2 ago .done .evenround MixColumn 0,0,5,10,15,state2,state1 MixColumn 4,4,9,14,3,state2,state1 MixColumn 8,8,13,2,7,state2,state1 MixColumn 12,12,1,6,11,state2,state1 .done mend macro MixColumn &i,&A,&B,&C,&D,&state,&out aif (&i=0).AND.(&round<>1),.skip ldy &state+&D .skip lda Sbox,Y pha ldx &state+&A eor Xtime2Sbox,X ldy &state+&B eor Xtime3Sbox,Y ldy &state+&C eor Sbox,Y eor rk+&round*16+&i sta &out+&i pla eor Xtime3Sbox,Y eor Sbox,X ldy &state+&B eor Xtime2Sbox,Y eor rk+&round*16+&i+1 sta &out+&i+1 lda Sbox,Y pha ldy &state+&D eor Xtime3Sbox,Y eor Sbox,X ldy &state+&C eor Xtime2Sbox,Y eor rk+&round*16+&i+2 sta &out+&i+2 pla eor Sbox,Y eor Xtime3Sbox,X ldy &state+&D eor Xtime2Sbox,Y eor rk+&round*16+&i+3 sta &out+&i+3 aif &i<>12,.skip2 tay .skip2 mend macro FinalRound &round FinalRoundStep 3,15,1 FinalRoundStep 15,11 FinalRoundStep 11,7 FinalRoundStep 7,3 FinalRoundStep 0,0 FinalRoundStep 4,4 FinalRoundStep 8,8 FinalRoundStep 12,12 FinalRoundStep 13,1 FinalRoundStep 1,5 FinalRoundStep 5,9 FinalRoundStep 9,13 FinalRoundStep 10,2 FinalRoundStep 2,10 FinalRoundStep 14,6 FinalRoundStep 6,14 mend macro FinalRoundStep &to,&from,&skipldy aif C:&skipldy,.skip ldy state2+&from .skip lda Sbox,Y eor rk+&round*16+&to sta state1+&to mend macro ShortRegs sep #$30 longa off longi off mend macro LongRegs rep #$30 longa on longi on mend