;-------------------------------------------------------------------------------------------
;       VsZeNeR'04       9/julio/04     
;Programa: Iluminacion de 8 Led's de derecha a izquierda y viceversa
;Simulador MC68000: IDE68K(vs1.35)    
;
;Entrada:       TABLA: Contiene el led que debe encenderse
;               D0:    Registro almacena la constante de retardo
;               A0:    Direccion que apunta a la tabla
;               RET:   Constante interna del programa cuya funcion es suministrar el retardo 
;
;Notas:     Subrutina delay: Se le introduce un retardo para que se vea el desplazamiento 
;                            de los led's        
;
;Resumen:   Programa que enciende led de derecha a izquierda viceversa(Coche fantastico)                       
;-------------------------------------------------------------------------------------------
        org     $400            ;inicio del programa   
******VARIABLES****************
TABLA   dc.b    %00000001       ;Led 0 on: A0=$400 ->inicio de tabla         
        dc.b    %00000010       ;Led 1 on: A0=$401 
        dc.b    %00000100       ;Led 2 on: A0=$402 
        dc.b    %00001000       ;Led 3 on: A0=$403 
        dc.b    %00010000       ;Led 4 on: A0=$404 
        dc.b    %00100000       ;Led 5 on: A0=$405 
        dc.b    %01000000       ;Led 6 on: A0=$406 
        dc.b    %10000000       ;Led 7 on: A0=$407 ->fin de tabla 
RET     equ     $FFFFF          ;constante de retardo 
******PROGRAMA*****************        
main    lea     TABLA,A0        ;carga direccion de la tabla en A0
loop    move.b  (A0)+,$E003     ;carga e ilumina el LED'S correspondiente e incrementa direccion A0
        bsr     delay           ;salta a subrutina delay
        CMP     #$407,A0        ;żes el final de la tabla?
        BLS     loop            ;no es el final ->ve a loop
*******FIN DE TABLA************ ;ilumina led's de izquierda a derecha
lop1    move.b  -(A0),$E003     ;decrementa direccion A0 y carga e ilumina el correspondiente LED'S
        bsr     delay           ;salta a subrutina delay
        CMP     #$400,A0        ;żes el principio de la tabla?
        BHI     lop1            ;no es el principio ->ve a lop1
        BRA     loop            ;si es el principio ->ve a loop
*******RETARDO*****************
delay   move.l  #RET,D0         ;carga la constante de retardo en registro D0
lop2    sub.l   #1,D0           ;D0=D0-1
        TST.l   D0              ;żD0==0?
        BNE     lop2            ;no es igual a cero ->ve a lop2
        rts                     ;si es igual a cero ->fin de subrutina
*******************************
        end     main


        