/* --------------------------------------------------------------------- */
declaration
  dataunit : byte;
  functions
    Test
  ;
  Manufacturers
    RAM
  ;
  Devices
    PD41416
  ;
  chips = OE_, D0, D1, WE_, RAS_, A6, A5, A4, Vcc,
  	  A7, A3, A2, A1, A0, D2, CAS_, D3, GND
  ;
  $v2 = Vcc, RAS_, CAS_; 
endd

int  init()
{
  @Vout  1,  5.0;
  @Vout  2,  5.0;
  @Vout  3,  5.0;
  @Out   GND, @G;
  @Delay 10, @Ms;
  
  @Out   A[0..7], @W;
  @Out   D[0..3], @Z;
  @Out   WE_,   @W;
  @Out   RAS_,  @W;
  @Out   Vcc,   @W;
  @Out   CAS_,  @W;
  @Out   OE_,   @W;
  
  @Out   A[0..7], @L;
  @Out   WE_,   @H;
  @Out   RAS_,  @O;
  @Out   CAS_,  @O;
  @Out   Vcc,   @L;
  @Out   OE_,   @H;

  @Out   Vcc,   @O;  
  @Delay 50, @Ms;
}
/* --------------------------------------------------------------------- */ 
int  main()
{
  int  tmp, tmp1;
  int  i, j, k; 
   
  init();
  @Display  24, 14, "Current : ";
  tmp = 0;  
  for( i=0; i<0x40; i++ )
  {
     for( j=0;j<256;j++)
     {
       @Display 34, 14, (i*256) + j, @D;
       for( k=0;k<2;k++)
       {
       if(k==0)    tmp1 = 0;
       else        tmp1 = 0x0f;                   
/* ------------------------ Write cycle ------------------- */
       @Out  D[0..3], @W;
       @Out  D[0..3], tmp1;
       @Out  A[0..7], i;
       @Out  RAS_, @F;
       @Out  WE_,  @L;
       @Out  A[0..7], j;
       @Out  CAS_, @F;

       @Out  WE_,  @H;
       @Out  RAS_, @O;
       @Out  CAS_, @O;       
       
/* ------------------------ Read cycle -------------------- */     

       @Out  D[0..3], @Z;
       @Out  A[0..7], i;
       @Out  RAS_, @F;
     
       @Out  A[0..7], j;     
       @Out  CAS_, @F;
       @Out  OE_,  @L;
       @In   D[0..3], tmp;
       @Out  OE_,  @H;
       @Out  RAS_, @O;
       @Out  CAS_, @O;
       
       if( tmp != tmp1 )    @Fail  i, j, tmp;
/* ------------------------ Read end ---------------------- */
     } /* end for k */
    } /* end for j */
  } /* end for i */
}        
