Bonjour à tous,
Dans le cadre d'un devoir, je dois réaliser un jeu à l'aide d'EMU8086.
J'en ai réalisé une bonne partie sans trop de soucis mais je bloque ici sur un problème qui à mon avis est très courant mais qui pourtant me fait m'arracher les cheveux.
Pour l'affichage de mon jeu, j'ai réalisé une boucle qui affiche 25FPS.
Cela fonctionne très bien mais le phénomène bien connu de "flickering" se produit.
Pour le résoudre j'ai donc décidé de mettre en place un Back Buffering.
Je voulais donc stocker cela dans un tableau de 64000 cases étant donné que je travaille en 320x200 (mode 13h).
Mais voilà, emu8086 en a décidé autrement...
Je me doutais bien que je ne pouvais pas stocker ce tableau dans mon segment unique de .COM
J'ai donc décidé de créer un nouveau segment de données dédié à ce tableau.
Mais même en faisant cela, le tableau dépasse sur le segment de code et au "blit" je me retrouve avec un joli fouilli:
La solution aurait pu être de passer vers un .EXE mais cela a donné exactement le même résultat...
Si vous avez des retours d'expérience ou des idées pour m'aider je vous serais extrêmement reconnaissant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 #make_COM# CSEG SEGMENT start: ASSUME CS:CSEG, DS:CSEG, ES:CSEG org 100h mov ah, 0 ; On passe en mode graphique. mov al, 13h ; mode 13h = 320x200 pixels, 256 colors. int 10h ; set it! BlitScreen: pusha ;On place es dans la memoire video mov ax, 0A000h mov es, ax ;On place ds dans le buffer video mov ax, DoubleBuffer mov ds, ax ;Addresse de depart de ds:si mov si, offset backBuffer ;Addresse de destination de es:di mov di, 0 ;Nombre de tours mov cx,64000/2 rep movsw popa ret ENDS DoubleBuffer SEGMENT backBuffer db 64000 dup(0) ENDS
Par avance merci !
Partager