.include 'M64DEF.INC'

.ORG 0x0000
JMP MAIN
.ORG 0x000A
JMP INT4_loop     ;  به جای اینتراپت 3 از 4 استفاده شده
.ORG 0x0010
JMP INT7_loop

-----------------------
.ORG 0X0050
MAIN:
LDI R16,low(RAMEND)
OUT SPL,R16
LDI R16,high(RAMEND)
OUT SPH,R16
LDI R16,0b01000001  ;  وقفه 4 و 7 در هر دو لبه
STS EICRB,R16
LDI R16 , 0b10010000 ;;  فعالسازی اینتراپت های لازم
OUT EIMSK,R16
LDI R16,0xFF
OUT DDRD,R16
CLR R31  ; شمارنده
CLR R20  ; فلگ اینتراپت 4
CLR R21    ; فلگ اینتراپت 7
SEI

----------------------
MAIN_loop:
LDI R26,0x00
LDI R27,0x25 ; SET X = 2500

loop:
CLR R18 ; برای شماردن تعداد 1
LDI R19 , 8
LDS R16,X
MOV R17,R16

count1:
LSR R17
BRCC check_end
INC R18
check_end:
DEC R19
BRE0 continue
JMP count1

continue:
LSR R18
BRCC even1
LSL R16   ; *2
JMP end_loop

even1:
LSL R16  ; *2
LSL R16  ; *2
LSL R16  ; *2

end_loop:
STS X+,R16
CPI R27,0x40
BREQ MAIN_loop      ; رسیدیم به 4000
JMP LOOP              ;         نرسیدیم به 4000


-----------------------
INT7_loop:
push R17
IN R17,SREG
push R17
CPI R21,0
BRNE show_num
INC R31
INC R21
JMP IN7_end

show_num:     ;فرض شده 1 به معنی روشن شدن است 
OUT PORTD,R31
DEC R20

INT7_end:
pop R17
OUT SREG,R17
pop R17
RETI

-------------------------
INT4_loop:
push R17
IN R17,SREG
push R17
CLR R17
CPI R20,0
BRNE reset_counter
OUT PORTD,R17
INC R20
JMP INT4_end

reset_counter: 
OUT PORTD,R17
CLR R31
DEC R20

INT4_end:
pop R17
OUT SREG,R17
pop R17
RETI

-------------------------
