home *** CD-ROM | disk | FTP | other *** search
/ Groovy Bytes: Behind the Moon / groovybytes.iso / GROOVY / SND_TOOL / CRYS250.ZIP / STMODE3.ASM < prev   
Encoding:
Assembly Source File  |  1994-06-29  |  2.4 KB  |  157 lines

  1. ;*************************************************************************
  2. ;*    Quelques routines graphiques pour travailler en mode texte  80*25
  3. ;*     en 16 couleurs
  4. ;* Programmé par Sébastien Granjoux
  5. ;* Commencé le 26/12/93
  6. ;* Dernière modification le 26/12/93
  7.  
  8. IDEAL
  9.  
  10. P386N
  11. MODEL    SMALL
  12.  
  13. PUBLIC    setmode
  14. PUBLIC    resetmode
  15. PUBLIC    puttxt
  16. PUBLIC    putbar
  17.  
  18. VIDEO_MOD    EQU    3
  19. LEN_LINE    EQU    160
  20. VIDEO_SEG    EQU    0b800h
  21.  
  22. DATASEG
  23.  
  24. Oldmode    DB ?
  25.  
  26.  
  27. CODESEG
  28.  
  29. ;*************************************************************************
  30. ;*    Initialise le mode texte
  31. ;*    ES contient le segment vidéo du mode graphique 3
  32.  
  33. PROC    setmode
  34.  
  35.     mov     ah,0fh          ; sauve l'ancien mode
  36.     int     10h
  37.     mov     [byte ptr ds:OFFSET Oldmode],al
  38.  
  39.     mov     ax,VIDEO_MOD      ; passe en mode 3
  40.     int     10h
  41.  
  42.     mov    ax,VIDEO_SEG
  43.         mov    es,ax
  44.  
  45.     mov    dx,3d4h
  46.     mov    ax,1f0ah
  47.     out    dx,ax
  48.  
  49.     ret
  50.  
  51. ENDP
  52.  
  53. ;***************************************************************************
  54. ;*      Reprend le mode avant le dernier setmode
  55.  
  56. PROC    resetmode
  57.  
  58.     xor     ah,ah
  59.     mov     al,[byte ptr ds:OFFSET Oldmode]
  60.     int     10h
  61.  
  62.     ret
  63.  
  64. ENDP
  65.  
  66. ;*************************************************************************
  67. ;*    Affiche à l'écran une chaine de caractère avec l'attribut spécifié
  68. ;*
  69. ;* Entrée:
  70. ;*    DL    coordonné X du début de la chaine
  71. ;*    DH    coordonné Y du début de la chaine
  72. ;*    DS:SI    adresse de la chaine
  73. ;*    ES    segment video de la mémoire écran
  74. ;*    AH    attribut de la chaine
  75.  
  76. PROC    puttxt
  77.  
  78.     xor    edi,edi
  79.     mov    di,dx
  80.     shr    di,8
  81.     lea    di,[edi*4+edi]
  82.     shl    di,4
  83.     and    dx,00ffh
  84.     add    di,dx
  85.     shl    di,1
  86.  
  87.     lodsb
  88. @@next_char:
  89.     stosw
  90.     lodsb
  91.     or    al,al
  92.     jne    @@next_char
  93.  
  94.     ret
  95.  
  96. ENDP
  97.  
  98. ;*************************************************************************
  99. ;*    Affiche une ligne horizontal avec le caractère AL de longueur CL
  100. ;*    en dl,dh
  101. ;*
  102. ;* Entrée:
  103. ;*    AL    caractère à afficher
  104. ;*    CH    longueur de la ligne
  105. ;*    DL    coordonnée x du début
  106. ;*    DH    coordonnée y du début
  107.  
  108. PROC    putbar
  109.  
  110.     xor    edi,edi
  111.     mov    di,dx
  112.     shr    di,8
  113.     lea    di,[edi*4+edi]
  114.     shl    di,4
  115.     and    dx,00ffh
  116.     add    di,dx
  117.     shl    di,1
  118.  
  119.     mov    ah,0ah
  120.  
  121.     mov    cl,10
  122. @@next_char:
  123.     dec    ch
  124.     jns    @@ok
  125.     mov    al,' '
  126. @@ok:
  127.     stosw
  128.     dec    cl
  129.     jne    @@next_char
  130.  
  131.     mov    ah,14
  132.     mov    cl,4
  133. @@next_char2:
  134.     dec    ch
  135.     jns    @@ok2
  136.     mov    al,' '
  137. @@ok2:
  138.     stosw
  139.     dec    cl
  140.     jne    @@next_char2
  141.  
  142.     mov    ah,12
  143.     mov    cl,2
  144. @@next_char3:
  145.     dec    ch
  146.     jns    @@ok3
  147.     mov    al,' '
  148. @@ok3:
  149.     stosw
  150.     dec    cl
  151.     jne    @@next_char3
  152.  
  153.     ret
  154.  
  155. ENDP
  156.  
  157. END