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

  1.         TITLE    'Listing 10-1a'
  2.         NAME    CGenModeSet
  3.         PAGE    55,132
  4.  
  5. ;
  6. ; Name:        CGenModeSet
  7. ;
  8. ;        Direct access to EGA and VGA alphanumeric character generator RAM
  9. ;
  10. ; Caller:    Microsoft C:
  11. ;
  12. ;            void CGenModeSet();
  13. ;
  14.  
  15. DGROUP        GROUP    _DATA
  16.  
  17. _TEXT        SEGMENT    byte public 'CODE'
  18.         ASSUME    cs:_TEXT,ds:DGROUP
  19.  
  20.         PUBLIC    _CGenModeSet
  21. _CGenModeSet    PROC    near
  22.  
  23.         push    bp        ; preserve caller registers
  24.         mov    bp,sp
  25.         push    si
  26.  
  27. ; Program the Sequencer
  28.  
  29.         cli            ; disable interrupts
  30.         mov    dx,3C4h        ; Sequencer port address
  31.         mov    si,offset DGROUP:SeqParms
  32.         mov    cx,4
  33.  
  34. L01:        lodsw            ; AH := value for Sequencer register
  35.                     ; AL := register number
  36.         out    dx,ax        ; program the register
  37.         loop    L01
  38.         sti            ; enable interrupts
  39.  
  40. ; Program the Graphics Controller
  41.  
  42.         mov    dl,0CEh        ; DX := 3CEH (Graphics Controller port
  43.                     ;        address)
  44.         mov    si,offset DGROUP:GCParms
  45.         mov    cx,3
  46.  
  47. L02:        lodsw            ; program the Graphics Controller
  48.         out    dx,ax
  49.         loop    L02
  50.  
  51.         pop    si
  52.         pop    bp
  53.         ret        
  54.  
  55. _CGenModeSet    ENDP
  56.  
  57. _TEXT        ENDS
  58.  
  59.  
  60. _DATA        SEGMENT    word public 'DATA'
  61.  
  62. ; Format of the parameters is:  Lo-order byte:  Register number
  63. ;                Hi-order byte:  Value for reg
  64.  
  65. SeqParms    DW    0100h        ; synchronous reset
  66.         DW    0402h        ; CPU writes only to map 2
  67.         DW    0704h        ; sequential addressing
  68.         DW    0300h        ; clear synchronous reset
  69.  
  70. GCParms        DW    0204h        ; select map 2 for CPU reads
  71.         DW    0005h        ; disable odd-even addressing
  72.         DW    0006h        ; map starts at A000:0000
  73.  
  74. _DATA        ENDS
  75.  
  76.         END
  77.