#include #include static unsigned char PT3VolumeTable_33_34[]={ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, //0 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1, //1 0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2, //2 0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x3,0x3,0x3,0x3, //3 0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x2,0x2,0x2,0x3,0x3,0x3,0x4,0x4,0x4, //4 0x0,0x0,0x0,0x1,0x1,0x1,0x2,0x2,0x3,0x3,0x3,0x4,0x4,0x4,0x5,0x5, //5 0x0,0x0,0x0,0x1,0x1,0x2,0x2,0x3,0x3,0x3,0x4,0x4,0x5,0x5,0x6,0x6, //6 0x0,0x0,0x1,0x1,0x2,0x2,0x3,0x3,0x4,0x4,0x5,0x5,0x6,0x6,0x7,0x7, //7 0x0,0x0,0x1,0x1,0x2,0x2,0x3,0x3,0x4,0x5,0x5,0x6,0x6,0x7,0x7,0x8, //8 0x0,0x0,0x1,0x1,0x2,0x3,0x3,0x4,0x5,0x5,0x6,0x6,0x7,0x8,0x8,0x9, //9 0x0,0x0,0x1,0x2,0x2,0x3,0x4,0x4,0x5,0x6,0x6,0x7,0x8,0x8,0x9,0xA, //a 0x0,0x0,0x1,0x2,0x3,0x3,0x4,0x5,0x6,0x6,0x7,0x8,0x9,0x9,0xA,0xB, //b 0x0,0x0,0x1,0x2,0x3,0x4,0x4,0x5,0x6,0x7,0x8,0x8,0x9,0xA,0xB,0xC, //c 0x0,0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x7,0x8,0x9,0xA,0xB,0xC,0xD, //d 0x0,0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xC,0xD,0xE, //e 0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xC,0xD,0xE,0xF, //f }; static unsigned char PT3VolumeTable_35[]={ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1, 0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2, 0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x3,0x3,0x3, 0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x3,0x3,0x3,0x3,0x4,0x4, 0x0,0x0,0x1,0x1,0x1,0x2,0x2,0x2,0x3,0x3,0x3,0x4,0x4,0x4,0x5,0x5, 0x0,0x0,0x1,0x1,0x2,0x2,0x2,0x3,0x3,0x4,0x4,0x4,0x5,0x5,0x6,0x6, 0x0,0x0,0x1,0x1,0x2,0x2,0x3,0x3,0x4,0x4,0x5,0x5,0x6,0x6,0x7,0x7, 0x0,0x1,0x1,0x2,0x2,0x3,0x3,0x4,0x4,0x5,0x5,0x6,0x6,0x7,0x7,0x8, 0x0,0x1,0x1,0x2,0x2,0x3,0x4,0x4,0x5,0x5,0x6,0x7,0x7,0x8,0x8,0x9, 0x0,0x1,0x1,0x2,0x3,0x3,0x4,0x5,0x5,0x6,0x7,0x7,0x8,0x9,0x9,0xA, 0x0,0x1,0x1,0x2,0x3,0x4,0x4,0x5,0x6,0x7,0x7,0x8,0x9,0xA,0xA,0xB, 0x0,0x1,0x2,0x2,0x3,0x4,0x5,0x6,0x6,0x7,0x8,0x9,0xA,0xA,0xB,0xC, 0x0,0x1,0x2,0x3,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xA,0xB,0xC,0xD, 0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x7,0x8,0x9,0xA,0xB,0xC,0xD,0xE, 0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0x8,0x9,0xA,0xB,0xC,0xD,0xE,0xF, }; static unsigned char VT[256]; //VolTableCreator (c) Ivan Roshin //A - VersionForVolumeTable (0..4 - 3.xx..3.4x; //5.. - 3.5x..3.6x..VTII1.0) void VolTableCreator(int which) { unsigned char a,c,carry,old_carry; unsigned short hl,de,ix; unsigned short s[16]; unsigned int temp1,temp2; int self_modified=0; //cp 005h ; compare accumulator with 5? carry=which; hl=0x11; de=0x00; a=0x17; //ld a,017h RLA ; a=$17 if (!carry) goto m1; //jr nc,m1 ; if (carry==1) { hl--; //dec l ; l--; de=hl; //ld e,l ; e=l; a=0; //xor a ; a=a^a; (a=0?) self_modified=1; m1: // ; } // ld (m2),a set m2 to NOP (0) or RLA ($17) ix=16; //ld ix,VT_+16 ; IX is 16 entries into table ( c=0x10; //ld c,010h ; c=16 pt3_initv2: printf("1: HL=%04X DE=%04X\n",hl,de); s[0]=hl; // push hl ; save hl // add hl,de ; hl=hl+de temp1=hl; temp2=de; temp1=temp1+temp2; hl=temp1&0xffff; // if (temp1&(1<<16)) carry=1; // else carry=0; printf("2: HL=%04X DE=%04X\n",hl,de); // ex de,hl ; swap temp1=hl; hl=de; de=temp1; printf("3: HL=%04X DE=%04X\n",hl,de); // sbc hl,hl if (carry==0) hl=0x0; else hl=0xffff; pt3_initv1: a=hl&0xff; // ld a,l 7d ; ? //m2: // Self modified, RLA or NOP depending // ld a,l 7d 00=nop ; this is self modified if (self_modified) { /* nop */ } else { /* rla $17 */ old_carry=carry; carry=!!(a&0x80); a=a<<1; a|=old_carry; } a=hl>>8; // ld a,h 7c ; ? // adc a,000h a=a+carry; VT[ix]=a;//ld (ix+000h),a ix++; // inc ix // add hl,de temp1=hl; temp2=de; temp1=temp1+temp2; hl=temp1; // printf("4: HL=%04X DE=%04X\n",hl,de); c++; // inc c a=c; // ld a,c a=a&0xf;// and 00fh if (a!=0) goto pt3_initv1; // jr nz,pt3_initv1 hl=s[0]; a=de&0xff; // ld a,e // cp 077h // jr nz,m3 if ((a-0x77)!=0) goto m3; de++; //inc e m3: a=c; // ld a,c a=a&a; // and a if (a!=0) goto pt3_initv2; // jr nz,pt3_initv2 } int main(int argc, char **argv) { int i; VolTableCreator(0); for(i=0;i<256;i++) { if (i%16==0) printf("\n"); printf(" %02X",VT[i]); } printf("\n"); if (!memcmp(VT,PT3VolumeTable_35,256)) { printf("MATCH 35\n"); } else { printf("NO MATCH 35\n"); } if (!memcmp(VT,PT3VolumeTable_33_34,256)) { printf("MATCH 34\n"); } else { printf("NO MATCH 34\n"); } VolTableCreator(1); for(i=0;i<256;i++) { if (i%16==0) printf("\n"); printf(" %02X",VT[i]); } printf("\n"); if (!memcmp(VT,PT3VolumeTable_35,256)) { printf("MATCH 35\n"); } else { printf("NO MATCH 35\n"); } if (!memcmp(VT,PT3VolumeTable_33_34,256)) { printf("MATCH 34\n"); } else { printf("NO MATCH 34\n"); } }