begin process at 2010 03 17 21:19:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Applications Windows

 > GAME OF LIFE

GAME OF LIFE


 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



 Sources de la même categorie

Source avec Zip Source avec une capture BASE DE REGISTRE ET TRANSFERE DE BMP DANS SYSTEM32 par vincent2795
Source avec Zip RÉSOUDRE LES PROBLÈMES DE VERSIONS DU SYSTÈME OU DE DLL par ToutEnMasm
Source avec Zip DEXPLORE INTERFACE HELP2 MICROSOFT DOCUMENT EXPLORER par ToutEnMasm
Source avec Zip DEXPLORE INTERFACE HELP2 MICROSOFT DOCUMENT EXPLORER par ToutEnMasm
Source avec Zip Source avec une capture ANALYSEUR DE TRAFIC (WINPCAP) par ORdream

Commentaires et avis

Commentaire de Bombela le 21/04/2004 15:02:12

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

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.

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

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....  

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.... 

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...

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.

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".

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...

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?

Commentaire de ert le 06/05/2004 15:18:20

Il est bizarre par rapport à quoi ?

 Ajouter un commentaire




Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales