data0 .SET 00600h data1 .SET 00601h data2 .SET 00602h data3 .SET 00603h data4 .SET 00604h data5 .SET 00605h temp .SET 00606h ser_dat .SET 00607h key0 .SET 00608h key1 .SET 00609h key2 .SET 0060Ah key3 .SET 0060Bh key4 .SET 0060Ch key5 .SET 0060Dh key6 .SET 0060Eh key7 .SET 0060Fh e_key_begin .SET 00610h e_key_end .SET 00640h shift0 .SET 00670h shift1 .SET 00671h shift2 .SET 00672h shift3 .SET 00673h shift4 .SET 00674h shift5 .SET 00675h shift6 .SET 00676h shift7 .SET 00677h ; --------------------------------------------------------------------------- .DS 00608h init_test_key: .WORD 00000h, 01111h, 02222h, 03333h .WORD 04444h, 05555h, 06666h, 07777h .DS 00670h init_test_shft: .WORD 00000h, 00000h, 00000h, 00000h .WORD 00000h, 00000h, 00000h, 00000h ; --------------------------------------------------------------------------- .PS 0FA00h .ENTRY RESET: B start .PS 0FA0Ah B0RINT: B RINT ; ----------------------------------------------------------------------------- .PS 0FB00h start: SPM 0 RSXM FORT 1 RTXM SFSM LDPK 0Ch CALL idea_key_exp, *, 7 LDPK 00h LARP 00h LARK AR0,0 LACK 010h SACL 004h EINT loop: B loop ; ----------------------------------------------------------------------------- RINT: LDPK 00h SST1 060h LAC 000h LDPK 0Ch SACL ser_dat CALL idea_cyk, *, 7 LAC ser_dat XOR data0 CALL idea_shift, *, 7 LDPK 00h SACL 001h LST1 060h EINT RET ; --------------------------------------------------------------------------- idea_key_exp: LRLK AR7,e_key_begin ; idea_key LRLK AR0,e_key_end idea_key_exp_3: RPTK 007h BLKD key0, *+ LARK AR2, 018h LARP 2 idea_key_exp_2: ZALH key0 ROL ZALH key6 OR key7 ROL SACL key7 SACH key6 ZALH key4 OR key5 ROL SACL key5 SACH key4 ZALH key2 OR key3 ROL SACL key3 SACH key2 ZALH key0 OR key1 ROL SACL key1 SACH key0 BANZ idea_key_exp_2, *- LARP 7 CMPR 02 BBZ idea_key_exp_3 ; RET LRLK AR7,e_key_begin ; idea_key LRLK AR0,e_key_end idea_key_exp_1: LAC * XORK 00DEAh SACL *+ CMPR 02 BBZ idea_key_exp_1 RET ; --------------------------------------------------------------------------- idea_shift: ANDK 000FFh LRLK AR7, 00676h RPTK 006h DMOV *- SACL shift0 RET ; --------------------------------------------------------------------------- idea_cyk: LT shift7 MPYK 00100h PAC OR shift6 SACL data3 LT shift5 MPYK 00100h PAC OR shift4 SACL data2 LT shift3 MPYK 00100h PAC OR shift2 SACL data1 LT shift1 MPYK 00100h PAC OR shift0 SACL data0 ; --------------------------------------------------------------------------- idea_start: LRLK AR7,e_key_begin ; idea_key LRLK AR0,e_key_end idea_loop: LAC * BZ idea_00 LAC data0 BZ idea_01 LT data0 MPYU *+ PAC SPH temp SUBH temp SUB temp BNC idea_02 B idea_03 idea_00: LAC data0 B idea_04, *+ idea_01: LAC *+ idea_04: NEG idea_02: ADDK 001h idea_03: SACL data0 LAC data1 ADD *+ SACL data1 LAC data2 ADD *+ SACL data2 LAC * BZ idea_10 LAC data3 BZ idea_11 LT data3 MPYU *+ PAC SPH temp SUBH temp SUB temp BNC idea_12 B idea_13 idea_10: LAC data3 B idea_14, *+ idea_11: LAC *+ idea_14: NEG idea_12: ADDK 001h idea_13: SACL data3 LAC data0 XOR data2 SACL data4 LAC data1 XOR data3 SACL data5 LAC * BZ idea_20 LAC data4 BZ idea_21 LT data4 MPYU *+ PAC SPH temp SUBH temp SUB temp BNC idea_22 B idea_23 idea_20: LAC data4 B idea_24, *+ idea_21: LAC *+ idea_24: NEG idea_22: ADDK 001h idea_23: SACL data4 ADD data5 SACL data5 LAC * BZ idea_30 LAC data5 BZ idea_31 LT data5 MPYU *+ PAC SPH temp SUBH temp SUB temp BNC idea_32 B idea_33 idea_30: LAC data5 B idea_34, *+ idea_31: LAC *+ idea_34: NEG idea_32: ADDK 001h idea_33: SACL data5 ADD data4 SACL data4 LAC data0 XOR data5 SACL data0 LAC data1 XOR data4 SACL data1 LAC data2 XOR data5 SACL data2 LAC data3 XOR data4 SACL data3 LAC data2 DMOV data1 SACL data1 CMPR 1 BBNZ idea_loop LAC data2 DMOV data1 SACL data1 LAC * BZ idea_40 LAC data0 BZ idea_41 LT data0 MPYU *+ PAC SPH temp SUBH temp SUB temp BNC idea_42 B idea_43 idea_40: LAC data0 B idea_44, *+ idea_41: LAC *+ idea_44: NEG idea_42: ADDK 001h idea_43: SACL data0 LAC data1 ADD *+ SACL data1 LAC data2 ADD *+ SACL data2 LAC * BZ idea_50 LAC data3 BZ idea_51 LT data3 MPYU *+ PAC SPH temp SUBH temp SUB temp BNC idea_52 B idea_53 idea_50: LAC data3 B idea_54, *+ idea_51: LAC *+ idea_54: NEG idea_52: ADDK 001h idea_53: SACL data3 RET ; ---------------------------------------------------------------------------