global main .global __do_copy_data #include ; DOWN PIN6 = PD6 ; UP PIN 7 = PD7 ; ; CS PIN 10 (green) = PB2 CS = PB2 ; IN PIN 11 = PB3 ; CLK PIN 13 = PB5 ; ; [ "uno:10", "m1:CS", "green", [ "v-24", "*", "h-4" ] ], ; [ "uno:11", "m1:DIN", "orange", [ "v-20", "*", "h-8" ] ], ; [ "uno:13", "m1:CLK", "blue", [ "v-16", "*", "h-12" ] ], ; .equ LED, PB5 BIT_UP = 7 BIT_DOWN = 6 #define tmpreg r16 #define tmpreg2 r17 #define TICKS r28 #define CLOCK Z ; Game status .data paddle_player: .byte 0 paddle_comp: .byte 0 ball_x: .byte 0 ball_y: .byte 0 ball_dirx: .byte 0 ball_diry: .byte 0 .text init_game_status: ldi tmpreg, 4 sts paddle_player, tmpreg inc tmpreg sts paddle_comp, tmpreg sts ball_y, tmpreg ldi tmpreg, 14 sts ball_x, tmpreg ldi tmpreg, 0xff sts ball_dirx, tmpreg ldi tmpreg, 0xff sts ball_diry, tmpreg ret clear_clock: clr TICKS ldi ZL, 0 ldi ZH, 0 ret increment_clock: ;ADIW R30, 1 ADIW Z, 1 inc TICKS ret .global TIMER1_OVF_vect TIMER1_OVF_vect: push r0 in r0, _SFR_IO_ADDR(SREG) push r0 rcall increment_clock pop r0 out _SFR_IO_ADDR(SREG), r0 pop r0 reti init_spi: ldi r24, (1<<5) | (1<<3) | (1<<2) out _SFR_IO_ADDR(DDRB), r24 ldi r24, (1<<2) out _SFR_IO_ADDR(PORTB),r24 ; CS HIGH ldi r24,0B01010001 out _SFR_IO_ADDR(SPCR),r24 ret spi_wait: ; input r24 ;break push r0 out _SFR_IO_ADDR(SPDR), r24 check_status: in r0, _SFR_IO_ADDR(SPSR) sbrs r0, SPIF rjmp check_status pop r0 ret init_buttons: ; set as input ldi tmpreg, 0b11000000 clr tmpreg out _SFR_IO_ADDR(DDRD), tmpreg ; enable pull up resistors ldi tmpreg, (1<