; inicializace joysticku ; neničí obsah žádných registrů joy_init: push r16 push r17 in r17, DDRE andi r17, 0b11110011 in r16, PORTE ori r16, 0b00001100 out DDRE, r17 out PORTE, r16 ldi r16, 0b00000000 sts DIDR1, r16 in r17, DDRB andi r17, 0b00101111 in r16, PORTB ori r16, 0b11010000 out DDRB, r17 out PORTB, r16 pop r17 pop r16 ret ; procedury na test stisku jednotlivých tlačítek joysticku ; neničí obsah žádných registrů ; BREQ ... skok, když JE stisknuté ; BRNE ... skok, když NENÍ stisknuté joy_vlevo: push r16 in r16, PINE andi r16, 0b00000100 cpi r16, 0 pop r16 ret joy_vpravo: push r16 in r16, PINE andi r16, 0b00001000 cpi r16, 0 pop r16 ret joy_nahoru: push r16 in r16, PINB andi r16, 0b01000000 cpi r16, 0 pop r16 ret joy_dolu: push r16 in r16, PINB andi r16, 0b10000000 cpi r16, 0 pop r16 ret joy_enter: push r16 in r16, PINB andi r16, 0b00010000 cpi r16, 0 pop r16 ret ; procedury, které čekají na uvolnění daného tlačítka joysticku ; neničí obsah žádných registrů joy_uvolnit_vlevo: call joy_vlevo breq joy_uvolnit_vlevo ret joy_uvolnit_vpravo: call joy_vpravo breq joy_uvolnit_vpravo ret joy_uvolnit_nahoru: call joy_nahoru breq joy_uvolnit_nahoru ret joy_uvolnit_dolu: call joy_dolu breq joy_uvolnit_dolu ret joy_uvolnit_enter: call joy_enter breq joy_uvolnit_enter ret