home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 28 / amigaformatcd28.iso / -screenplay- / otherstuff / adoomppc_src / amiga_draw.s < prev    next >
Text File  |  1998-04-23  |  1KB  |  75 lines

  1.  
  2.         .text
  3.  
  4.         .global    R_DrawColumn
  5.  
  6.         .extern    dc_yh
  7.         .extern    dc_yl
  8.         .extern    dc_source
  9.         .extern    dc_colormap
  10.         .extern    ylookup2
  11.         .extern    dc_x
  12.         .extern    dc_iscale
  13.         .extern    dc_texturemid
  14.         .extern    centery
  15.         .extern    SCREENWIDTH
  16.  
  17. #void R_DrawColumn (void)
  18.  
  19.         .align    4
  20.  
  21. R_DrawColumn:    lis    r3,dc_yh@ha
  22.         lwz    r3,dc_yh@l(r3)
  23.         lis    r12,dc_yl@ha
  24.         lwz    r12,dc_yl@l(r12)
  25.         sub    r3,r3,r12
  26.         addi    r3,r3,1            # count = dc_yh - dc_yl + 1
  27.  
  28.         lis    r4,dc_source@ha
  29.         lwz    r4,dc_source@l(r4)    # source = dc_source
  30.  
  31.         lis    r6,dc_colormap@ha
  32.         lwz    r6,dc_colormap@l(r6)    # colormap = dc_colormap
  33.  
  34.         lis    r5,ylookup2@ha
  35.         lwz    r5,ylookup2@l(r5)
  36.         slwi    r11,r12,2
  37.         lwzx    r5,r5,r11
  38.         lis    r11,dc_x@ha
  39.         lwz    r11,dc_x@l(r11)
  40.         add    r5,r5,r11    # dest = ylookup2[dc_yl] + dc_x
  41.  
  42.         lis    r8,dc_iscale@ha
  43.         lwz    r8,dc_iscale@l(r8)
  44.  
  45.         lis    r7,dc_texturemid@ha
  46.         lwz    r7,dc_texturemid@l(r7)
  47.         lis    r11,centery@ha
  48.         lwz    r11,centery@l(r11)
  49.         sub    r12,r12,r11
  50.         mullw    r12,r12,r8
  51.         add    r7,r7,r12
  52.         slwi    r7,r7,9        # frac = (dc_texturemid + (dc_yl-centery)*dc_iscale)<<9
  53.  
  54.         slwi    r8,r8,9        # fracstep = dc_iscale<<9
  55.  
  56.         lis    r12,SCREENWIDTH@ha
  57.         lwz    r12,SCREENWIDTH@l(r12)
  58.         b    dc_next
  59.  
  60.         .align    4
  61.  
  62. dc_loop:    srawi    r9,r7,25
  63.         lbzx    r9,r4,r9
  64.         lbzx    r9,r6,r9
  65.         stb    r9,0(r5)    # *dest = colormap[source[frac>>25]]
  66.  
  67.         add    r5,r5,r12    # dest += SCREENWIDTH
  68.         add    r7,r7,r8    # frac += fracstep
  69.         addi    r3,r3,-1    # count -= 1
  70.  
  71. dc_next:    cmpwi    r3,0
  72.         bgt    dc_loop
  73.         blr
  74.  
  75.