Tools


Now a short test program, for playing with the equations:


#include <stdlib.h>

int  main(void);
void byte2bin(int val, int bin[]);
int  do_add(int a, int b, int c0);

void byte2bin(int val, int bin[])
{
  int i;
  for(i=0;i<8;i++)
  { bin[i]=0; if((int)val & 1) bin[i]=-1; val>>=1; }
}

int main(void)
{
 int a,b;

// clrscr();

 printf("\n\n C0=0               C0=1             ");
 printf("\n 0123456789ABCDEF   0123456789ABCDEF ");
 for(a=0;a<0x10;a++)
 {
   printf("\n%1X",a);
   for(b=0;b<0x10;b++) if(do_add(a,b, 0)) printf("*"); else printf(".");
   printf("%1X %1X",a,a);
   for(b=0;b<0x10;b++) if(do_add(a,b,-1)) printf("*"); else printf(".");
   printf("%1X",a);
 }
 printf("\n 0123456789ABCDEF   0123456789ABCDEF ");
 return(0);
}

int do_add(int a, int b, int c0)
{
 int g0,g1,g2,g3;
 int p0,p1,p2,p3;
 int ab[8],bb[8];
 int o1,c1,c2,c3,c4,c_4;

 byte2bin(a,ab);
 byte2bin(b,bb);

 g0=g1=g2=g3=0;
 p0=p1=p2=p3=0;
 c1=c2=c3=c4=0;
 o1=c_4=0;

 //propagate 0..3: XOR
 if(ab[0]^bb[0]) p0 =-1;
 if(ab[1]^bb[1]) p1 =-1;
 if(ab[2]^bb[2]) p2 =-1;
 if(ab[3]^bb[3]) p3 =-1;

 //propagate 1: OR
 if(ab[1]|bb[1]) o1=-1;

 //generate 0..3:
 if(ab[0]&bb[0]) g0=-1;
 if(ab[1]&bb[1]) g1=-1;
 if(ab[2]&bb[2]) g2=-1;
 if(ab[3]&bb[3]) g3=-1;

 //ripple carry
 if((c0&p0)|g0) c1=-1;
 if((c1&p1)|g1) c2=-1;
 if((c2&p2)|g2) c3=-1;
 if((c3&p3)|g3) c4=-1;

/*----------------------*/

#define NMOS6502 1

#ifdef NMOS6502

 if(c4)                       c_4=-1;
 if(g1&p2&c1)                 c_4=-1;
 if((g2|p3)&(o1|(~g2&p2)|c1)) c_4=-1; //o1=p1|g1

#else

 if(c4)    c_4=-1;
 if(o1&p3) c_4=-1; //o1=p1|g1
 if(p2&p3) c_4=-1;

 if(o1&g2) c_4=-1; //6+4..7, 7+4..7 //o1=p1|g1

 /*9+1:*/ if(g0&p3)    c_4=-1;
 /*7+3:*/ if(g0&g1&p2) c_4=-1;
 /*5+5:*/ if(g0&g2)    c_4=-1;

 /*9+0+c0, 8+1+c0:*/ if(c0&p0&p3)    c_4=-1;
 /*7+2+c0, 6+3+c0:*/ if(c0&p0&g1&p2) c_4=-1;
 /*5+4+c0:        */ if(c0&p0&g2)    c_4=-1;

#endif

/*----------------------*/

 return(c_4);
}


That's all for now.
On to part 2.


[HOME] [UP]/ [BACK] [1] [2] [3] [4] [5] [6] [7]

(c) Dieter Mueller 2006