//--------------------------------------------------------------------------- #include #include #include #pragma hdrstop /* (c)数理設計研究所 玉置 Mathematical Assist Design Hal.T 2002/11/23 線型M系列タップ計算機 参考: srg.c SRG(shift register generater) Max length connection Ver. 1.0 (c) creamsoft org. 01/26/1993 http://www.h4.dion.ne.jp/~ja5fp/creamsoft.html ビットパターンを全数計算して最長系列符号かどうかを調査している BCB Ver5 */ //--------------------------------------------------------------------------- #pragma argsused int taps=-1; char calmode = 0; FILE *fp; //---------------------------------------- short int ikutu0[256] = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 }; short int ikutu[256]; inline void init_ikutu(void) { for(int n=16; n<256; n++) { ikutu0[n] = ikutu0[n & 0x0f] + ikutu0[n >> 4]; } for(int n=0; n<256; n++) { ikutu[n] = ikutu0[n] % 2; } } //---------------------------------------- //最下位ビットにEXORしてくる inline int exor(int d) { int er=0; for(int b=0; b>= 8; } return er; } //---------------------------------------- char *mem; //---------------------------------------- //成功したら1 駄目なら0 tapが1のところをEXOR int mtest(int bit, int tap) { int shiftreg = -1; int regmask = 1; for(int i=1; i0) { printf("\n[%dbit %dtaps]\n", mbit, taps); fprintf(fp,"\n[%dbit %dtaps]\n", mbit, taps); } else { printf("\n[%dbit]\n", mbit); fprintf(fp,"\n[%dbit]\n", mbit); } // int lc=0; int mtap = 1<>1); tap>= 8; } if(taps>0) { if(ns != taps) continue; } if(ns & 1) continue; if(mtest(mbit, tap)) { if(++nl>7) { printf(" %X,\n", tap); fprintf(fp, " %X,\n", tap); nl=0; } else { printf(" %X,", tap); fprintf(fp, " %X,", tap); } } } } //---------------------------------------- void makeseq(int d, int s) { if(d==0) return; //bit数を調べる int mtap = d; int mbit = 1; while((d=d>>1)!=0) mbit++; if(mbit>30) return; init_ikutu(); if(mtest(mbit, mtap)) { //=== int shiftreg = -1; int regmask = 1; for(int i=1; iLSB)\n\ "); if(argc==1) { return -1; } else { cp = argv[1]; if(*cp=='-') { calmode = cp[1]; if(argc <3) return -1; if(argc >3) { sscanf(argv[3], "%X", &startd); if(startd==0) exit(-1); } if(sscanf(argv[2], "%X", &mask)==1) { char fn[255]; strcpy(fn, "m"); strcat(fn, argv[2]); if(calmode == 'a') { strcat(fn, ".txt"); fp = fopen(fn, "wt"); } else { strcat(fn, ".bin"); fp = fopen(fn, "wb"); } makeseq(mask, startd); fclose(fp); } } else { mbit = atoi(argv[1]); if(mbit <3 || mbit > 30) { return -1; } if(argc>2) { taps = atoi(argv[2]); } char buf[256] = "mms"; strcat(buf, argv[1]); if(argc>2) { strcat(buf, "_"); strcat(buf, argv[2]); } strcat(buf, ".txt"); fp = fopen(buf, "wt"); mfind(mbit); fclose(fp); } } return 0; } //---------------------------------------------------------------------------