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

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
Si vous avez des retours d'expérience ou des idées pour m'aider je vous serais extrêmement reconnaissant.
Par avance merci !