code SEGMENT para public 'code' assume cs:code,ds:code locals .286 ORG 100h .286 MAIN PROC NEAR mov ax,13h int 10h mov bp,6000h ;6000h+7000h water segz,bp ;6000h xor 1000h = 7000h mov al,-1 mov es,bp mov cx,-1 xor di,di rep stosb xor bp,1000h ;switch mov es,bp dec cx xor di,di rep stosb ;comment /* mov dx,03c8h xor ax,ax out dx,al inc dx @asdf: mov al,bl shr al,3 out dx,al ; xor al,al out dx,al mov al,bl shr al,2 out dx,al inc bx jnz @asdf ;/* ; xor ax,ax ; int 33h keypressed: xor bp,1000h ;switch mov es,bp mov ax,3 int 33h shr cx,1 ;^^^^^^^^^ ;random rain drops, first one is from mouse mov bx,2 @rainy: mov ax,320 mul dx add ax,cx cmp ah,0fah ; cmp ax,320*200 jb @@noclip ; mov ax,64000 mov ah,0fah @@noclip: mov di,ax mov ax,-1 mov es:[di],ax mov es:[di+320],ax call @rand mov dx,ax call @rand mov cx,ax dec bx jnz @rainy @noset: call @advance_water call @show_water in al,60h dec al jnz keypressed mov ax,03h int 10h ret MAIN ENDP @rand: in ax,40h xor ax,randseed mov randseed,ax ret @advance_water: push ds mov ax,bp mov bx,bp xor bx,1000h mov ds,ax mov es,bx xor di,di xor dx,dx @@adv_loop: xor cx,cx xor ax,ax mov dl,es:[di] mov cl,[di-321] mov al,[di-320] add ax,cx mov cl,[di-319] add ax,cx mov cl,[di-1] add ax,cx mov cl,[di+1] add ax,cx mov cl,[di+319] add ax,cx mov cl,[di+320] add ax,cx mov cl,[di+321] add ax,cx sar ax,2 sub ax,dx mov cx,ax sar cx,9 xor ax,cx mov es:[di],al dec di jnz @@adv_loop pop ds ret @show_water: push ds ;comment /* mov dx,03dah in al,dx test al,8 jz $-3 in al,dx test al,8 jnz $-3 ;/* mov ds,bp push 0a000h pop es mov cx,64000/2 xor di,di xor si,si rep movsw @@done: pop ds ret randseed dw ? code ends end main