Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ASSUME CS:code, DS:data, SS:pile
- pile SEGMENT STACK USE 16
- DB 1024 DUP(?)
- pile ENDS
- data SEGMENT USE 16
- pa DW 7800h
- pb DW 7801h
- pc DW 7802h
- cw DW 7803h
- chaine DB "Hello",13,3
- ; etx sert a la sortie de la feuille
- etx DB 3
- data ENDS
- code SEGMENT USE16
- ; Fonction vérifiant si il y a du papier et si l'imprimante n'est pas occupée
- bcl_paper_busy:
- ; Recupération du signal en entrée (busy et paper)
- MOV DX,pc
- IN AL,DX
- ; Isole le signal paper et busy et boucle si au moins un des deux vaut 1
- TEST AL,01100000b
- JNZ bcl_papier_busy
- ; Si papier présent et imprimante pas occupée, retour
- RET
- ; Fonction envoyant à l'imprimante le code ascii situé dans AL
- fct_envoi_char:
- ; DX contient l'adresse de PA, port de sortie de la donnée
- MOV DX, pa
- ; sortie de la donnée sur PA
- OUT DX,AL
- ; Met le strobe à zéro, indique que des données sont présentes
- MOV DX,pc
- OUT DX,0
- ; boucle d'attente pour s'assurer que l'imprimante recoive bien le signal
- MOV CX,1024
- loop_sleep:
- LOOP loop_sleep
- ; Envoi de 1 sur le strobe, plus de données à lire.
- OUT DX,4
- ; Retour après l'appel
- RET
- main:
- MOV AX,data
- MOV DS,AX
- ; Sortie du control word
- MOV DX,cw
- OUT DX,88h
- ;Met le strobe a 1, aucune donnée à lire
- MOV DX,pc
- OUT DX,4
- ; DI pointera vers chaque caractère de la chaine
- MOV DI, chaine
- envoi_chaine:
- ;Saut à la fonction de vérification des indicateurs
- CALL bcl_paper_busy
- ; Mise du caractere dans AL
- MOV AL,[DI]
- ; Appelle la fonction d'envoi de la valeur ASCII contenue dans AL
- CALL fct_envoi_char
- ; DI pointe vers le caractère suivant
- INC DI
- ; Si le caractère n'est pas le Carriage Return, on boucle sur l'envoi_chaine
- ; Sinon, passage à l'impression
- CMP AL,13
- JNE envoi_chaine
- ; IMPRESSION
- ; appel à la "fonction" de vérification du busy et paper
- CALL bcl_paper_busy
- ; Met le signal d'impression dans AL et l'envoi à l'imprimante
- MOV AL,etx
- CALL fct_envoi_char
- ; FIN
- MOV AH,4Ch
- INT 21h
- code ENDS
- end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement