;-------------------------------------------------------------------------------------------
;       VsZeNeR'04       14/julio/04     
;Programa: Desplazamiento led's de derecha a izquierda y viceversa sin tabla(coche fantastico)
;Simulador MC68000: IDE68K(vs1.35)    
;
;Entrada:       D0:    Registro encargado almacenar led encendido
;               D1:    Registro encargado almacenar constante de retardo
;               RET:   Constante interna del programa cuya funcion es suministrar el retardo
;
;Notas:     Subrutina delay: Genera un retardo para poder visualizar los led's 
;                                    
;
;Resumen:   Programa que enciende 7 led's de derecha a izquierda y viceversa sin tabla                       
;-------------------------------------------------------------------------------------------
        org     $400            ;inicio programa
*****VARIABLES*****************
RET     equ     $FFFFF          ;constante de retardo
*******************************
main    move.b  #%00000001,D0   ;cargo primer led se va encender en registro D0  
loop    move.b  D0,$E003        ;enciende led correspondiente 
        BSR     delay           ;ve a subrutina delay  
        asl     #1,D0           ;desplazamiento hacia izquierda del bit 1(led on) 
        CMP     #$100,D0        ;żes el led 7 on? fin de led's $100=000100000000 fin led's  
        BEQ     izqu            ;si es led 7 ->ve a izqu  
        BNE     loop            ;no es led 7 ->ve a loop
*****IZQU->DERECHA*************
izqu    asr     #1,D0           ;desplazamiento hacia derecha del bit 1(led on)
        move.b  D0,$E003        ;enciende led correspondiente
        BSR     delay           ;ve a subrutina delay
        CMP     #$1,D0          ;żes el led 1 on? principio de led's $1=00000001
        BEQ     loop            ;si es led 1 ->ve a loop
        BNE     izqu            ;no es led 1 ->ve a izqu
*****SUBRUTINA DELAY***********
delay   move.l  #RET,D1         ;D1=RET
loop1   sub.l   #1,D1           ;D1=D1-1
        TST.l   D1              ;żD1==0?
        BNE     loop1           ;no es cero ->ve aloop1
        rts                     ;si es cero ->fin de subrutina
*******************************  
        end     main            ;fin programa  

   