home *** CD-ROM | disk | FTP | other *** search
- ; ---------------------------------------------------------
- ; Programm : TOGSCR.ASM
- ; Aufgabe : Dunkelschalten des Monitors der Hercules-Karte
- ; mit einem Tastendruck, danach umschalten
- ; zwischen Text- und Grafik-Modus
- ; Autor : Christian Diederichsen
- ; Assembler: MASM 4.0
- ; ---------------------------------------------------------
-
- IntNr equ 5 ; Interrupt "Print Screen" (PC,XT,AT),
-
- CSEG segment 'code'
- assume cs:CSEG,ds:CSEG
-
- org 100H
-
- ; ---------------------------------------------------------
- ; Beginn des residenten Teils
- ; ---------------------------------------------------------
- TogScreen: jmp INSTAL ; zum Installieren springen
-
- ; ---------------------------------------------------------
- ; Hierher fuehrt der neue Einsprung beim Interrupt IntNr
- ; ---------------------------------------------------------
- NeuVek: nop
- if IntNr eq 5H
- cmp ax,8500H ;<Shift>+<PrtScn> gedrueckt?
- jne AltJmp ;wenn nicht, normal weiter
- endif
- push ax ;Register sichern
- push bx
- push cx
- push dx
- push ds
-
- mov dx,03B8H ;Hercules mode select port
- cmp SCREEN,00h
- je MONOUT ;ist an, wird ausgeschaltet
-
- MONON: cmp SCREEN,01h ;Monitor ist aus,
- ;Videosignal anschalten
- je MONText ;ist an, in den Textmodus
- ;schalten
- MONGraph: mov SCREEN,00h ;toggle screen status
- mov bx,offset GTable ;hier stehen die Werte
- call hgcinit ;Controller programmieren
- mov al,001010B ;Video enable, Grafikmodus
- out dx,al
- jmp WEITER
-
- MONText: mov SCREEN,02h ;toggle screen status
- mov bx,offset TTable ;hier stehen die Werte
- call hgcinit ;Controller programmieren
- mov al,101000B ;Video enable, Textmodus
- out dx,al
- jmp WEITER
-
- MONOUT: mov SCREEN,01h ;toggle screen status
- mov al,100000B ;Videosignal, Textmodus
- out dx,al
-
- WEITER: ;fertig
- pop ds ;Register wiederherstellen
- pop dx
- pop cx
- pop bx
- pop ax
-
- AltJmp: db 0EAH ;jmp far
- dw ?,? ;hier traegt INSTAL das
- ;Sprungziel ein
- hgcinit: ;6845 programmieren
- mov dx,3B4H ;Indexregisterport des 6845
- mov cx,12 ;12 Register im ganzen
- xor al,al ;es beginnt bei Register 0
- M0: mov ah,cs:[bx] ;Registerwert aus der Tabelle
- out dx,ax ;AL=Index, AH=Registerwert
- inc bx ;Tabellenadressierung weiter
- inc al ;naechstes Register
- loop M0
- mov dx,03B8H ;Hercules mode select port
- ret ;Ende hgcinit
-
- SCREEN db 01h ;ist an und im Textmode
- TTable db 61H,50H,52H,0FH,19H,06H,19H,19H,02H,0DH
- db 0BH,0CH
- GTable db 35H,2dH,2eH,07H,5bH,02H,57H,57H,02H,03H
- db 00H,00H
-
- ; ---------------------------------------------------------
- ; Ende des residenten Teils
- ; ---------------------------------------------------------
- INSTAL: mov ax,cs ;Segmentadressierung
- mov ds,ax ;Segment in ds
- mov dx,offset Text1 ;Offset des Textes in dx
- mov ah,9
- int 21H ;String ausgeben
- ;Alten Vektor holen und
- ;speichern
- mov ax,3500H or IntNr ;Get Vector IntNr
- int 21H
- mov word ptr AltJmp+1,bx ;speichere Offset
- mov ax,es
- mov word ptr AltJmp+3,ax ;speichere Segment
- ;Ueberlagern mit neuem
- ;Vektor
- mov ax,2500H or IntNr ;Set Vector IntNr
- mov dx,offset NeuVek ;Segment in ds
- int 21H
- ; ----------------------------------------------------------
- ; Beenden aber im Speicher lassen
- ; ----------------------------------------------------------
- mov dx,offset INSTAL-offset TogScreen+100H
- mov cl,4 ;Programmgroesse in
- ;Paragraphen, daher
- shr dx,cl ;4mal schieben
- inc dx ;aufrunden
- mov ax,3100H
- int 21H ;TSR
-
- Text1: db 0DH,0AH,'Toggle Screen Ver. 1.0'
- db ' ist installiert. ',0dH,0AH
- db 'aktivieren mit <Shift>+<PrtScn>',0DH,0AH,'$'
-
- CSEG ends
- end TogScreen
- ; ----------------------------------------------------------
- ; Ende von TOGSCR.ASM