//_ //_ simon for stk500 (in avrasm) //_ by renesis/efnet //_ 2007.06.19 //_ //_ based on: //_ simon for stk500 (in c) //_ by ^dx^/efnet //_ //_ device definitions .include "m8515def.inc" // ATMega8515, 8MHz (internal RC) //_ register definitions .def temp =r16 // general use .def temp2 =r17 .def temp3 =r18 .def buttons =r19 // button buffer .def random =r20 // random buffer .def level =r21 // game level counter //_ program constants .equ game_length =6 // game length, in number of levels .equ game_gap_time =20 // time between simon input and simon output modes * 0.01sec .equ led_flash_time =15 // simon blink on time * 0.01sec .equ led_dead_time =5 // off time between simon blinks * 0.01sec .equ led_winblink_time =5 // win blink halfcycle time * 0.01sec .equ led_loseblink_time =33 // lose blink halfcycle time * 0.01sec .equ led_start_pattern =$aa // stk500 LED splash patterns .equ led_wina_pattern =$aa // LED are active low .equ led_winb_pattern =$55 .equ led_losea_pattern =$fc .equ led_loseb_pattern =$ff .equ button_soft_reset =led_losea_pattern // soft reset button pattern (active low) .equ led_port =portb // led port definitions .equ led_ddr =ddrb .equ button_port =portd // button port definitions .equ button_ddr =ddrd .equ button_pin =pind .equ delaytime_10ms =10000 // compare value @ 8MHz,prescale=/8 (100KHz|10us) //_ sram allocation .dseg randtab: .byte game_length // random button/LED table .cseg //_ vector table .org $0 rjmp reset // poweron/reset reti reti reti reti reti reti reti reti reti reti reti reti reti reti reti reti //_ delay 100ms (timer1 based) delay_10ms: push temp // store temp register on stack clr temp // clear timer count reg out tcnt1h,temp // buffered 16bit register, WRITE HIGH BYTE FIRST out tcnt1l,temp in temp,tifr // reset ocf1a in timer flag register sbr temp,(1<