home *** CD-ROM | disk | FTP | other *** search
/ Game Developers Magazine 4 / GDM004.ZIP / SOURCE / PLASMA / VGA.C < prev    next >
C/C++ Source or Header  |  1994-02-03  |  3KB  |  141 lines

  1. #include <stdio.h>
  2. #include <dos.h>
  3. #include <mem.h>
  4. #include <string.h>
  5. #include <stdlib.h>
  6.  
  7. void    SetGraphicsMode( void );
  8. void    SetTextMode( void );
  9. void    SetDac( char Dac, char Red, char Green, char Blue );
  10. void    GetDac( char Dac, char *Red, char *Green, char *Blue );
  11. void    SetBlock( char Dac, char *Array, char Num );
  12. void    GetBlock( char Dac, char *Array, char Num );
  13. void    SetPoint( int X, int Y, unsigned char Color );
  14. void    GetPoint( int X, int Y, unsigned char *Color );
  15.  
  16. char far *screen;        // This is the pointer to the graphics screen
  17.  
  18.  
  19. void    SetGraphicsMode( void )
  20. {
  21.     asm {
  22.         mov    ax,0x13
  23.     int    0x10
  24.     }
  25.   screen = (char far*)MK_FP( 0xA000, 0 );
  26. }
  27.  
  28. void    SetTextMode( void )
  29. {
  30.     asm {
  31.       mov    ax,0x03
  32.     int    0x10;
  33.     }
  34. }
  35.  
  36. void    SetDac( char Dac, char Red, char Green, char Blue )
  37. {
  38.     asm {
  39.     mov    dh, Red
  40.     mov    ch, Green
  41.     mov    cl, Blue
  42.     mov    ax, 0x1010
  43.     mov    bl, Dac
  44.     int    0x10
  45.     }
  46. }
  47.  
  48. void    GetDac( char Dac, char *Red, char *Green, char *Blue )
  49. {
  50.     asm {
  51.     mov    ax, 0x1015
  52.     mov    bl, Dac
  53.     int    0x10
  54.     }
  55.     *Red   = _DH;
  56.     *Green = _CH;
  57.     *Blue  = _CL;
  58. }
  59.  
  60. void    SetBlock( char Dac, char *Array, char Num )
  61. {
  62.     int AS, AO;
  63.  
  64.     AS = FP_SEG( Array );
  65.   AO = FP_OFF( Array );
  66.  
  67.   asm {
  68.       push es
  69.     mov    ax, AS
  70.     mov    es, ax
  71.     mov    dx, AO
  72.     xor    ch, ch
  73.     mov    cl, Num
  74.     mov ax, 0x1012
  75.     xor    bh, bh
  76.     mov    bl, Dac
  77.     int    0x10
  78.     pop    es
  79.     }
  80. }
  81.  
  82. void    GetBlock( char Dac, char *Array, char Num )
  83. {
  84.     int AS, AO;
  85.  
  86.     AS = FP_SEG( Array );
  87.   AO = FP_OFF( Array );
  88.  
  89.   asm {
  90.       push     es
  91.     mov    ax, AS
  92.     mov    es, ax
  93.     mov    dx, AO
  94.     xor    ch, ch
  95.     mov    cl, Num
  96.     mov    ax, 0x1017
  97.     xor    bh, bh
  98.     mov    bl, Dac
  99.     int    0x10
  100.     pop    es
  101.     }
  102. }
  103.  
  104. void    SetPoint( int X, int Y, unsigned char Color )
  105. {
  106.     asm {
  107.     push     ds            /* Save registers */
  108.     push     bx
  109.     mov    ax,Y                    /* Get the Y value */
  110.     mov    cx,320
  111.     mul    cx                      /* Multiply by 320 */
  112.     mov    bx,X
  113.     add    ax,bx
  114.     mov    bx,ax
  115.     mov    ax,0xA000               /* Get the offset of */
  116.     mov    ds,ax                   /* video memory into DS */
  117.     mov    al, Color
  118.     mov    [ds:bx],al              /* And put the color there */
  119.     pop    bx                      /* Retrieve registers */
  120.     pop    ds
  121.     }
  122. }
  123.  
  124. void    GetPoint( int X, int Y, unsigned char *Color )
  125. {
  126.     asm {
  127.     mov    ax,Y                    /* Get the Y value */
  128.     mov    cx,320
  129.     mul    cx                      /* Multiply by 320 */
  130.     mov    bx,X
  131.     add    ax,bx                   /* Add X Offset */
  132.     push    ax
  133.     mov    ax,0xA000               /* Get the offset of */
  134.     mov    es,ax                   /* video memory into DS */
  135.     pop    bx
  136.     mov    al,es:[bx]              /* Get the color */
  137.     }
  138.   *Color = _AL;
  139. }
  140.  
  141.