home *** CD-ROM | disk | FTP | other *** search
- ; ----------------------------------------------------------
- ; HGCMODE.ASM
- ; stellt für Turbo Pascal 4.0 den Hercules-Grafikmodus fest
- ; (c) 1988 by Dieter Bührer & TOOLBOX
- ; ----------------------------------------------------------
- ; Assembler: MASM 4.0
- ; ----------------------------------------------------------
- TITLE HGC_MODUS_DEMO
-
- ; ------------------ INPUT-OUTPUT-PORTS --------------------
- HGC_INDEX EQU 03B4h
- ;Indexregister (Output)
- HGC_DATA EQU 03B5h
- ;Dataregister (I/O )
- HGC_STATUS EQU 03BAh
- ;Display Status Port (Output)
- HGC_LTPEN_SET EQU 03B9h
- ;Set Lt Pen Flip Flop (Output)
- HGC_LTPEN_RESET EQU 03BBh
- ;Reset Lt Pen Flip Flop (Output)
- HGC_LTPEN_ADR_SCHWELLE EQU 2200
- ;Ltp.Positionsgrenze zum Grafikmodus
-
- CODE SEGMENT BYTE PUBLIC
- ASSUME CS:CODE
- PUBLIC GET_HGC_MODE ; Assembler-Prozedur
- ; ----------------------------------------------------------
- ; TURBO 4.0 FUNCTION GET_HGC_MODE:INTEGER; EXTERNAL;
- ; ----------------------------------------------------------
- GET_HGC_MODE PROC NEAR ; ein Byte --> Drucker-Nr.
- PUSH BP ; BP sichern
- MOV BP,SP ; Stackadresse als Basis
- ;-------------------------------------------------
- MOV DX,HGC_STATUS ; VSYNC Statusport, Bit 7
- VSYNC1 : IN AL,DX ; Lese Statusport -----------
- TEST AL,80H ; Vertical Retrace? (Bit 7=0)
- JZ VSYNC1 ; solange bis Vertical Retr.
- VSYNC2 : IN AL,DX ; Lese Statusport -----------
- TEST AL,80H ; Active Display? (Bit 7=1)
- JNZ VSYNC2 ; bis Active Display okay..
- XOR AL,AL ; RESET und SET LIGHT PEN nur
- ; durch Schreibzugriff (AL=0)
- MOV DX,HGC_LTPEN_RESET
- OUT DX,AL
- MOV DX,HGC_LTPEN_SET ;Flipflop wird gesetzt :
- OUT DX,AL
- MOV AL,16 ; Parameter 16 für lese Ltp.
- ; Addr.HighRegister
- MOV DX,HGC_INDEX ; Offset Ltp.-Adrr (High)
- OUT DX,AL ;
- MOV DX,HGC_DATA ; Dataregister
- IN AL,DX ;
- MOV BH,AL ; BH enthält nun die
- ; Ltp.-Adresse (High).
- MOV AL,17 ; Param 17 an Indexregister
- MOV DX,HGC_INDEX ; Offset Ltp.-Adrr (Low)
- OUT DX,AL ;
- MOV DX,HGC_DATA ; Dataregister
- IN AL,DX ;
- MOV BL,AL ; BL enthält nun die
- ; Ltp.-Adresse (Low)
- CMP BX,HGC_LTPEN_ADR_SCHWELLE
- ; IF BX < SCHWELLE ==>TEXT-MODUS
- JB HGC_TEXT ; IF BX > SCHWELLE ==>GRAFIK-MODUS
- HGC_GRAF: MOV AX,1 ; ERGEBNISWERT 1==> GRAFIK
- JMP ENDE
- HGC_TEXT: MOV AX,0 ; ERGEBNISWERT 0==> TEXT
- ;-------------------------------------------------
- ENDE: MOV SP,BP ;
- POP BP ; BP zurück
- RET ; Zurück ins Hauptprogramm
- GET_HGC_MODE ENDP
- CODE ENDS
- END
- ; ----------------------------------------------------------