home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / progc / dbvgal17.arj / SRC_ASM.ZIP / VGC.ASM < prev    next >
Assembly Source File  |  1992-01-25  |  3KB  |  116 lines

  1.         name    vgc     ; VGA Graphics Controller routines
  2.         ;
  3.         ;  void Select_RPlane(int plane);  
  4.         ;  void Select_Wmode(int mode);    mode ranges 0-3
  5.         ;  int  What_Wmode(void);          
  6.         ;  int  GCread_reg(int reg);
  7.         ;  void GCset_reg(int reg, int value);
  8.         ;  void GCset_regm(int reg, int value, int mask);
  9.         ;
  10. GRAPHICS_CTRL_PORT      EQU     03CEh   ;Graphics controller
  11. GRAPHICS_DATA_PORT      EQU     03CFh   ;Graphics controller data
  12. READ_PLANE_REG          EQU     4
  13. MODE_REG                EQU     5
  14.  
  15. REGNO    equ     [bp+06]
  16. VALUE    equ     [bp+08]
  17. BMASK    equ     [bp+0ah]
  18.  
  19. GC_TEXT       segment byte public 'CODE'
  20.         public  _Select_RPlane
  21.         assume  cs:GC_TEXT
  22. _Select_RPlane   proc    far
  23.         push    bp
  24.         mov     bp,sp
  25.         mov     ah,REGNO
  26.         and     ah,3            ; bits 2-7 are reserved/unused
  27.         mov     dx,GRAPHICS_CTRL_PORT
  28.         mov     al,READ_PLANE_REG
  29.         out     dx,ax
  30.         pop     bp
  31.         ret
  32. _Select_RPlane   endp
  33.         public  _Select_Wmode
  34. _Select_Wmode   proc    far
  35.         push    bp
  36.         mov     bp,sp
  37.  
  38.         mov     cl,REGNO
  39.         and     cl,3
  40.         mov     dx,GRAPHICS_CTRL_PORT
  41.         mov     al,MODE_REG
  42.         out     dx,al
  43.         inc     dx
  44.         in      al,dx
  45.         and     al,0fch
  46.         or      al,cl
  47.         out     dx,al
  48.         pop     bp
  49.         ret
  50. _Select_Wmode   endp
  51.         public  _What_Wmode
  52.         assume  cs:GC_TEXT
  53. _What_Wmode   proc    far
  54.         mov     dx,GRAPHICS_CTRL_PORT
  55.         mov     al,MODE_REG
  56.         out     dx,al
  57.         inc     dx
  58.         in      al,dx
  59.         xor     ah,ah
  60.         ret
  61. _What_Wmode   endp
  62.         public  _GCread_reg
  63. _GCread_reg   proc    far
  64.         push    bp
  65.         mov     bp,sp
  66.         mov     al,REGNO
  67.         mov     dx,GRAPHICS_CTRL_PORT
  68.         out     dx,al
  69.         inc     dx
  70.         in      al,dx
  71.         xor     ah,ah
  72.         pop     bp
  73.         ret
  74. _GCread_reg   endp
  75.         public  _GCset_reg
  76. _GCset_reg   proc    far
  77.         push    bp
  78.         mov     bp,sp
  79.  
  80.         mov     ah,VALUE
  81. @update:
  82.         mov     al,REGNO
  83.         mov     dx,GRAPHICS_CTRL_PORT
  84.         out     dx,ax
  85.  
  86.         pop     bp
  87.         ret
  88. _GCset_reg   endp
  89.         public  _GCset_regm
  90. _GCset_regm     PROC  far
  91.         push    bp
  92.         mov     bp,sp
  93.  
  94.         mov     al,REGNO                ; read old value
  95.         mov     dx,GRAPHICS_CTRL_PORT
  96.         out     dx,al
  97.         inc     dx
  98.         in      al,dx
  99.         xor     ah,ah
  100.  
  101.         mov     bl,BMASK                ; compute new value
  102.         not     bl        ; !mask
  103.         and     al,bl     ; al=(!mask®(reg_num));
  104.         mov     cl,al     ; save for a microsecond
  105.         mov     ah,VALUE
  106.         mov     bl,BMASK
  107.         and     ah,bl
  108.         or      ah,cl     ; leave value in ah for GCset_reg
  109.  
  110.         jmp     @update   ; already knows REGNO, expects VALUE in ah
  111.  
  112. _GCset_regm     ENDP
  113. GC_TEXT       ends
  114.         end
  115.  
  116.