home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / screen / hercules / scr_on.asm < prev    next >
Assembly Source File  |  1991-09-11  |  4KB  |  126 lines

  1. ;
  2. ;Programm schaltet den Bildschirm wieder an
  3. ;(für Hercules-Bildschirmadapter)
  4. ;in die CONFIG.SYS einbinden mit DEVICE=SCR_ON.SYS
  5. ;
  6. ;übersetzen mit tasm    scr_on.asm
  7. ;               tlink   scr_on
  8. ;               exe2bin scr_on.exe scr_on.sys
  9. ;
  10. ;Grundlagen siehe Artikel "Dunkelmacher" in CT 6/87 S. 74
  11. ;Struktur des SYS-Treibers aus CT 3/90 S. 346
  12. ;
  13. ;letzte Änderung am 11.09.91 B. Rosenau
  14.  
  15. .286 ; 286-er Befehlssatz einschalten
  16.  
  17.   code    segment public 'ATCODE'
  18.   atdrive proc    far
  19.           assume  cs:code,ds:code,es:code
  20.           org   0
  21.   header  dd    -1          ;Verbindung zum nächsten
  22.                             ;Treiber = Ende der Liste
  23.           dw    8000h       ;Geräte-Attribut-Wort
  24.           dw    strat       ;Eintrittspunkt für
  25.                             ;Strategie-Routine
  26.           dw    intr        ;Eintrittspunkt für
  27.                             ;Interruptroutine
  28.           db    'SCR_ON'  ;Gerätetreiber-Name
  29.  
  30. ;
  31. ; Doppelwort-Pointer zum Anforderungskopf
  32. ;
  33. rh_ptr    dd   ?            ;Pointer zum Anforderungskopf
  34. ;
  35. ;Tabelle für nicht-standardgemäße Drive-Parameter
  36. ;
  37. ;Strategie-Routine des Gerätetreibers
  38. ;
  39. strat     proc  far         ;Adresse des Anforderungskopfes
  40.                             ;sichern
  41.           mov   word ptr cs:[rh_ptr],bx
  42.           mov   word ptr cs:[rh_ptr+2],es
  43.           ret
  44. strat     endp
  45. ;
  46. ;Interrupt-Routine des Gerätetreibers
  47. ;
  48. intr      proc  far
  49.           push  ax           ;Sichern der allgemeinen Register
  50.           push  bx
  51.           push  dx
  52.           push  ds
  53.           push  es
  54.           push  di
  55.           push  cs           ;Lokale Daten addressierbar machen
  56.           pop   ds
  57.           les   di,[rh_ptr]  ;ES:DI jetzt = Anforderungskopf
  58.           mov   bl,es:[di+2] ;setze bx = Befehlscode
  59.           xor   bh,bh
  60.           cmp   bx,0         ;Initialisierungsbefehl ?
  61.           je    init_st
  62.           mov   ax,8003h     ;Nein --> Fehler
  63.           je    init_ed
  64.   init_st:
  65.           call  init
  66.           les di,[rh_ptr] ;Anforderungskopf nach ES:DI wiederherstellen
  67.   init_ed:
  68.           or    ax,0100h  ;Flag im Statuswort auf "erledigt"
  69.                           ;setzen
  70.           mov   es:[di+3],ax
  71.           pop   di
  72.           pop   es
  73.           pop   ds
  74.           pop   dx
  75.           pop   bx
  76.           pop   ax
  77.           ret             ;zurück zu DOS
  78.  
  79. ;
  80. ;Initialisierungsroutine
  81. ;
  82. init      proc  near
  83.           push  es         ;Adresse des Anforderungskopfes
  84.                            ;sichern
  85.           push  di
  86.           xor   ax,ax      ;ES auf niedrigsten Speicherbereich
  87.                            ;setzen
  88.           mov   es,ax
  89.           mov   di,1Ch     ;Int-Nummer nach DI
  90.           shl   di,1       ;Multiplikation mit 4
  91.           shl   di,1
  92.  
  93. ;--------------------------------------------------------------------------
  94. ; Bildschirm wieder anschalten
  95.  
  96.           pusha       ;erst Bildschirm löschen
  97.           mov  ah,0h
  98.           mov  al,2
  99.           int  10h
  100.           popa
  101.  
  102.           push ax     ;dann Bildschirm wieder anschalten
  103.           push dx
  104.           mov  dx,3B8h
  105.           mov  al,8h
  106.           out  dx,al
  107.           pop  ax
  108.           pop  dx
  109.  
  110. ;--------------------------------------------------------------------------
  111.  
  112.           pop   di         ;Adresse des Anführungskopfes
  113.                            ;wiederherstellen
  114.           pop   es
  115.                            ;erste freizugebende Speicherstelle
  116.                            ;angeben
  117.           mov   word ptr es:[di+14],offset init
  118.           mov   word ptr es:[di+16],cs
  119.           xor   ax,ax      ;Rückkehrstatus setzen
  120.           ret
  121. init      endp
  122. intr      endp
  123. atdrive   endp
  124. code      ends
  125.           end
  126.