home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_200 / 255_01 / gpbox.asm < prev    next >
Assembly Source File  |  1988-03-30  |  4KB  |  158 lines

  1.  
  2.           page   80,132
  3.           page
  4. ;
  5. ;         Kent Cedola
  6. ;         2015 Meadow Lake Court
  7. ;         Norfolk, Virginia  23518
  8. ;
  9.  
  10. dgroup    group  _data
  11.  
  12. _data     segment word public 'data'
  13.           assume ds:dgroup
  14.  
  15.           extrn  _gdcolor:byte,_gdmerge:byte
  16.           extrn  _gdcur_x:word,_gdcur_y:word
  17.           extrn  _gdvw_x1:word,_gdvw_x2:word,_gdvw_x3:word
  18.           extrn  _gdvw_y1:word,_gdvw_y2:word,_gdvw_y3:word
  19.           extrn  _gdc_flg:byte
  20.  
  21. _data     ends
  22.  
  23. _text     segment byte public 'code'
  24.  
  25.           assume cs:_text,ds:dgroup
  26.           public _gpbox
  27. _gpbox    proc   near
  28.  
  29.           push   bp
  30.           mov    bp,sp
  31.           push   si
  32.           push   di
  33.  
  34.           mov    dx,03CEh
  35.           mov    ah,_gdmerge
  36.           mov    al,03h
  37.           out    dx,ax
  38.           mov    ax,00205h
  39.           out    dx,ax
  40.  
  41.           mov    ax,_gdcur_x           ; Load X1 coordinate of current frame
  42.           mov    bx,_gdcur_y           ; Load Y1 coordinate of current frame
  43.           mov    di,[bp+4]             ; Load X2 coordinate of current frame
  44.           mov    si,[bp+6]             ; Load Y2 coordinate
  45.  
  46.           MOV    cx,ax                 ; Determine the first mask byte
  47.           AND    cl,7                  ;   ...
  48.           mov    dl,0FFh
  49.           shr    dl,cl
  50.           mov    [bp+4],dl
  51.  
  52.           MOV    cx,DI                 ; Determine the second (last) mask byte
  53.           AND    cl,7                  ;   ...
  54.           mov    dl,080h
  55.           sar    dl,cl
  56.           mov    [bp+6],dl
  57.  
  58.           mov    cx,si                 ; Load Y2 corrdinate of current frame
  59.  
  60.           MOV    DX,AX                 ; Determine width in bytes
  61.           SHR    DX,1                  ; Convert X1 to a byte count
  62.           SHR    DX,1                  ;   ...
  63.           SHR    DX,1                  ;   ...
  64.           SHR    DI,1                  ; Convert X2 to a byte count
  65.           SHR    DI,1                  ;   ...
  66.           SHR    DI,1                  ;   ...
  67.           SUB    DI,DX                 ; Width + 1
  68.           JNZ    clear01
  69.           PUSH   AX
  70.           MOV    AL,[bp+6]
  71.           AND    AL,[bp+4]
  72.           MOV    [bp+8],AL
  73.           POP    AX
  74. clear01:
  75.           DEC    DI                    ; Width
  76.           SUB    CX,BX                 ; Determine the Height of the frame
  77.           INC    CX                    ;   ...
  78.  
  79.           MOV    SI,AX                 ;
  80.           SHR    SI,1                  ; Divide X corrdinate by eight and
  81.           SHR    SI,1                  ;   ...
  82.           SHR    SI,1                  ;   ...
  83.           mov    ax,bx
  84.           shl    ax,1
  85.           shl    ax,1
  86.           add    ax,bx
  87.           add    ax,0A000h
  88.           mov    es,ax
  89.  
  90. ;         CX     Height
  91. ;         SI     Byte Offset
  92. ;         DI     Width
  93. ;         ES     'A000'
  94.  
  95.           mov    dx,03CEh
  96.           mov    al,8
  97.           out    dx,al
  98.           inc    dx
  99.  
  100.           MOV    AH,_gdcolor
  101.  
  102.           MOV    AL,[bp+4]
  103.           OUT    DX,AL
  104.           CALL   col_fill
  105.           OR     DI,DI
  106.           JS     L3
  107.           JZ     L2
  108.           MOV    AL,0FFh
  109.           OUT    DX,AL
  110. L6:
  111.           CALL   col_fill
  112.           DEC    DI
  113.           JNZ    L6
  114. L2:
  115.           MOV    AL,[bp+6]
  116.           OUT    DX,AL
  117.           CALL   col_fill
  118. L3:
  119.           jmp    short done
  120.  
  121. ;         AH     Color
  122. ;         CX     Height
  123. ;         DX     '03CF'
  124. ;         SI     Byte Offset
  125. ;         ES     'A000'
  126.  
  127. col_fill:
  128.           PUSH   CX
  129.           PUSH   SI
  130. col_f01:
  131.           MOV    AL,ES:[SI]
  132.           MOV    ES:[SI],AH
  133.           ADD    SI,80
  134.           LOOP   col_f01
  135.  
  136.           POP    SI
  137.           POP    CX
  138.           INC    SI
  139.           RET
  140.  
  141. done:
  142.           mov    al,0ffh
  143.           out    dx,al
  144.           dec    dx
  145.           mov    ax,0003
  146.           out    dx,ax
  147.           mov    ax,0005
  148.           out    dx,ax
  149.  
  150.           pop    di
  151.           pop    si
  152.           pop    bp
  153.           ret
  154.  
  155. _gpbox    endp
  156. _text     ends
  157.           end
  158.