Nibble256b by Tube27
.386 ASSUME CS:CODE,DS:CODE NIBLTB equ 512+256 NIBLENGTH equ 5 NIBPOSX equ 26 NIBPOSY equ 8 NIBDELTALENG equ 4 NIBSPEED equ 30000 CODE SEGMENT USE16 org 100h Start: mov al,13h int 10h ;--------------------------- clear nibbles table ------------------------------ ;wypelnia zawsze puste pola '-', potem do konca linii (128 pol - 256b) zajete '*' ;i jeszcze cala kolejna linie na zajete ; ----**** ******** ;a potem cofe sie o ta jedna linie mov di,NIBLTB mov cx,256 mov dx,51 jmp @fill2 @fill1: mov cl,80 xor al,al ;moze xor ax,ax rep stosw mov cl,(128-80)+128 ;256-80 @fill2: mov ax,2 rep stosw sub di,256 dec dx jnz @fill1 mov fs,ax ;// set snake direction (to rite side) ;------------------------------------------------------------------------------ push 0a000h pop es mov bx,NIBPOSX*2+256*NIBPOSY+NIBLTB mov bp,NIBLENGTH+3-NIBDELTALENG jmp @putrandom ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ mainloop: xor di,di mov si,NIBLTB+256 mov cl,199 @yloop: mov dx,319 push si @xloop: lodsw dec ax mov ax,33+3*256 jg @after1 mov al,45 je @after1 mov al,133 @after1: and ah,dl jz @nopea dec si dec si @nopea: and ah,cl jnz @okkk shr al,1 @okkk: stosb dec dx jge @xloop pop si test cl,3 jnz @nope2 add si,256 @nope2: dec cx jge @yloop ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------ inc cx mov di,fs mov ah,1 int 16h jz @nokeypressed mov dl,ah mov si,offset keytab mov cl,4 @checkkey: lodsb cmp al,dl lodsw jnz @nopekey1 test ax,di jnz @nopekey1 xchg ax,di @nopekey1: loop @checkkey mov ax,0c00h int 21h @nokeypressed: dec dl ;// check if esc key was pressed jz quiting xchg ax,di mov fs,ax add bl,al add bh,ah ;------------------------------------------------------------------------------ cmp [bx],bp jae @notnew cmp word ptr [bx],1 ja quiting @check: jnz @NotNew ;////////////////////////////////////////////////////////////////////////////// ;////////////////////// snake has eaten growing box /////////////////////////// ;//// - lenghten snake & put next random growing box ////////////////////////// ;////////////////////////////////////////////////////////////////////////////// @putrandom: add bp,[dleng] ;// length += dlength add [dleng],4 ;// dlength += 4 mov ax,gs add ax,9248h ror ax,3 mov gs,ax and ax,4095 xchg ax,dx find0: mov si,NIBLTB+256 mov ch,(50*128)/256 find1: lodsw or ax,ax jnz nopefind dec dx jle found nopefind: loop find1 jmp find0 found: inc word ptr [si-2] ;------------------------------------------------------------------------------ ;////////////////////////////////////////////////////////////////////////////// ;//////////////// put snake head ////////////////////////////////////////////// @notnew: mov word ptr ds:[bx],3 @after: ;------------------------------------------------------------------------------ mov si,NIBLTB mov ch,52 @wwr: lodsw cmp ax,3 jb @nopenib1 inc ax cmp ax,bp jbe @oki1 xor ax,ax @oki1: mov [si-2],ax @nopenib1: loop @wwr ;------------------------------------------------------------------------------ ;////////////////////////////////////////////////////////////////////////////// ;//////////////// wait some time ////////////////////////////////////////////// ;////////////////////////////////////////////////////////////////////////////// mov ah,86h mov dx,NIBSPEED xor cx,cx int 15h jmp mainloop quiting: ret ;////////////////////////////////////////////////////////////////////////////// ;------------------------------------------------------------------------------ keytab db 75,0FEh,0 db 77,2,0 db 72,0,0FFh db 80,0,1 dleng dw NIBDELTALENG nibtab db 256*53 dup (?) CODE ENDS END Start
[ back to the prod ]