          <C1> ,       ;) *</C>

        .          
      .  -   , - 
   .                    ,  
    .   ,       
.       ,           m68k .  
    -,         
   .

   ,              
 .       .

      ,            
      ..   "" ,  
        .     
  8:8 fixedpoint math.   :

 2+0.5 = 2.5

 ==
 
 move.w    #$200,d0    ; 2   8:8 -> 1.0 (%10 0000 0000)
 move.w    #$80,d1
 add.w      d1,d0        ;  D0 - 2.5

     8:8       
(*256).     ,        
,       .
 
  move.w    #$300,d0    ; = 3
  divu.w    #2,d0        ; D0 = 1.5

  .

...
  move.l    (a0)+.d0    ; X2 coord
  lsl.l       #8,d0       ; x2 * 256
  move.l    (a0)+,d1    ; X1 coord
  lsl.l       #8,d1       ; x1 * 256
  sub.l      d1,d0       ; d0 = deltax
  lsr.l       #8,d2      ; deltay/256 -      
  divs.l     d2,d0      ;                
  ...

         ...

  ,       ,     -
  .

          3    -  A (x1,y1); B (x2,y2); C
(x3,y3).       ,     -  
      - color.      
  y,   -  .     ,   
 -   <IMG src="pics/triangle.png" alt=" 1">,    .

    .    ,  .  
          ,     
?       .           .
  :

  (x2-x1) -   X   BA,
  (y2-y1) -   Y    .

            - CB, CA.    
,        ?       .       X   Y 
                 
  (scanline),    y     .  
,  ()       
(dxdy1  +x_start)            (dxdy3 +
x_end),                      
,              -      
.

    .

  (x2-x1)/(y2-y1)  - dxdy1
  (x3-x2)/(y3-y2) - dxdy2
  (x3-x1)/(y3-y1)  - dxdy3

  dxdy1+x_start = x_start    ;    
  dxdy3+x_end   = x_end      ;

  dxdy2+x_start = x_start    ;    
  dxdy3+x_end    = x_end      ; 

     ,    .   , 
x_start  =  x_end  (    )    .     
  -      A  X -   
    - X   B.

    ,      ,          ,
  .

  :

 *     Y,
 *    (dx  dy : (x2-x1)  ..),
 *     X    Y   (dxdy1 ...
dxdy3)

     .

*************************************************************
***                                                       ***
***  Flat filled triangle. Fully unoptimized and specilly ***
***                    coded for this doc                 ***
***                                                       ***
*************************************************************
...
        move.l    x1(a6),d0    ;  X  BA
        ext.l    d0             ;     (64 bits)
        lsl.l    #8,d0            ;    256
        move.l    d0, x_start  ; 
        move.l    d0,x_end     ;   ...
...

        move.w    y2(a6),d7
        sub.w    y1(a6),d7     ;    1   -
        beq.s    .notop        ;     ,  = 0
        subq.l    #1,d7      
.loopY move.l    x_start,d0    ; xstart << 8
        move.l    x_end,d1      ; xend  << 8
        lsr.l    #8,d0            ;   
        lsr.l    #8,d1
        cmp.w   d0,d1
        bge.s    .ok
        exg.l    d0,d1
.ok     sub.w    d0,d1        ;    X (scanline)
        beq.b    .noX
    ...

         .  ,   
 ,   ""   ...     
  .         .    - ,
  .


.loopX    move.b    d2,(a1)+   ; d2   ,   
           dbf    d1,.loopX

.noX       move.l    x_start,d0
            move.l    x_end,d1
            add.l    dxdy1(a6),d0    ;     X
            add.l    dxdy3(a6),d1    ;      
                                     ;     Y
            move.l    d0,x_start
            move.l    d1,x_end
            lea        screen_width(a1),a1    ;    Y
            dbf        d7,.loopY
        
        ...
      (. <B></B>).   
        .   ,          
 ,   .

      ,      ,   
   =).

 o  email: <B>acidrain@yes.ru</B>

        ,      Gouraud  shaded  polygon drawing
procedure.       ,  ,    .   :
      -   !!!