;**********************************
;* Zadatak 1 - 2. kz. 28.05.2002. *
;**********************************
MOTOR   `EQU    0FFFF1000
MOTORSR `EQU    0FFFF1001
CTLR    `EQU    0FFFF2000
CTCR    `EQU    0FFFF2001
CTIACK  `EQU    0FFFF2002
CTIEND  `EQU    0FFFF2003

        `ORG    0
        LOADL   R7, 10000       ;inicijalizacija stoga
        LOADL   R0, %D 50000    ;vremenska konstanta
        STORE   R0, (CTLR)      ;ucitaj konstantu u LR
        LOADL   R0, %B 11       ;brojilo broji i postavlja prekid
        STORE   R0, (CTCR)      ;slanje kontrolne rijeci
        JR      MAIN
        
        `ORG    6
        `DW     100             ;adresa prekidnog programa

MAIN    WRST    %B 10010000     ;GIE=1, EINT=1
        CLEAR   R1              ;broj okretaja
LOOP    LOADcc  R0, (MOTORSR)   ;da li smo spremni
        JR_Z    LOOP            ;cekaj u petlji
        INC     R1              ;povecaj brojac
        STORE   R0, (MOTORSR)   ;obrisi spremnost
        JR      LOOP

END     LOADL   R0, 1           ;vrijednost za alarm
        STORE   R0, (ALARM)     ;ukljuci alarm

        HALT

        `ORG    50
ALARM   `DS     1

;****************************************
;* Potprogram za provjeru brzine vrtnje *
;****************************************
        `ORG    100
        STORE   R0, (CTIACK)    ;potvrdi prihvat prekida
        
        PUSH    R0              ;pospremi kontekst
        RDST    R0
        PUSH    R0

        CMP     %D 50, R1       ;provjeri koliko puta se motor okrenuo
        JR_N    END             ;dosegli smo kritican broj okretaja - ALARM
        
        CLEAR   R1              ;jos nije kriticno, obrisi R1 i broji ponovo

        POP     R0              ;obnovi kontekst
        WRST    R0
        POP     R0
        
        STORE   R0, (CTIEND)    ;oznaci kraj obrade prekida
        
        RETI

        `END