Advertisement
SMicro

Lectura de teclado con buffer y sin espera

May 27th, 2015
723
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. *-----------------------------------------------------------
  2. * Title      :Lectura de teclado en buffer reseteable de 3 posiciones
  3. * Written by :Fulgencio
  4. * Date       :05/2015
  5. * Description:Subrutina de lectura de teclado con almacenamiento de caracteres
  6. *             recibidos en un buffer de 3 posiciones reseteable y presentación
  7. *             dinámica en pantalla gráfica del contenido del mismo
  8. *-----------------------------------------------------------
  9.     ORG    $1000
  10. XTEC        EQU 580
  11. YTEC        EQU 460    
  12. ENTER       EQU $0D
  13.  
  14. START:                  ; first instruction of program
  15.             MOVE.L #RECTEC,A3 *Reservamos A3 para el control de buffer de teclado
  16.             MOVE.L #12,D0
  17.             MOVE.L #0,D1  *Eco off
  18.             TRAP #15
  19. BUCLE
  20.             JSR TECLADO
  21.             JMP BUCLE
  22.            
  23.             SIMHALT             ; halt simulator        
  24.  
  25. TECLADO  ************Comprueba si hay alguna tecla y si está dentro del
  26.                     *rango permitido, la introduce en el buffer RECTEC
  27.                     *El buffer se vacía cada vez que se introducen 3
  28.                     *caracteres o cuando se pulsa la tecla ENTER  
  29.             MOVE.L #7,D0
  30.             TRAP #15    *¿Hay tecla pendiente?
  31.             TST D1
  32.             BEQ NOTECLA
  33.            
  34.             MOVE.L #5,D0
  35.             TRAP #15    *Lee tecla que se almacena en D1
  36.            
  37.             CMP.L #RECTEC+3,A3 *¿Final del buffer?
  38.             BNE NOBORRA  *Si no ha llegado al final del buffer no hay que borrar
  39.             JSR BORRATEC *Borramos si el buffer estaba lleno para dejar sitio
  40. NOBORRA            
  41.             CMP.B #ENTER,D1 *¿Es ENTER?
  42.             BNE NOENTER
  43.             JSR BORRATEC  *Si es ENTER borramos el buffer como esté
  44.             JMP NOTECLA   *y regresamos
  45.            
  46. NOENTER     *************Restricción a cifras numéricas
  47.             CMP.B #'0',D1
  48.             BCS NOTECLA   *Rechaza <'0'
  49.             CMP.B #'9',D1
  50.             BHI NOTECLA   *Rechaza >'9'
  51.             *************Se puede sustituir por otras restricciones
  52.  
  53.             MOVE.B D1,(A3)+ *Introduce caracter aceptado en el buffer
  54.             JSR PINTA                      
  55.            
  56. NOTECLA     RTS
  57.  
  58. PINTA       MOVEM.L D0-D2/A1,-(A7)
  59.  
  60.             MOVE.L #95,D0   *Saca el texto almacenado por pantalla
  61.             MOVE.L #XTEC,D1 *en una coordenada fija
  62.             MOVE.L #YTEC,D2
  63.             MOVE.L #RECTEC,A1
  64.             TRAP #15
  65.            
  66.             MOVEM.L (A7)+,D0-D2/A1
  67.             RTS
  68.            
  69. BORRATEC    *Borra el buffer de memoria y el texto en pantalla
  70.             MOVEM.L D0-D2/A1,-(A7)
  71.  
  72.             MOVE.L #95,D0
  73.             MOVE.L #XTEC,D1
  74.             MOVE.L #YTEC,D2
  75.             MOVE.L #VACIOS,A1 *Borra el texto de pantalla
  76.             TRAP #15
  77.            
  78.             CLR.L RECTEC      *Vaciamos buffer de memoria como .L (más rápido)
  79.             MOVE.L #RECTEC,A3 *Reiniciamos puntero al inicio
  80.            
  81.             MOVEM.L (A7)+,D0-D2/A1
  82.             RTS
  83.  
  84.  
  85. * Put variables and constants here
  86.             ORG $5000
  87.  
  88. RECTEC DC.B 0,0,0,0  *buffer 3 car+\0 inicialmente vacío, todo a \0
  89. VACIOS DC.B '     ',0
  90.  
  91.     END    START        ; last line of source
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement