home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / video / 10 / 10_1b.asm < prev    next >
Encoding:
Assembly Source File  |  1988-08-11  |  1.7 KB  |  88 lines

  1.         TITLE    'Listing 10-1b'
  2.         NAME    CGenModeClear
  3.         PAGE    55,132
  4.  
  5. ;
  6. ; Name:        CGenModeClear
  7. ;
  8. ;        Restore EGA or VGA alphanumeric mode after accessing
  9. ;         character generator RAM
  10. ;
  11. ; Caller:    Microsoft C:
  12. ;
  13. ;            void CGenModeClear();
  14. ;
  15.  
  16.  
  17. DGROUP        GROUP    _DATA
  18.  
  19. _TEXT        SEGMENT    byte public 'CODE'
  20.         ASSUME    cs:_TEXT,ds:DGROUP
  21.  
  22.         PUBLIC    _CGenModeClear
  23. _CGenModeClear    PROC    near
  24.  
  25.         push    bp        ; preserve caller registers
  26.         mov    bp,sp
  27.         push    si
  28.  
  29. ; Program the Sequencer
  30.  
  31.         cli            ; disable interrupts
  32.         mov    dx,3C4h        ; Sequencer port address
  33.         mov    si,offset DGROUP:SeqParms
  34.         mov    cx,4
  35.  
  36. L01:        lodsw            ; AH := value for Sequencer register
  37.                     ; AL := register number
  38.         out    dx,ax        ; program the register
  39.         loop    L01
  40.         sti            ; enable interrupts
  41.  
  42. ; Program the Graphics Controller
  43.  
  44.         mov    dl,0CEh        ; DX := 3CEH (Graphics Controller port
  45.                     ;        address)
  46.         mov    si,offset DGROUP:GCParms
  47.         mov    cx,3
  48.  
  49. L02:        lodsw            ; program the Graphics Controller
  50.         out    dx,ax
  51.         loop    L02
  52.  
  53.         mov    ah,0Fh        ; AH := INT 10H function number
  54.         int    10h        ; get video mode
  55.  
  56.         cmp    al,7
  57.         jne    L03        ; jump if not monochrome mode
  58.  
  59.         mov    ax,0806h    ; program Graphics Controller
  60.         out    dx,ax        ;  to start map at B000:0000
  61.  
  62. L03:        pop    si
  63.         pop    bp
  64.         ret        
  65.  
  66. _CGenModeClear    ENDP
  67.  
  68. _TEXT        ENDS
  69.  
  70.  
  71. _DATA        SEGMENT    word public 'DATA'
  72.  
  73. ; Format of the parameters is:  Lo-order byte:  Register number
  74. ;                Hi-order byte:  Value for reg
  75.  
  76. SeqParms    DW    0100h        ; synchronous reset
  77.         DW    0302h        ; CPU writes to maps 0 and 1
  78.         DW    0304h        ; odd-even addressing
  79.         DW    0300h        ; clear synchronous reset
  80.  
  81. GCParms        DW    0004h        ; select map 0 for CPU reads
  82.         DW    1005h        ; enable odd-even addressing
  83.         DW    0E06h        ; map starts at B800:0000
  84.  
  85. _DATA        ENDS
  86.  
  87.         END
  88.