home *** CD-ROM | disk | FTP | other *** search
/ ST-Computer Leser 2002 January / STC_CD_01_2002.iso / SCENE / IMATROLL / SRC / COM_EFF.S < prev    next >
Text File  |  2001-12-11  |  4KB  |  171 lines

  1.  
  2.  
  3.         section    text
  4.  
  5. ; -------------------------------------------------------------------
  6. ;
  7. ; routine  : fade_table
  8. ;
  9. ; Fade the current color table (320x240xTC)from one shade
  10. ; TC word : |rrrrrggg|gggbbbbb|
  11. ; used :
  12. ; - a0 : screen_adr
  13. ; - d1,d2,d3 : Blue, Red, Green
  14. ; - d5 : current pixel modified
  15. ; - d7,d6 : loops
  16. ;
  17. ; -------------------------------------------------------------------
  18.         
  19. fade_table:        move.w    #-1,d7    ; loop to scan all values (16 bits)
  20.         
  21. .loop_fade:        move.w    (a0),d5    ; store current TC pixel
  22.         move.b    d5,d1    ; to get blue bits (need right byte)
  23.         move.w    d5,d2    ; to get green bits (need both bytes)
  24.         move.w    d5,d3        ; to get red word (need left byte...so get the word :( )
  25.     
  26.         and.b    blue_bits,d1    ; save blue bits only
  27.         and.w    red_bits,d3        ; save red bits only
  28.  
  29. .test_blue:        cmp.b    fade_speed,d1    ; no more blue ?
  30.         blo    .end_blue
  31.         sub.b    fade_speed,d1           ; decrease blue ton by 1 
  32.         bra    .end_blue_test
  33. .end_blue        clr.b    d1        
  34.  
  35. .end_blue_test:    lsr.w    #3,d3        ; shift bits right to be able to test+sub it
  36.         lsr.w    #8,d3
  37.         cmp.b    fade_speed,d3    ; no more red ? 
  38.         blo    .end_red
  39.         sub.b    fade_speed,d3    ; decrease red ton by 1 
  40.         bra    .end_red_test
  41. .end_red        clr.b    d3
  42. .end_red_test    lsl.w    #3,d3        ; shift bits left to replace then at the begining of the word
  43.         lsl.w    #8,d3
  44.  
  45. .test_green:    and.w    green_bits,d2    ; save green bits
  46.         lsr.w    #5,d2        ; shit significants bits to test them
  47.         cmp.b    fade_speed_green,d2    ; nearly no more green ?
  48.         blo    .end_green
  49.         sub.b    fade_speed_green,d2    ; decrease green ton by 2 
  50.         bra    .end_green_test
  51. .end_green:        clr.w    d2        ; clear it if green luminance <2 
  52. .end_green_test:    lsl.w    #5,d2        ; shift green significant bits to the right
  53.  
  54.         clr.w    d5        ; clear new pixel
  55.         
  56.         or.w    d3,d5        ; copy red bits
  57.         or.w    d2,d5        ; copy green bits in the middle of the word
  58.         or.b    d1,d5        ; copy blue bits 
  59.         
  60.  
  61.         move.w    d5,(a0)+        ; replace old pixel            
  62.  
  63.         dbra    d7,.loop_fade    ; replace next line     
  64.  
  65.         rts
  66.  
  67. ; -------------------------------------------------------------------
  68. ;
  69. ; subroutine 'init_fade'
  70. ;    
  71. ; precalc the pixel table...
  72. ;
  73. ; -------------------------------------------------------------------
  74.  
  75. init_fade:        tst.w    .fade_init        ; do it one time
  76.         bne.w    .no
  77.         not.w    .fade_init
  78.     
  79.         lea    pixeltable,a0    ; load pixeltable
  80.         moveq.w    #0,d2        ; clear d2=count
  81.         moveq.w    #-1,d7        ; for d7=$FFFF to 0    
  82.  
  83. .loop_init        move.w    d2,(a0)+        ; pixeltable(d7)=count        
  84.         addq.w    #1,d2        ; count=count+1    
  85.  
  86.         dbra    d7,.loop_init
  87.         
  88.         lea    pixeltable,a0    ; reload table at the beginning
  89.         bsr    fade_table        ; fade all colors
  90.         ;bsr    fade_table
  91.  
  92.         rts
  93.  
  94. .no        rts
  95. .fade_init        ds.w    1
  96.  
  97. ; -------------------------------------------------------------------
  98. ;
  99. ; subroutine 'table_fade'
  100. ;    
  101. ; Fade the screen using table method...
  102. ;
  103. ; -------------------------------------------------------------------
  104.  
  105.  
  106. table_fade:        move.l    screen_adr,a0    ; screen pointer
  107.         lea    pixeltable,a1    ; faded pixel table
  108.  
  109.         move.w    pic_height,d5
  110.         move.w    pic_width,d7    ; loop to scan all lines
  111. .loopY:        move.w    d5,d6         ; loop to scan each pixel in one line
  112.  
  113. .loopX:        moveq.l    #0,d1
  114.         move.w    (a0),d1        ; get current pixel value
  115.         
  116.         move.w    0(a1,d1.l*2),(a0)+    ; replace it by its value in table (color shaded)     
  117.  
  118.         dbra    d6,.loopX         ; replace next one in the row
  119.  
  120.         dbra    d7,.loopY        ; replace next line     
  121.         
  122.         rts
  123.  
  124. ; -------------------------------------------------------------------
  125. ;
  126. ; subroutine 'buffers_clear'
  127. ;    
  128. ; Clear the logical screens
  129. ;
  130. ; -------------------------------------------------------------------
  131.  
  132. buffers_clear:    move.l    screen_adr,a3
  133.         move.l    screen_adr1,a0
  134.         move.l    screen_adr2,a1
  135.         move.l    screen_adr3,a2
  136.         move.w    #320*240*2/64-1,d7
  137. .loop:
  138.         rept    16
  139.         clr.l    (a0)+
  140.         clr.l    (a1)+
  141.         clr.l    (a2)+
  142.         clr.l    (a3)+
  143.         endr
  144.         
  145.         dbra    d7,.loop
  146.  
  147.         rts
  148.  
  149. ; -------------------------------------------------------------------
  150. ;
  151. ; Data Section : constant data
  152. ;
  153. ; -------------------------------------------------------------------
  154.         
  155.         section     data
  156.  
  157. blue_bits        dc.b    %00011111
  158.         EVEN
  159. red_bits        dc.w    %1111100000000000
  160. green_bits        dc.w    %0000011111100000
  161. fade_speed        dc.b    2    ;0->31 values
  162. fade_speed_green    dc.b    4    ;0->63 values (should be 2xfade_speed)
  163. nb_fadepass        dc.w    0
  164. pic_width        dc.w    319
  165. pic_height        dc.w    239
  166.  
  167.         section    bss
  168.  
  169. pixeltable        ds.w    65536
  170.  
  171.         section    text