Welcome, guest! Login / Register - Why register?
Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)

Paste

Pasted as C by registered user rattlehead ( 15 years ago )
#ifndef _libds
#define _libds
#endif

/***ATT: this is supossed to EMULATE a Dual Shock 2
 and not read it.***/

unsigned int xstat;   //Button states
unsigned int tristat;
unsigned int sqrstat;
unsigned int circstat;
unsigned int upstat;
unsigned int dwnstat;
unsigned int rtstat;
unsigned int ltstat;
unsigned int l1stat;
unsigned int l2stat;
unsigned int l3stat;
unsigned int r1stat;
unsigned int r2stat;
unsigned int r3stat;
unsigned int ststat;
unsigned int slstat;
unsigned int anstat;
       //Joystick states
unsigned int rxjoy;
unsigned int ryjoy;
unsigned int lxjoy;
unsigned int lyjoy;

unsigned int ffsent;  //0xFF to spi buffer flag
unsigned int bytecount = 0; //SPI rcv bytes count
unsigned int command;  //command rcv'd by spi
unsigned int digital = 1; //digital mode
unsigned int analog;  //analog mode
unsigned int config;  //config mode
unsigned int bstat1[7];  //button state 1
unsigned int bstat2[7];  //button state 2
unsigned int bstate1;  //bstate1 byte
unsigned int bstate2;  //bstate2 byte

void dsconf(){
 input(DSATT);
 input(DSCMD);
 input(DSCLK);
 setup_spi(SPI_SLAVE | SPI_H_TO_L | SPI_XMIT_L_TO_H); 
 enable_interrupts(INT_SSP);
 enable_interrupts(GLOBAL); 
}

ack(unsigned int us){
 output_low(DSACK);
 delay_us(us);
 output_high(DSACK);
}

void write(unsigned int data, int doack = 1){
 //delay_us(2);
 spi_write(data);
 //if(doack)
 // ack(3);
}

#INT_SSP
void libds_isr(){
 ack(2);
 command = spi_read();  //IMPORTANT SHIT
 
 //if(command == 0x00 && bytecount == 4)
 // output_high(GREEN_LED);

 bytecount++;    //INCREMENT BYTE COUNT
 switch (bytecount){
  case 1:
   if(digital){
    write(0x41,1);
   }
    //write(0xFE,1);
   /*if(analog)
    write(0x79,1);
   if(config)
    write(0xFF,1);*/
  break;
  case 2:
   if(command == 0x42){
    //output_high(GREEN_LED);
    config = 0;
    write(0x5A,1);
    break;
   }
   if(command == 0xFF){
    config = 1;
    write(0x5A,1);
    break;
   }
   write(0xFF,1);
   bytecount = 0;
  break;
  case 3:
   if(config == 0 && command == 0x00){
    write(0xFF,1);
    output_high(GREEN_LED);
   }
  break;
  case 4:
   if(config == 0 && command == 0x00){
    write(0xFF,0);
   }
   if(digital && !config)
    write(0xFF,0);
  break;
  case 5:
   if(command == 0x00 && analog && !config){
    write(rxjoy);
   }
   if(command == 0x00 && digital && !config){
    write(0xFF);
    bytecount = 0;
   }
  break;
  case 6:
   if(command == 0x00 && analog && !config){
    write(ryjoy);
   }
  break;
  case 7:
   if(command == 0x00 && analog && !config){
    write(lxjoy);
   }
  break;
  case 8:
   if(command == 0x00 && analog && !config){
    write(lyjoy);
   }
  break;
  case 9:
   if(rtstat){
    write(0xFF);
   } else {
    write(0x00);
   }
  break;
  case 10:
   if(ltstat){
    write(0xFF);
   } else {
    write(0x00);
   }
  break;
  case 11:
   if(upstat){
    write(0xFF);
   } else {
    write(0x00);
   }
  break;
  case 12:
   if(dwnstat){
    write(0xFF);
   } else {
    write(0x00);
   }
  break;
  case 13:
   if(tristat){
    write(0xFF);
   } else {
    write(0x00);
   }
  break;
  case 14:
   if(circstat){
    write(0xFF);
   } else {
    write(0x00);
   }
  break;
  case 15:
   if(sqrstat){
    write(0xFF);
   } else {
    write(0x00);
   }
  break;
  case 16:
   if(xstat){
    write(0xFF);
   } else {
    write(0x00);
   }
  break;
  case 17:
   if(l1stat){
    write(0xFF);
   } else {
    write(0x00);
   }
  break;
  case 18:
   if(r1stat){
    write(0xFF);
   } else {
    write(0x00);
   }
  break;
  case 19:
   if(l2stat){
    write(0xFF);
   } else {
    write(0x00);
   }
  break;
  case 20:
   if(r2stat){
    write(0xFF);
   } else {
    write(0x00);
   }
  break;
 }
 //bytecount++;
}

/*void libds_loop(){
 if(!ffsent){
  write(0xFF);
  ffsent = 1;
 }
}*/

 

Revise this Paste

Your Name: Code Language: