;-------------------------------------------------------------------------------------------
;       VsZeNeR'04       9/julio/04     
;Programa: Iluminacion de 8 Led's de los extremos de fuera hacia dentro 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 fuera a dentro y viceversa                       
;-------------------------------------------------------------------------------------------
        org     $400            ;inicio del programa
*****VARIABLES*****************
TABLA   dc.b    %10000001       ;Led's 7y0 on: A0=$400 ->inicio de tabla
        dc.b    %01000010       ;Led's 6y1 on: A0=$401
        dc.b    %00100100       ;Led's 5y2 on: A0=$402
        dc.b    %00011000       ;Led's 4y3 on: A0=$403 ->fin de tabla
RET     equ     $FFFFF          ;constante de retardo
*****PROGRAMA******************
main    lea     TABLA,A0        ;carga direccion de tabla en A0
loop    move.b  (A0)+,$E003     ;carga e ilumina led correspondiente e incrementa direccion de A0
        BSR     delay           ;salta a subrutina delay
        CMP     #$403,A0        ;¿fin de tabla?
        BLS     loop            ;no es fin de tabla ->ve a loop
*****FIN TABLA***************** ;mueve los led's en sentido contrario
lop1    move.b  -(A0),$E003     ;decrementa direccion de A0 y carga e ilumina led correspondiente
        BSR     delay           ;salto a subrutina delay
        CMP     #$400,A0        ;¿principio de tabla?
        BHI     lop1            ;no es principio tabla ->ve a lop1
        BRA     loop            ;si es principio tabla ->ve a loop
*****RETARDO*******************
delay   move.l  #RET,D0         ;carga constante de retardo en D0
loop2   sub.l   #1,D0           ;D0=D0-1
        TST.l   D0              ;¿D0==0?
        BNE     loop2           ;no es igual a cero ->ve a loop2
        rts                     ;si es cero ->fin subrutina
*******************************
        end     main            ;fin programa 