borgware-2d/src/joystick/nes_pad.c

47 lines
1008 B
C

#include <avr/io.h>
#include <util/delay.h>
#include "../makros.h"
#include "../config.h"
#define NES_PAD_DDR_PL DDR(NES_PAD_PORT_PL)
#define NES_PAD_DDR_CLK DDR(NES_PAD_PORT_CLK)
#define NES_PAD_PIN_DS PIN(NES_PAD_PORT_DS)
#define NES_PAD_DDR_DS DDR(NES_PAD_PORT_DS)
volatile unsigned char fakeport;
unsigned char waitForFire;
void joy_init(){
NES_PAD_DDR_PL |= 1<<NES_PAD_BIT_PL;
NES_PAD_DDR_CLK |= 1<<NES_PAD_BIT_CLK;
NES_PAD_PORT_DS |= (1<<NES_PAD_BIT_DS);//pullup
NES_PAD_DDR_DS &= ~(1<<NES_PAD_BIT_DS);
}
void readButtons(){
NES_PAD_PORT_PL |= 1<<NES_PAD_BIT_PL;
asm volatile("nop\r\t");
asm volatile("nop\r\t");
asm volatile("nop\r\t");
NES_PAD_PORT_PL &= ~ (1<<NES_PAD_BIT_PL);
uint8_t i, port=0;
for(i=0; i<8; i++){
port >>= 1;
_delay_us(1);
if(NES_PAD_PIN_DS & (1 << NES_PAD_BIT_DS))
port |=0x80;
NES_PAD_PORT_CLK |= 1<<NES_PAD_BIT_CLK;
asm volatile("nop\r\t");
asm volatile("nop\r\t");
NES_PAD_PORT_CLK &= ~(1<<NES_PAD_BIT_CLK);
}
fakeport= ~port;
}