Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ASSUME CS:code, DS:data, SS:pile
  2.  
  3. pile SEGMENT STACK USE 16
  4.     DB 1024 DUP(?)
  5. pile ENDS
  6.  
  7. data SEGMENT USE 16
  8.     pa DW 7800h
  9.     pb DW 7801h
  10.     pc DW 7802h
  11.     cw DW 7803h
  12.     chaine DB "Hello",13,3
  13.     ; etx sert a la sortie de la feuille
  14.     etx DB 3
  15. data ENDS
  16.  
  17. code SEGMENT USE16
  18.  
  19. ; Fonction vérifiant si il y a du papier et si l'imprimante n'est pas occupée
  20. bcl_paper_busy:
  21.     ; Recupération du signal en entrée (busy et paper)
  22.     MOV DX,pc
  23.     IN AL,DX
  24.  
  25.     ; Isole le signal paper et busy et boucle si au moins un des deux vaut 1
  26.     TEST AL,01100000b
  27.     JNZ bcl_papier_busy
  28.     ; Si papier présent et imprimante pas occupée, retour
  29.     RET
  30.  
  31. ; Fonction envoyant à l'imprimante le code ascii situé dans AL
  32. fct_envoi_char:
  33.     ; DX contient l'adresse de PA, port de sortie de la donnée
  34.     MOV DX, pa
  35.  
  36.     ; sortie de la donnée sur PA
  37.     OUT DX,AL
  38.  
  39.     ; Met le strobe à zéro, indique que des données sont présentes
  40.     MOV DX,pc
  41.     OUT DX,0
  42.    
  43.     ; boucle d'attente pour s'assurer que l'imprimante recoive bien le signal
  44.     MOV CX,1024
  45. loop_sleep:
  46.     LOOP loop_sleep
  47.    
  48.     ; Envoi de 1 sur le strobe, plus de données à lire.
  49.     OUT DX,4
  50.    
  51.     ; Retour après l'appel
  52.     RET
  53.  
  54. main:
  55.     MOV AX,data
  56.     MOV DS,AX
  57.  
  58.     ; Sortie du control word
  59.     MOV DX,cw
  60.     OUT DX,88h
  61.  
  62.     ;Met le strobe a 1, aucune donnée à lire
  63.     MOV DX,pc
  64.     OUT DX,4
  65.  
  66.     ; DI pointera vers chaque caractère de la chaine
  67.     MOV DI, chaine
  68.  
  69. envoi_chaine:
  70.     ;Saut à la fonction de vérification des indicateurs
  71.     CALL bcl_paper_busy
  72.  
  73.     ; Mise du caractere dans AL
  74.     MOV AL,[DI]
  75.  
  76.     ; Appelle la fonction d'envoi de la valeur ASCII contenue dans AL
  77.     CALL fct_envoi_char
  78.    
  79.     ; DI pointe vers le caractère suivant
  80.     INC DI
  81.  
  82.     ; Si le caractère n'est pas le Carriage Return, on boucle sur l'envoi_chaine
  83.     ; Sinon, passage à l'impression
  84.     CMP AL,13
  85.     JNE envoi_chaine
  86.    
  87. ; IMPRESSION
  88.     ; appel à la "fonction" de vérification du busy et paper
  89.     CALL bcl_paper_busy
  90.  
  91.     ; Met le signal d'impression dans AL et l'envoi à l'imprimante
  92.     MOV AL,etx
  93.     CALL fct_envoi_char
  94.  
  95. ; FIN
  96.     MOV AH,4Ch
  97.     INT 21h
  98.  
  99. code ENDS
  100. end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement