home *** CD-ROM | disk | FTP | other *** search
/ The CDPD Public Domain Collection for CDTV 3 / CDPDIII.bin / pd / aga_software / tmap-demo / fakefb.asm < prev    next >
Assembly Source File  |  1993-02-18  |  4KB  |  225 lines

  1. ; $$TABS=8
  2. ;
  3. ; fakefb.asm - routines for manipulating the fake chunky pixel frame buffer
  4. ;
  5.  
  6.     include    'demo.i'            ; master include file for this program.
  7.  
  8.     xref    _ChunkyToPlanar
  9.     xref    canvas_bitmap,current_color,_LVOCopyMem,Moved
  10.  
  11. init_fakefb::
  12. ; build the y table for the fake frame buffer
  13. ; trashes d0-d4/a0-a2
  14.     lea    yadrtable(a6),a0
  15.     lea    fake_frame_buffer+4,a1
  16.     move.w    #DUNGEON_WINDOW_HEIGHT-1,d0
  17. 1$:    move.l    a1,(a0)+
  18.     lea    DUNGEON_WINDOW_WIDTH+8(a1),a1
  19.     dbra    d0,1$
  20.     lea    rightmasktable(a6),a0
  21.     move.w    #DUNGEON_WINDOW_WIDTH-1,d0
  22.     move.l    #$00ffffff,d1
  23. 2$:    move.l    d1,(a0)+
  24.     bne.s    3$
  25.     move.l    #$00ffffff,d1
  26.     bra.s    4$
  27. 3$:    lsr.l    #8,d1
  28. 4$:    dbra    d0,2$
  29.     lea    leftmasktable(a6),a0
  30.     moveq    #0,d0
  31.     move.l    #$ff000000,d1
  32.     move.l    #$ffff0000,d2
  33.     move.l    #$ffffff00,d3
  34.     move.w    #(DUNGEON_WINDOW_WIDTH/4)-1,d4
  35. 5$:    movem.l    d0-d3,(a0)
  36.     lea    4*4(a0),a0
  37.     dbra    d4,5$
  38.     rts
  39.  
  40. fill_fakefb::
  41. ; fill the whole fake frame buffer with a longword pattern.
  42. ; entr d0=pattern
  43. ; trashes: d0-d2/a0
  44.     ONTIMER    4
  45.     lea    fake_frame_buffer,a0
  46.     move.l    #end_fake_fb,d1
  47.     sub.l    a0,d1
  48.     add.l    #7,d1
  49.     lsr.l    #3,d1
  50. 2$:    move.l    d0,(a0)+
  51.     move.l    d0,(a0)+
  52.     dbra    d1,2$
  53.     OFFTIMER    4
  54.     rts
  55.  
  56. blur_fakefb:
  57.     moveq    #0,d0
  58.     move.l    #blend_table,a1
  59.     lea    fake_frame_buffer+4,a0
  60.     move.w    #DUNGEON_WINDOW_HEIGHT-1,d3
  61. 1$:    move.w    #(DUNGEON_WINDOW_WIDTH/4)-1,d4
  62. 2$:    move.w    (a0),d0
  63.     move.b    (a1,d0.w),(a0)+
  64.     move.w    (a0),d0
  65.     move.b    (a1,d0.w),(a0)+
  66.     move.w    (a0),d0
  67.     move.b    (a1,d0.w),(a0)+
  68.     move.w    (a0),d0
  69.     move.b    (a1,d0.w),(a0)+
  70.  
  71.     dbra    d4,2$
  72.     lea    8(a0),a0
  73.     dbra    d3,1$
  74.     rts
  75.  
  76. expand_fakefb:
  77.     moveq    #0,d0
  78.     move.l    #blend_table,a1
  79.     move.l    #wide_fakefb,a2
  80.     lea    fake_frame_buffer+4,a0
  81.     move.w    #DUNGEON_WINDOW_HEIGHT-1,d3
  82. 1$:    move.w    #(DUNGEON_WINDOW_WIDTH/4)-1,d4
  83. 2$:    move.w    (a0),d0
  84.     move.b    (a1,d0.w),d0
  85.     swap    d0
  86.     lea    1(a0),a0
  87.  
  88.     move.w    (a0),d0
  89.     move.b    (a1,d0.w),d0
  90.     move.l    d0,(a2)+
  91.     lea    1(a0),a0
  92.  
  93.     move.w    (a0),d0
  94.     move.b    (a1,d0.w),d0
  95.     swap    d0
  96.     lea    1(a0),a0
  97.  
  98.     move.w    (a0),d0
  99.     move.b    (a1,d0.w),d0
  100.     move.l    d0,(a2)+
  101.     lea    1(a0),a0
  102.  
  103.     dbra    d4,2$
  104.     lea    8(a0),a0
  105.     dbra    d3,1$
  106.     rts
  107.  
  108. fakefb_to_screen::
  109. ; transfer the fake frame buffer to the dungeon window
  110. ; entr: none
  111. ; trashes: a0/a1/d0/d1/d6/d7
  112.     ifne    DOBLUR
  113.     bsr    expand_fakefb
  114.     lea    wide_fakefb,a0
  115.     move.l    canvas_bitmap(a6),a1
  116.     move.l    #DUNGEON_WINDOW_X,d0
  117.     move.l    #DUNGEON_WINDOW_Y,d1
  118.     move.l    #DUNGEON_WINDOW_WIDTH*2,d6
  119.     move.l    #DUNGEON_WINDOW_HEIGHT,d7
  120.     bra    _ChunkyToPlanar
  121.     else
  122. ;    bsr    blur_fakefb
  123.     ifne    MOTION_BLUR
  124.     bsr    do_motion_blur
  125.     lea    old_fake_fb+4,a0
  126.     else
  127.     lea    fake_frame_buffer+4,a0
  128.     endc
  129.     move.l    canvas_bitmap(a6),a1
  130.     move.l    #DUNGEON_WINDOW_X,d0
  131.     move.l    #DUNGEON_WINDOW_Y,d1
  132.     move.l    #DUNGEON_WINDOW_WIDTH,d6
  133.     move.l    #DUNGEON_WINDOW_HEIGHT,d7
  134.     bsr    _ChunkyToPlanar
  135.     rts
  136.     endc
  137.  
  138. fill_fakefb_gradient::
  139. ; fill fake fb with a gradient
  140. ; entr d0=c, d1=dcdx, d2=dcdy
  141. ; trashes: d0-d5/a0
  142.     replicate    d0,d3
  143.     replicate    d1,d3
  144.     replicate    d2,d3
  145.     lea    fake_frame_buffer+4,a0
  146.     move.w    #DUNGEON_WINDOW_HEIGHT-1,d3
  147. 1$:    move.w    #(DUNGEON_WINDOW_WIDTH/16)-1,d4
  148.     move.l    d0,d5
  149. 2$:    move.l    d0,(a0)+
  150.     add.l    d1,d0
  151.     move.l    d0,(a0)+
  152.     add.l    d1,d0
  153.     move.l    d0,(a0)+
  154.     add.l    d1,d0
  155.     move.l    d0,(a0)+
  156.     add.l    d1,d0
  157.     dbra    d4,2$
  158.     lea    8(a0),a0
  159.     move.l    d5,d0
  160.     add.l    d2,d0
  161.     dbra    d3,1$
  162.     rts
  163.  
  164.     
  165.  
  166.     ifne    MOTION_BLUR
  167. do_motion_blur::
  168.     move.l    #fake_frame_buffer,a0
  169.     move.l    #old_fake_fb,a1
  170.     move.w    #(DUNGEON_WINDOW_WIDTH+8)*(DUNGEON_WINDOW_HEIGHT)-1,d0
  171.     move.l    #blend_table,a2
  172.     moveq    #0,d1
  173. 1$:    move.b    (a1),d1
  174.     lsl.w    #8,d1
  175.     move.b    (a0)+,d1
  176.     move.b    (a2,d1.l),(a1)+
  177.     dbra    d0,1$
  178.     rts
  179.     endc
  180.  
  181.  
  182.  
  183.  
  184.     section    __MERGED,DATA
  185.  
  186. render_mask::
  187.     dc.l    0
  188.  
  189.     dc.l    end_fake_fb
  190. yadrtable::
  191.     ds.l    DUNGEON_WINDOW_HEIGHT
  192.     dc.l    end_fake_fb
  193.  
  194.     dc.l    -1
  195. rightmasktable::
  196.     ds.l    DUNGEON_WINDOW_WIDTH
  197.     dc.l    -1
  198.  
  199.     dc.l    -1
  200. leftmasktable::
  201.     ds.l    DUNGEON_WINDOW_WIDTH
  202.     dc.l    -1
  203.     
  204.  
  205.     section    lighttable,DATA
  206. lightingtab::
  207.     include    'lightingtable.i'
  208.  
  209.     section     FakeFB,BSS
  210. fake_frame_buffer::
  211.     ds.b    (DUNGEON_WINDOW_WIDTH+8)*(DUNGEON_WINDOW_HEIGHT+1)
  212. end_fake_fb::
  213.     ds.b    (DUNGEON_WINDOW_WIDTH+12)*2
  214. wide_fakefb::
  215.     ds.b    DUNGEON_WINDOW_WIDTH*2*DUNGEON_WINDOW_HEIGHT
  216.  
  217.     ifne    MOTION_BLUR
  218. old_fake_fb::
  219.     ds.b    (DUNGEON_WINDOW_WIDTH+8)*(DUNGEON_WINDOW_HEIGHT)
  220.     endc
  221.  
  222.     section    BigTable,DATA
  223. blend_table::
  224.     include    '64k.i'
  225.