;-------------------------------------------------------------------------------------------
;       VsZeNeR'04       9/julio/04     
;Programa: Iluminacion de 8 Led's de izquierda a derecha
;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 izquierda a derecha                       
;-------------------------------------------------------------------------------------------
        org     $400            ;inicio del programa
*****VARIABLES*****************
tabla   dc.b    %10000000       ;Led 0 on: A0=$400 ->inicio de tabla
        dc.b    %01000000       ;Led 1 on: A0=$401
        dc.b    %00100000       ;Led 2 on: A0=$402
        dc.b    %00010000       ;Led 3 on: A0=$403
        dc.b    %00001000       ;Led 4 on: A0=$404
        dc.b    %00000100       ;Led 5 on: A0=$405
        dc.b    %00000010       ;Led 6 on: A0=$406
        dc.b    %00000001       ;Led 7 on: A0=$407 ->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     #$407,A0        ;¿fin de tabla?
        BLS     loop            ;no es fin de tabla ->ve a loop
        BRA     main            ;si es fin de tabla ->ve a main
*****RETARDO*******************
delay   move.l  #RET,D0         ;carga constante de retardo en registro D0
loop1   sub.l   #1,D0           ;D0=D0-1
        TST.l   D0              ;¿D0==0?
        BNE     loop1           ;no es igual a cero ->ve a loop1
        rts                     ;si es cero ->fin de subrutina
******************************        
        end     main            ;fin programa