begin process at 2008 09 05 11:05:14
1 237 164 membres
122 nouveaux aujourd'hui
14 312 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

GAME OF LIFE


Information sur la source

Description

;

Source

  • ;The Game of Life is a cellular automata program, where each pixel on the screen
  • ;will live or die in each generation based upon some arbitrary rules.
  • ;Specifically, if a pixel has three neighbors, it lives to the next generation.
  • ;If an empty cell has two neighbors, it becomes populated in the next generation.
  • ;Otherwise, that pixel gets cleared for the next generation. In this program, we
  • ;generate an initial screen image using the paint program from last class. We
  • ;then make a future image of the video screen in our offscreen buffer, then when
  • ;complete, copy to the video.
  • ; source file for assembling to binary files
  • ; build with:
  • ; nasmw -f bin -o life.com life.asm
  • org 100h
  • section .text
  • mov ax,13h
  • int 10h ;256 color graphics mode
  • mov ax,0a000h ;video buffer
  • mov es,ax ;pointer for segment
  • xor di,di ;offset
  • mov cx,32000 ;number of words in video
  • xor ax,ax ;clear AX
  • rep stosw ;and store in video buffer
  • mov ax,1 ;show mouse
  • int 33h
  • M0:
  • mov ax,0b21h ;check keyboard status
  • int 21h
  • cmp al,0 ;are any characters pending?
  • jne Game
  • mov ax,3 ;get mouse status call
  • int 33h
  • cmp bx,0 ;is mouse up
  • je M0 ;loop till pressed
  • M1: mov ax,0b21h ;check keyboard status
  • int 21h
  • cmp al,0 ;are any characters pending?
  • jne Game
  • mov ax,3 ;get fresh copy of mouse coordinates
  • int 33h
  • mov ah,0ch ;write dot at coordinate
  • mov al,1 ;color value
  • shr cx,1 ;mouse scale offset fix
  • dec cx ;escape mouse overwrite in win95
  • int 10h
  • mov ax,3
  • int 33h
  • cmp bx,0
  • jne M1
  • mov ax,0b21h ;check keyboard status
  • int 21h
  • cmp al,0 ;are any characters pending?
  • je M0
  • Game:
  • mov ax,2 ;hide cursor function
  • int 33h
  • mov cx,100
  • G1: mov ax,ds ;segment address
  • mov es,ax ;now pointed to by ES
  • push cx
  • mov di,Screen
  • mov cx,32000 ;number of words in video
  • xor ax,ax ;clear AX
  • rep stosw ;and store in video buffer (cleared)
  • mov word [X],318 ;X goes from 1 to 318 (0 to 319 excluding boundaries)
  • G2: mov word [Y],198 ;Y goes from 1 to 198 (0 to 199 excluding boundaries)
  • G3: call Count ;count of neighbors lands in AX
  • cmp AX,2 ;survive threshold
  • jne G4 ;if not, check for three
  • call GetDot ;do we have a current cell here to survive?
  • je G4 ;if not, don't set
  • call SetDot ;make color 2
  • G4: cmp AX,3 ;check generation
  • jne G5 ;no spawn if not 3
  • call SetDot ;else set color 3
  • G5: dec word[Y] ;move up
  • jne G3 ;if not at top
  • dec word[X] ;move left
  • jne G2 ;if not at left
  • mov ax,0a000h ;video buffer
  • mov es,ax
  • xor di,di ;destination pointer
  • mov si,Screen ;source pointer
  • mov cx,32000
  • rep movsw ;copy to video
  • mov ax,ds ;reset extra segment to data segment
  • mov es,ax
  • pop cx
  • loop G1
  • mov ax,3 ;put video back into text mode
  • int 10h
  • mov ax,4c00h
  • int 21h
  • GetDot: ;check for cell on screen at coordinates in X and Y
  • push ax
  • push bx
  • push dx
  • push es
  • mov ax,0a000h ;video segment
  • mov es,ax ;pointer
  • mov ax,[Y] ;y coord
  • mov bx,320 ;dots per Y
  • mul bx ;DX:AX has answer (DX = 0, AX = row offset)
  • add ax,[X] ;add X coordinate
  • mov bx,ax ;use BX as pointer
  • mov al,[es:bx] ;get
  • cmp al,0 ;is cell zero? return in flag
  • pop es
  • pop dx
  • pop bx
  • pop ax
  • ret
  • SetDot: ;mov al to coordinates in X and Y
  • push ax
  • push bx
  • push dx
  • push ax ;store data on stack
  • mov ax,[Y] ;y coord
  • mov bx,320 ;dots per Y
  • mul bx ;DX:AX has answer (DX = 0, AX = row offset)
  • add ax,[X] ;add X coordinate
  • mov bx,ax ;use BX as pointer
  • add bx,Screen ;add in offset of screen buffer
  • pop ax ;get count value as color
  • mov [es:bx],al ;store
  • pop dx
  • pop bx
  • pop ax
  • ret
  • Count:
  • push bx
  • push cx
  • push dx
  • push es
  • mov ax,0a000h ;video buffer segment
  • mov es,ax
  • mov ax,[Y] ;y coord
  • mov bx,320 ;dots per Y
  • mul bx ;DX:AX has answer (DX = 0, AX = row offset)
  • add ax,[X] ;add X coordinate
  • mov bx,ax ;use BX as pointer
  • xor ax,ax ;clear AX
  • xor dx,dx ;just a convenient zero
  • ; 2 3 4
  • ; 0 1
  • ; 5 6 7
  • cmp dl,[es:bx-1] ;check left
  • je C1 ;if clear, skip add
  • inc ax
  • C1: cmp dl,[es:bx+1] ;check right
  • je C2 ;if clear, skip add
  • inc ax
  • C2: cmp dl,[es:bx-321] ;check top left
  • je C3 ;if clear, skip add
  • inc ax
  • C3: cmp dl,[es:bx-320] ;check above
  • je C4 ;if clear, skip add
  • inc ax
  • C4: cmp dl,[es:bx-319] ;check upper right
  • je C5 ;if clear, skip add
  • inc ax
  • C5: cmp dl,[es:bx+319] ;check below left
  • je C6 ;if clear, skip add
  • inc ax
  • C6: cmp dl,[es:bx+320] ;check below
  • je C7 ;if clear, skip add
  • inc ax
  • C7: cmp dl,[es:bx+321] ;check below right
  • je C8 ;if clear, skip add
  • inc ax
  • C8: pop es
  • pop dx
  • pop cx
  • pop bx
  • ret
  • section .data
  • X dw 0 ;X coordinate during regeneration
  • Y dw 0 ;Y coordinate during regeneration
  • section .bss
  • Screen resb 64000 ;copy of screen in mode 13H
;The Game of Life is a cellular automata program, where each pixel on the screen 
;will live or die in each generation based upon some arbitrary rules. 
;Specifically, if a pixel has three neighbors, it lives to the next generation. 
;If an empty cell has two neighbors, it becomes populated in the next generation. 
;Otherwise, that pixel gets cleared for the next generation. In this program, we 
;generate an initial screen image using the paint program from last class. We 
;then make a future image of the video screen in our offscreen buffer, then when 
;complete, copy to the video. 
; source file for assembling to binary files
; build with:
;    nasmw -f bin -o life.com life.asm

org 100h

section .text

	mov	ax,13h
	int	10h		;256 color graphics mode

	mov	ax,0a000h     	;video buffer
	mov	es,ax  		;pointer for segment
	xor	di,di  		;offset
	mov	cx,32000       	;number of words in video
	xor	ax,ax          	;clear AX
	rep	stosw          	;and store in video buffer

	mov	ax,1           	;show mouse
	int	33h

M0:  
	mov	ax,0b21h	;check keyboard status
	int	21h
	cmp	al,0   		;are any characters pending?
	jne	Game

	mov	ax,3   		;get mouse status call
	int	33h
	cmp	bx,0   		;is mouse up
	je	M0     		;loop till pressed

M1:	mov	ax,0b21h	;check keyboard status
	int	21h
	cmp	al,0   		;are any characters pending?
	jne	Game
     
	mov	ax,3   		;get fresh copy of mouse coordinates
	int	33h

	mov	ah,0ch 		;write dot at coordinate
	mov	al,1   		;color value
	shr	cx,1   		;mouse scale offset fix
	dec	cx		;escape mouse overwrite in win95
	int	10h

	mov	ax,3
	int	33h
	cmp	bx,0
	jne	M1
     
	mov	ax,0b21h	;check keyboard status
	int	21h
	cmp	al,0   		;are any characters pending?
	je	M0

Game:

	mov	ax,2   		;hide cursor function
	int	33h
	mov	cx,100
     
G1:	mov	ax,ds  		;segment address
	mov	es,ax  		;now pointed to by ES
	push	cx
	mov	di,Screen
	mov	cx,32000	;number of words in video
	xor	ax,ax  		;clear AX
	rep	stosw	      	;and store in video buffer (cleared)
      
	mov	word [X],318	;X goes from 1 to 318 (0 to 319 excluding boundaries)
G2:	mov	word [Y],198	;Y goes from 1 to 198 (0 to 199 excluding boundaries)
G3:	call	Count		;count of neighbors lands in AX
	cmp	AX,2		;survive threshold
	jne	G4		;if not, check for three
	call	GetDot  	;do we have a current cell here to survive?
	je	G4      	;if not, don't set
	call	SetDot		;make color 2
G4:	cmp	AX,3		;check generation
	jne	G5		;no spawn if not 3
	call	SetDot		;else set color 3
G5:	dec	word[Y]  	;move up
	jne	G3		;if not at top
	dec	word[X]     	;move left
	jne	G2		;if not at left
     
	mov	ax,0a000h	;video buffer
	mov	es,ax
	xor	di,di		;destination pointer
     
	mov	si,Screen	;source pointer
     
	mov	cx,32000
	rep	movsw		;copy to video
     
	mov	ax,ds   	;reset extra segment to data segment
	mov	es,ax

	pop	cx
	loop	G1      
    
	mov	ax,3		;put video back into text mode
	int	10h
	mov	ax,4c00h        
	int	21h
     
GetDot:				;check for cell on screen at coordinates in X and Y
	push    ax
	push    bx
	push    dx
	push    es
    
	mov     ax,0a000h	;video segment
	mov     es,ax		;pointer
	mov     ax,[Y]    	;y coord
	mov     bx,320  	;dots per Y
	mul     bx      	;DX:AX has answer (DX = 0, AX = row offset)
	add     ax,[X]    	;add X coordinate
	mov     bx,ax   	;use BX as pointer
	mov     al,[es:bx]	;get
	cmp     al,0    	;is cell zero? return in flag
    
	pop     es
	pop     dx
	pop     bx
	pop     ax
	ret
    
SetDot: 			;mov al to coordinates in X and Y
	push    ax
	push    bx
	push    dx
    
	push    ax      	;store data on stack
	mov     ax,[Y]    	;y coord
	mov     bx,320  	;dots per Y
	mul     bx      	;DX:AX has answer (DX = 0, AX = row offset)
	add     ax,[X]    	;add X coordinate
	mov     bx,ax   	;use BX as pointer
	add     bx,Screen  	;add in offset of screen buffer
	pop     ax      	;get count value as color
	mov     [es:bx],al	;store
    
	pop     dx
	pop     bx
	pop     ax
	ret
    
Count:
	push	bx
	push    cx
	push    dx
	push    es
    
	mov     ax,0a000h   	;video buffer segment
	mov     es,ax
	mov     ax,[Y] 		;y coord
	mov     bx,320 		;dots per Y
	mul     bx    		;DX:AX has answer (DX = 0, AX = row offset)
	add     ax,[X] 		;add X coordinate
	mov     bx,ax  		;use BX as pointer
	xor	ax,ax  		;clear AX
    
	xor	dx,dx  		;just a convenient zero
    
;			  2 3 4 
;			  0   1
;			  5 6 7

	cmp	dl,[es:bx-1] 	;check left
	je      C1     		;if clear, skip add
	inc	ax
    
C1:	cmp	dl,[es:bx+1]  	;check right
	je      C2     		;if clear, skip add
	inc     ax
    
C2:	cmp     dl,[es:bx-321]  ;check top left
	je      C3     		;if clear, skip add
	inc     ax
    
C3:	cmp     dl,[es:bx-320]  ;check above
	je      C4     		;if clear, skip add
	inc     ax
    
C4:	cmp     dl,[es:bx-319]  ;check upper right
	je      C5     		;if clear, skip add
	inc     ax
    
C5:	cmp     dl,[es:bx+319]  ;check below left
	je      C6     		;if clear, skip add
	inc     ax
    
C6:	cmp     dl,[es:bx+320]  ;check below
	je      C7     		;if clear, skip add
	inc     ax
    
C7:	cmp     dl,[es:bx+321] 	;check below right
	je      C8     		;if clear, skip add
	inc     ax
    
    
C8:	pop     es
	pop     dx
	pop     cx
	pop     bx
	ret
    
section .data
X	dw      0		;X coordinate during regeneration
Y       dw	0		;Y coordinate during regeneration

section .bss
Screen  resb    64000       	;copy of screen in mode 13H
  • signaler à un administrateur
    Commentaire de Bombela le 21/04/2004 15:02:12

    J'arrive pas à comprendre ce que ça fait...

  • signaler à un administrateur
    Commentaire de sobolev le 23/04/2004 08:24:31

    C'est le "jeu de la vie", un automate cellulaire. Grace à des règles simple dictant la vie ou la mort d'un cellule on obtient comme une forme de vie.

    Certaines structures sont stables, d'autres périodiques.

    Il existe d'autre automates cellulaires. Le jeu de la vie n'est pas le seul.
    Y a plein de sites qui en parlent et qui proposent des applications avec des formes rigolotes qui se déplacent.

  • signaler à un administrateur
    Commentaire de juki_webmaster le 24/04/2004 16:50:40

    Traduction :
    ;  Le jeu de la vie est un programme cellulaire d'automates, où chaque Pixel sur l'écran;  vivra ou mourra dans chaque génération basée sur quelques règles arbitraires.    Spécifiquement, si un Pixel a trois voisins, elle vit à la prochaine génération.    Si une cellule vide a deux voisins, elle devient peuplée dans la prochaine génération.    Autrement, ce Pixel obtient s'est dégagé pour la prochaine génération.  Dans ce programme, nous;  produisez d'une première image d'écran en utilisant le programme de peinture de la dernière classe.  Nous;  faites alors une future image de l'écran visuel dans le notre offscreen l'amortisseur, puis quand;  accomplissez, copiez à la vidéo.    fichier source pour se réunir aux dossiers binaires;  construction avec:    nasmw - casier de f - o life.com life.asm

  • signaler à un administrateur
    Commentaire de ert le 27/04/2004 10:32:52

    Il faut chercher ailleurs car l'évolutionnisme ne marche pas.

    Mais pour ceux qui croient aux comptes de fée pour adulte... ( je pense à la "théorie" de l'Évolution du dénommé Darwin) je les invite à jouer au LOTO (avec seulement 39 caractères...) avant de croire que l'on a pu aligner par hasard 2500 livres de Caractères (plus de 3 Milliards de Caractères en tout entre autre 3 Go) SANS AUCUNE ERREUR... PAR HASARD !!! Et ce également pour toutes les espèces Animales & Végétales bien sur....  

  • signaler à un administrateur
    Commentaire de ert le 27/04/2004 10:38:45

    Il faut chercher ailleurs car l'évolutionnisme ne marche pas.

    Pour ceux qui croient aux comptes de fée pour adulte... ( je pense a la "théorie" de l'Évolution du dénommé Darwin) je les invite a jouer au LOTO (avec seulement 39 caractères...) avant de croire que l'on a pu aligner par hasard 2500 livres de 500 pages chacun a 4000 de Caractères par page (plus de 3 Milliards de Caractères en tout, entre autre un logiciel de + de 3 Go) SANS AUCUNE ERREUR... PAR HASARD !!! Et ce également pour toutes les espèces Animales & Végétales bien sur.... 

  • signaler à un administrateur
    Commentaire de Dean le 27/04/2004 23:54:06

    Hum... tu veux parler de l'apparition de la vie sur terre ? Je suis allé faire un petit tour sur ton site, et ce qui est étonnant, c'est que je me suis rendu compte que d'autres pensaient que l'homme était un robot, ou du moins un singe modifié génétiquement par des extraterrestres potentiels. Quant à la théorie de l'évolution elle marche tout de même : la processus de sélection existe bel et bien avec l'ADN, ce qui ne remet pas pour autant en cause nos origines "particulières"...

    Cependant, je pense qu'il est inutile d'adhérer à un mouvement tel que celui de R*** pour avoir de telles convictions ; la société nous corrompt, c'est évident, mais de là à se laisser embrigader de l'autre côté par une quelconque organisation qui prétend détenir la vérité, il y a un pas que je ne franchirai pas.

    Pour le hasard, il semble ne pas exister, tout semble régi par des lois (un Dieu ?) ; ainsi je suis moi-même esclave du déterminisme lorsque j'écris ces quelques lignes...

  • signaler à un administrateur
    Commentaire de ert le 28/04/2004 11:54:16

          s~"°º. Et si c'était les robots qui devenaient humains ? .º°"~s

    Toutes choses est composées d'un amas d'atome.
    Seulement si je veux une voiture, un ordinateur, un logiciel, il faut créer car sinon il n'y a rien, à par de la poussière. On le comprend pour les objets mais pas pour la biologie !

    On a beau vouloir faire des simulations informatiques de l'évolutionnisme, aucune ne marche.

    Par contre en ce qui concerne la Robotique. Il me parait plus concevable de comparer la vie à la robotique puisque le support informatique devient biologique, que l'A.D.N est un système de codage de même ordre que le binaire et puisque l'intelligence artificielle évolue de plus en plus. Donc les différences entre robotique et biologique n'aurons aucunes différences dans peu de temps.

    Sur mon site tu peux écouter une émission sur le mythe du golem et de l'intelligence artificielle, en haut a droite.

    Quant à adhérer ou non à un mouvement, chacun est libre de faire ce qu'il veut. Darwin prétendait détenir la vérité. Cette théorie est devenue totalitaire.

  • signaler à un administrateur
    Commentaire de sobolev le 29/04/2004 11:08:07

    Marrant ton site! Y a longtemps que j'avais pas autant rigolé.

    Le "jeu de la vie" n'est pas utilisé pour simuler l'évolution biologique. Il sert dans plein de domaines comme la physique.
    Tiens y a une proposition de thèse: "Solidification d'une gouttelette surfondue - modélisation par une technique couplant automates cellulaires et éléments finis et confrontations expérimentales".

  • signaler à un administrateur
    Commentaire de ert le 29/04/2004 11:44:59

    Autant pour moi !
    La prochaine fois change de nom ou detail le pourquoi de ce prog car "GAME OF LIFE" porte à confusion surtout qd on voit le résultat, qui est pratiquement le même que "GESTION DE MICROS ORGANISMES" que l'on retrouve sur ce site.

    Quant à la visite de mon site, je doute fort que l'on puisse faire une critique objective en restant à peine 3 minutes ;-)
    Il aura l'avantage de te faire rire...

  • signaler à un administrateur
    Commentaire de sobolev le 03/05/2004 13:47:57

    Le jeu de la vie est un automate cellulaire dont les règles ont été définies par J. Conway en 1970.
    C'est pas moi qui ai choisi le nom...

    Ton site il est bisard quand même non? C'était pas l'objectif?

  • signaler à un administrateur
    Commentaire de ert le 06/05/2004 15:18:20

    Il est bizarre par rapport à quoi ?

Ajouter un commentaire

Pub



Appels d'offres

Recherche developpeur ...
Budget : 700€
SITE MARCHAND LOCATION...
Budget : 3 000€
SITE MARCHAND POUR HOTEL
Budget : 4 000€

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Boutique

Boutique de goodies CodeS-SourceS