home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / prgramer / fort_lib / pntset.asm < prev    next >
Assembly Source File  |  1991-01-17  |  2KB  |  61 lines

  1. ;
  2. ;----------------------------------------------------------------------
  3. ; set pixel at (X,Y) with Color
  4. ;----------------------------------------------------------------------
  5. ;
  6. ;FORTRAN calling sequence
  7. ;       INTERFACE TO SUBROUTINE PntSet [PASCAL] (VGASeg,Color,X,Y)
  8. ;       INTEGER*4  VGASeg [NEAR,VALUE]
  9. ;       INTEGER*2  Color  [NEAR,VALUE]
  10. ;       INTEGER*2  X,Y    [NEAR,VALUE]
  11. ;       END
  12. ;       ...
  13. ;       CALL PntSet(VGASeg,Color,X,Y)
  14. ;
  15.         .286p
  16.         .MODEL large,pascal
  17.         .CODE
  18.  
  19. PntSet  PROC    USES ds dx cx, VGASeg: DWORD, Color: WORD, X: WORD, Y: WORD
  20.  
  21.  
  22. ; calculate byte address and bitmask
  23.         lds     bx,VGASeg               ; DS = VGABase
  24.         mov     ax,Y                    ; AX = Y
  25.         mov     dx,80
  26.         mul     dx                      ; AX = 80*Y
  27.         mov     bx,x                    ; BX = x
  28.         mov     cx,bx                   ; CX = x
  29.         shr     bx,1
  30.         shr     bx,1
  31.         shr     bx,1                    ; BX = x/8
  32.         add     bx,ax                   ; BX = 80*y + x/8   (offset)
  33.         and     cl,7                    ; CL = (x mod 8)
  34.         xor     cl,7                    ; CL = 7 - (x mod 8)
  35.         mov     ah,1
  36.         shl     ah,cl                   ; AH = 2^( 7-(x mod 8) )  (bit mask)
  37. ; set bit mask register
  38.         mov     al,8
  39.         mov     dx,3ceh
  40.         out     dx,ax
  41. ; set bitplane register
  42.         mov     dx,color
  43.         mov     ah,dl
  44.         mov     al,2
  45.         mov     dx,3c4h
  46.         out     dx,ax
  47.         mov     al,[bx]                 ; load latch register
  48.         mov     al,0ffh
  49.         mov     [bx],al                 ; write bits
  50. ; restore default parameters
  51.         mov     ax,0f02h
  52.         out     dx,ax
  53.         mov     ax,0ff08h
  54.         mov     dx,3ceh
  55.         out     dx,ax
  56.  
  57.         ret
  58.  
  59. PntSet  ENDP
  60.         END
  61.