prog START 0
          . inicializiraj sklad
          JSUB stackinit
          . beri stevke do newline (\n = 10), nato evalviraj stevilo
          LDX #1    . zacnemo z 1 za lazje preverjanje pogoja v loop_e
loop      RD device . FA.dev
          COMP #10  . newline
          JEQ evaluate
          SUB #48   . ASCII koda za 0  
          +STCH stevke, X    
          TIX #-1   . primerjava TIX tu nima pomena
          J loop
evaluate  . T zacasno hrani rezultat; na koncu v A
          LDT #0
          . S hrani potence st. deset
          LDS #1
          . zmanjsaj X za 1
          RMO X, A
          SUB #1
          RMO A, X
          . nalozi stevko, pomnozi s S, shrani oz. pristej rez. v T
loop_e    LDCH stevke, X
          MULR S, A
          ADDR A, T
          . povecaj potenco
          RMO S, A
          MUL #10
          RMO A, S
          . zmanjsaj X
          RMO X, A
          SUB #1
          RMO A, X  
          . ce je X = 0, si prebral vse stevke
          COMP #0
          JGT loop_e
          . ce je rezultat nic koncaj sicer izracunaj fakulteto in preberi naslednjo vrstico
          RMO T, A
          COMP #0
          JEQ HALT
          JSUB fakulteta_r     
          . izpisi rezultat na standard output
          CLEAR S
          JSUB izpis
          CLEAR A
          J prog
HALT J HALT
    END prog

izpis      LDX #1
loop_i     RMO A, S . kopiraj stevilo v S
           . pridobi stevko, z mod 10
           DIV #10
           MUL #10
           RMO A, T . odstevanec gre v T
           RMO S, A
           SUBR T, A 
           STCH stevke_r, X
           TIX #-1 . primerjava nima pomena
           RMO S, A
           DIV #10
           COMP #0
           JGT loop_i
           . izpis iz pomnilnika
           RMO X, A
           SUB #1
           RMO A, X
loop_ii    LDCH stevke_r, X
           ADD #48 . pretvori v ascii
           WD #1
           RMO X, A
           SUB #1
           RMO A, X
           COMP #0
           JGT loop_ii
           . izpis newline
           LDA #10
           WD #1
           RSUB

fakulteta_r +STL @stackptr . link reg. na sklad
            JSUB stackpush
            +STA @stackptr . parameter na sklad
            JSUB stackpush
            
            COMP #1  . robni primer n = 1
            JEQ exit
            SUB  #1  . pripravimo podproblem
            COMP #1  . zaustavitveni pogoj
            JEQ exit . ce je z. p. izpolnjen RSUB, v A je vrednost podproblema
            JSUB fakulteta_r
        
exit        RMO A, B . premakni vrednost podroblema v B
            JSUB stackpop
            +LDA @stackptr . nalozi parameter klicujoce funkcije ("starša")
            MULR B, A . pomnozi, shrani v A
            JSUB stackpop 
            +LDL @stackptr
            RSUB

stackinit   STA oldvalue
            CLEAR A
            LDA #stack
            STA stackptr
            CLEAR A
            LDA oldvalue
            RSUB

stackpush   STA oldvalue
            CLEAR A
            LDA stackptr
            ADD #3
            STA stackptr
            CLEAR A
            LDA oldvalue
            RSUB

stackpop    STA oldvalue
            CLEAR A
            LDA stackptr
            SUB #3
            STA stackptr
            CLEAR A
            LDA oldvalue
            RSUB

temp WORD 0 
device BYTE X'FA'
stevke BYTE 100
stevke_r BYTE 100

oldvalue WORD 0 
stackptr WORD 0 
stack RESW 1000
