home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 01 / praxis / togscn.asm < prev    next >
Encoding:
Assembly Source File  |  1988-09-01  |  5.1 KB  |  129 lines

  1. ; ---------------------------------------------------------
  2. ; Programm : TOGSCR.ASM
  3. ; Aufgabe  : Dunkelschalten des Monitors der Hercules-Karte
  4. ;            mit einem Tastendruck, danach umschalten
  5. ;            zwischen Text- und Grafik-Modus
  6. ; Autor    : Christian Diederichsen
  7. ; Assembler: MASM 4.0
  8. ; ---------------------------------------------------------
  9.  
  10. IntNr      equ  5   ; Interrupt "Print Screen" (PC,XT,AT),
  11.  
  12. CSEG       segment 'code'
  13.            assume  cs:CSEG,ds:CSEG
  14.  
  15.            org     100H
  16.  
  17. ; ---------------------------------------------------------
  18. ; Beginn des residenten Teils
  19. ; ---------------------------------------------------------
  20. TogScreen: jmp     INSTAL        ; zum Installieren springen
  21.  
  22. ; ---------------------------------------------------------
  23. ;  Hierher fuehrt der neue Einsprung beim Interrupt IntNr
  24. ; ---------------------------------------------------------
  25. NeuVek:    nop
  26. if IntNr   eq 5H
  27.            cmp     ax,8500H     ;<Shift>+<PrtScn> gedrueckt?
  28.            jne     AltJmp       ;wenn nicht, normal weiter
  29. endif
  30.            push    ax           ;Register sichern
  31.            push    bx
  32.            push    cx
  33.            push    dx
  34.            push    ds
  35.  
  36.            mov     dx,03B8H     ;Hercules mode select port
  37.            cmp     SCREEN,00h
  38.            je      MONOUT       ;ist an, wird ausgeschaltet
  39.  
  40. MONON:     cmp     SCREEN,01h   ;Monitor ist aus,
  41.                                 ;Videosignal anschalten
  42.            je      MONText      ;ist an, in den Textmodus
  43.                                 ;schalten
  44. MONGraph:  mov     SCREEN,00h   ;toggle screen status
  45.            mov     bx,offset GTable   ;hier stehen die Werte
  46.            call    hgcinit      ;Controller programmieren
  47.            mov     al,001010B   ;Video enable, Grafikmodus
  48.            out     dx,al
  49.            jmp     WEITER
  50.  
  51. MONText:   mov     SCREEN,02h   ;toggle screen status
  52.            mov     bx,offset TTable   ;hier stehen die Werte
  53.            call    hgcinit      ;Controller programmieren
  54.            mov     al,101000B   ;Video enable, Textmodus
  55.            out     dx,al
  56.            jmp     WEITER
  57.  
  58. MONOUT:    mov     SCREEN,01h   ;toggle screen status
  59.            mov     al,100000B   ;Videosignal, Textmodus
  60.            out     dx,al
  61.  
  62. WEITER:                         ;fertig
  63.            pop     ds           ;Register wiederherstellen
  64.            pop     dx
  65.            pop     cx
  66.            pop     bx
  67.            pop     ax
  68.  
  69. AltJmp:    db      0EAH        ;jmp far
  70.            dw      ?,?         ;hier traegt INSTAL das
  71.                                ;Sprungziel ein
  72. hgcinit:                       ;6845 programmieren
  73.            mov     dx,3B4H     ;Indexregisterport des 6845
  74.            mov     cx,12       ;12 Register im ganzen
  75.            xor     al,al       ;es beginnt bei Register 0
  76. M0:        mov     ah,cs:[bx]  ;Registerwert aus der Tabelle
  77.            out     dx,ax       ;AL=Index, AH=Registerwert
  78.            inc     bx          ;Tabellenadressierung weiter
  79.            inc     al          ;naechstes Register
  80.            loop    M0
  81.            mov     dx,03B8H    ;Hercules mode select port
  82.            ret                 ;Ende hgcinit
  83.  
  84. SCREEN     db      01h         ;ist an und im Textmode
  85. TTable     db 61H,50H,52H,0FH,19H,06H,19H,19H,02H,0DH
  86.            db 0BH,0CH
  87. GTable     db 35H,2dH,2eH,07H,5bH,02H,57H,57H,02H,03H
  88.            db 00H,00H
  89.  
  90. ; ---------------------------------------------------------
  91. ;  Ende des residenten Teils
  92. ; ---------------------------------------------------------
  93. INSTAL:    mov     ax,cs           ;Segmentadressierung
  94.            mov     ds,ax           ;Segment in ds
  95.            mov     dx,offset Text1 ;Offset des Textes in dx
  96.            mov     ah,9
  97.            int     21H             ;String ausgeben
  98.                                    ;Alten Vektor holen und
  99.                                    ;speichern
  100.            mov     ax,3500H or IntNr     ;Get Vector IntNr
  101.            int     21H
  102.            mov     word ptr AltJmp+1,bx  ;speichere Offset
  103.            mov     ax,es
  104.            mov     word ptr AltJmp+3,ax  ;speichere Segment
  105.                                    ;Ueberlagern mit neuem
  106.                                    ;Vektor
  107.            mov     ax,2500H or IntNr     ;Set Vector IntNr
  108.            mov     dx,offset NeuVek      ;Segment in ds
  109.            int     21H
  110. ; ----------------------------------------------------------
  111. ;  Beenden aber im Speicher lassen
  112. ; ----------------------------------------------------------
  113.            mov     dx,offset INSTAL-offset TogScreen+100H
  114.            mov     cl,4             ;Programmgroesse in
  115.                                     ;Paragraphen, daher
  116.            shr     dx,cl            ;4mal schieben
  117.            inc     dx               ;aufrunden
  118.            mov     ax,3100H
  119.            int     21H              ;TSR
  120.  
  121. Text1:     db  0DH,0AH,'Toggle Screen Ver. 1.0'
  122.            db  ' ist installiert. ',0dH,0AH
  123.            db  'aktivieren mit <Shift>+<PrtScn>',0DH,0AH,'$'
  124.  
  125. CSEG       ends
  126.            end       TogScreen
  127. ; ----------------------------------------------------------
  128. ;                  Ende von TOGSCR.ASM
  129.