home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 06 / tricks / hgcmode.asm < prev    next >
Encoding:
Assembly Source File  |  1988-10-13  |  3.5 KB  |  76 lines

  1. ; ----------------------------------------------------------
  2. ;                      HGCMODE.ASM
  3. ; stellt für Turbo Pascal 4.0 den Hercules-Grafikmodus fest
  4. ;           (c) 1988 by Dieter Bührer & TOOLBOX
  5. ; ----------------------------------------------------------
  6. ;                    Assembler: MASM 4.0
  7. ; ----------------------------------------------------------
  8. TITLE HGC_MODUS_DEMO
  9.  
  10. ; ------------------ INPUT-OUTPUT-PORTS --------------------
  11. HGC_INDEX                 EQU 03B4h
  12.                         ;Indexregister          (Output)
  13. HGC_DATA                  EQU 03B5h
  14.                         ;Dataregister           (I/O  )
  15. HGC_STATUS                EQU 03BAh
  16.                         ;Display Status Port    (Output)
  17. HGC_LTPEN_SET             EQU 03B9h
  18.                         ;Set Lt Pen Flip Flop   (Output)
  19. HGC_LTPEN_RESET           EQU 03BBh
  20.                         ;Reset Lt Pen Flip Flop (Output)
  21. HGC_LTPEN_ADR_SCHWELLE    EQU 2200
  22.                         ;Ltp.Positionsgrenze zum Grafikmodus
  23.  
  24. CODE SEGMENT BYTE PUBLIC
  25.          ASSUME CS:CODE
  26.          PUBLIC GET_HGC_MODE   ; Assembler-Prozedur
  27. ; ----------------------------------------------------------
  28. ;   TURBO 4.0 FUNCTION GET_HGC_MODE:INTEGER; EXTERNAL;
  29. ; ----------------------------------------------------------
  30. GET_HGC_MODE  PROC NEAR        ; ein Byte --> Drucker-Nr.
  31.           PUSH BP              ; BP sichern
  32.           MOV  BP,SP           ; Stackadresse als Basis
  33.           ;-------------------------------------------------
  34.           MOV  DX,HGC_STATUS   ; VSYNC Statusport, Bit 7
  35. VSYNC1 :  IN   AL,DX           ; Lese Statusport -----------
  36.           TEST AL,80H          ; Vertical Retrace? (Bit 7=0)
  37.           JZ   VSYNC1          ; solange bis Vertical Retr.
  38. VSYNC2 :  IN   AL,DX           ; Lese Statusport -----------
  39.           TEST AL,80H          ; Active Display? (Bit 7=1)
  40.           JNZ  VSYNC2          ; bis Active Display okay..
  41.           XOR  AL,AL           ; RESET und SET LIGHT PEN nur
  42.                                ; durch Schreibzugriff (AL=0)
  43.           MOV  DX,HGC_LTPEN_RESET
  44.           OUT  DX,AL
  45.           MOV  DX,HGC_LTPEN_SET  ;Flipflop wird gesetzt :
  46.           OUT  DX,AL
  47.           MOV  AL,16           ; Parameter 16 für lese Ltp.
  48.                                ; Addr.HighRegister
  49.           MOV  DX,HGC_INDEX    ; Offset Ltp.-Adrr  (High)
  50.           OUT  DX,AL           ;
  51.           MOV  DX,HGC_DATA     ; Dataregister
  52.           IN   AL,DX           ;
  53.           MOV  BH,AL           ; BH enthält nun die
  54.                                ; Ltp.-Adresse (High).
  55.           MOV  AL,17           ; Param 17 an Indexregister
  56.           MOV  DX,HGC_INDEX    ; Offset Ltp.-Adrr (Low)
  57.           OUT  DX,AL           ;
  58.           MOV  DX,HGC_DATA     ; Dataregister
  59.           IN   AL,DX           ;
  60.           MOV  BL,AL           ; BL enthält nun die
  61.                                ; Ltp.-Adresse (Low)
  62.           CMP  BX,HGC_LTPEN_ADR_SCHWELLE
  63.                           ; IF BX < SCHWELLE ==>TEXT-MODUS
  64.           JB   HGC_TEXT   ; IF BX > SCHWELLE ==>GRAFIK-MODUS
  65. HGC_GRAF: MOV  AX,1            ; ERGEBNISWERT 1==> GRAFIK
  66.           JMP  ENDE
  67. HGC_TEXT: MOV  AX,0            ; ERGEBNISWERT 0==> TEXT
  68.           ;-------------------------------------------------
  69.     ENDE: MOV  SP,BP           ;
  70.           POP  BP              ; BP zurück
  71.           RET                  ; Zurück ins Hauptprogramm
  72. GET_HGC_MODE ENDP
  73. CODE ENDS
  74.      END
  75. ; ----------------------------------------------------------
  76.