.model small .386 .data fish_flag db 1 even xv dw 1 yv dw 0 xp dw 160 yp dw 110 addr dw 0 old_addr dw 0 fish_buf db 60*60 dup(0) align 4 under_fish db 64*60 dup(0) fish_table label word even include fish.tbl extrn dest_seg:word .code public do_bounce,do_fish,addr,blank_fish blank_fish proc near test fish_flag,-1 jnz @@skip_copy cld mov esi,offset under_fish mov es,dest_seg movzx edi,old_addr mov dx,60 @@replace_next_line: mov ecx,64/4 rep movsd add edi,320-64 dec dx jnz @@replace_next_line @@skip_copy: mov fish_flag,0 ret blank_fish endp do_fish proc near mov bp,di cld mov edi,offset under_fish push ds movzx esi,addr and esi,not 3 mov old_addr,si mov ds,dest_seg mov ax,seg fish_buf mov es,ax mov dx,60 @@1: mov ecx,64/4 rep movsd add esi,320-64 dec dx jnz @@1 pop ds mov dx,60 mov bx,offset fish_table mov si,addr mov di,offset fish_buf mov es,dest_seg @@next_line: mov cx,60 @@next_column: mov si,[bx] mov al,es:[si+bp] mov [di],al inc di add bx,2 dec cx jnz @@next_column add si,320-60 dec dx jnz @@next_line mov dx,60 mov di,addr mov si,offset fish_buf @@update_line: mov cx,60/2 rep movsw add di,320-60 dec dx jnz @@update_line ret do_fish endp do_bounce proc near mov ax,xv add xp,ax cmp xp,260 jbe xp_ok neg xv neg ax add xp,ax xp_ok: mov ax,yv add yp,ax cmp yp,252*3 jbe yp_ok neg yv neg ax add yp,ax yp_ok: add yv,1 mov ax,yp shr ax,3 xchg al,ah mov addr,ax shr ax,2 add addr,ax mov ax,xp add addr,ax ret do_bounce endp end