home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 15 / CD_ASCQ_15_070894.iso / news / sorcpak / lenzscrl / sine.asm < prev    next >
Assembly Source File  |  1993-10-06  |  4KB  |  197 lines

  1.  
  2.                 locals
  3.  
  4. font_height     equ 17
  5. font_width      equ 16
  6.  
  7. scroll_posy     equ 80
  8.  
  9. wave_speed      equ 4
  10. wave_wiggle     equ 2
  11.  
  12. col_start       equ 64
  13.  
  14. _buffer         segment para public 'FARDATA'
  15. _buffer         ends
  16.  
  17. _data           segment para public 'DATA'
  18.  
  19.  
  20.                 extrn font_table:word
  21.  
  22.  
  23. count           db font_width-1
  24.  
  25. sine_pos        db 0
  26.  
  27.                 include sine.tbl
  28.  
  29. sine_end        label word
  30.  
  31.                 align 2
  32.  
  33.                 include message
  34.  
  35.                 dw 0
  36.  
  37. message_pos     dw offset message
  38.  
  39. dest_seg        dw 0a000h
  40.  
  41.                 align 4
  42.  
  43. scroll_buffer   db font_height*(320+font_width) dup(0)
  44.  
  45. _data           ends
  46.  
  47.  
  48.                 .model small
  49.  
  50.                 .code
  51.                 .386
  52.  
  53.                 public sine_scroll,dest_seg
  54.  
  55. sine_scroll     proc near
  56.  
  57.                 cld
  58.  
  59.                 add count,2
  60.                 cmp count,font_width
  61.                 jb @@skip_scroll
  62.  
  63.                 mov count,0
  64.                 mov ax,ds
  65.                 mov es,ax
  66.  
  67.                 lea esi,scroll_buffer+font_width
  68.                 lea edi,[esi-font_width]
  69.                 mov ecx,((320+font_width)*font_height)/4-font_width/4
  70.                 rep movsd
  71.  
  72.                 mov bx,message_pos
  73.                 mov si,[bx]
  74.                 add bx,2
  75.                 or si,si
  76.                 jnz @@2
  77.  
  78.                 mov bx,offset message+2
  79.                 movzx esi,word ptr [bx-2]
  80. @@2:
  81.                 mov message_pos,bx
  82.  
  83.                 mov dx,font_height
  84.                 mov edi,offset scroll_buffer+320
  85.  
  86. @@next_char_row:
  87.                 mov ecx,font_width/4
  88.                 rep movsd
  89.                 add edi,320
  90.  
  91.                 dec dx
  92.                 jnz @@next_char_row
  93.  
  94. @@skip_scroll:
  95.  
  96.                 mov es,dest_seg
  97.                 movzx si,count
  98.                 add si,offset scroll_buffer
  99.  
  100.                 mov bl,sine_pos
  101.                 xor bh,bh
  102.                 shl bx,1
  103.                 add bx,offset sine_table
  104.  
  105.                 mov dx,160
  106.                 mov bp,scroll_posy*320
  107.                 mov ax,_buffer
  108.                 mov fs,ax
  109.  
  110. @@clear_next_column:
  111.                 mov di,bp
  112.                 add di,[bx]
  113.  
  114.                 mov cx,font_height
  115. @@clear_next_row:
  116.                 mov ax,fs:[di]
  117.                 mov es:[di],ax
  118.                 add di,320
  119.                 dec cx
  120.                 jnz @@clear_next_row
  121.  
  122.                 add bp,2
  123.                 add bx,2*wave_wiggle
  124.                 cmp bx,offset sine_end
  125.                 jae @@reset_bx1
  126. @@after_reset1:
  127.                 dec dx
  128.                 jnz @@clear_next_column
  129.  
  130.                 add sine_pos,wave_speed
  131.                 mov bl,sine_pos
  132.                 xor bh,bh
  133.  
  134.                 shl bx,1
  135.                 add bx,offset sine_table
  136.  
  137.                 mov bp,160
  138.                 mov di,scroll_posy*320
  139.                 mov dh,0ffh
  140.                 mov dl,sine_pos
  141.  
  142. @@wave_next_column:
  143.                 push di
  144.                 mov cx,[bx]
  145.                 add di,cx
  146.                 mov dx,cx
  147.                 sar dx,8
  148.                 sar cx,10
  149.  
  150.                 sub dx,cx
  151.                 add dx,20+col_start
  152.  
  153.                 mov cx,font_height
  154. @@copy_next_row:
  155.                 mov ax,[si]
  156.                 test al,0ffh
  157.                 jz @@s1
  158.                 mov es:[di],dl
  159. @@s1:
  160.                 test ah,0ffh
  161.                 jz @@s2
  162.                 mov es:[di+1],dl
  163. @@s2:
  164.                 add si,320+font_width
  165.                 add di,320
  166.                 inc dl
  167.  
  168.                 dec cx
  169.                 jnz @@copy_next_row
  170.  
  171.                 sub si,(font_width+320)*font_height-2
  172.  
  173.                 pop di
  174.                 add di,2
  175.                 add bx,2*wave_wiggle
  176.                 cmp bx,offset sine_end
  177.                 jae @@reset_bx
  178. @@after_reset:
  179.                 dec bp
  180.                 jnz @@wave_next_column
  181.  
  182.                 ret
  183.  
  184. @@reset_bx:
  185.                 sub bx,sine_end - sine_table
  186.                 jmp @@after_reset
  187.  
  188. @@reset_bx1:
  189.                 sub bx,sine_end - sine_table
  190.                 jmp @@after_reset1
  191.  
  192.  
  193. sine_scroll     endp
  194.  
  195.                 end
  196.  
  197.