Código de Ensamblador - Sencillo dibujo con el estandard Vesa

Sencillo dibujo con el estandard Vesagráfica de visualizaciones


Ensamblador

estrellaestrellaestrellaestrellaestrella(1)
Publicado el 09 de Julio del 2002 por Octavio Vega Fernández
17.033 visualizaciones desde el 09 de Julio del 2002. Una media de 28 por semana
Codigo fuente en lenguaje ensamblador. Se ensambla con el a86, que hace un dibujo usando el estandard vesa. Es un programa sencillo para observar el funcionamiento de graficos en alta resolucion.

Versión 1
estrellaestrellaestrellaestrellaestrella(1)

Publicado el 09 de Julio del 2002gráfica de visualizaciones de la versión: Versión 1
17.034 visualizaciones desde el 09 de Julio del 2002. Una media de 28 por semana
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
inicio:
       ;buscar un modo de video soportado con 64k colores
	xor cx,cx
	mov cx,2
        l1:
        mov ax,cx
        inc cx
        cmp ax,5
        jnc >l3
        call setvideomode
        test ax,ax
        jz l1
        mov dx,63
        call mandeldibu  ;hacer un dibujo
        l2:
        ret
        l3:  ;return message error
        mov bx,1  ;std output
        mov ah,40h ;dos write function
        mov dx,mesage
        mov cx,endmesage-mesage
        int 21h
        ret
 
mandeldibu:
        mov ax,[w xmax]
        mov cx,[w ymax]
        pusha
        finit
        mov si,mandeldata2
        mov bp,sp
        fild [w xmax] ;xmax
        fdivr [d si+8]  ;lado_x
        fstp [d bp]  ;x_escala
        fild [w ymax] ;ymax
        fdivr [d si+12]  ;lado_y
        fstp [d bp+4]  ;y_escala
        l1:
        finit
        fild [w si+16]
        fild [w bp+14] ;x
        fmul [d bp]    ;x_escala
        fadd [d si]  ;izq
        fild [w bp+12] ;y
        fmul [d bp+4]
        fadd [d si+4]
        fldz
        fldz
        mov cx,[bp+10] ;63
        l3:
        fld 1
        fmul 2
        fld 1
        fmul 2
        fld 1
        fsub 1
        fcomp 7
        fstsw ax
        sahf
        jnb >l4
        fsub
        fadd 4
        fchs
        fxch 2
        fmulp
        fadd 0
        fadd 2
        loop l3
        l4:
        mov bx,[bp+14]
        shl bx,6
        mov bl,64
        sub bl,cl
        mov dl,cl
        shl dl,3
        add dl,64
        shl bl,3
        add bh,bl
        add bl,bl
        call setcolor
        mov cx,[bp+14]
        mov ax,[bp+12]
        call setpixel
        dec [w bp+14]
        jns l1
        mov ax,[w xmax]
        mov [w bp+14],ax
        dec [w bp+12]
        jns l1
        popa
        ret
 
setvideomode: ;videomode en ax
        pusha
        mov bp,sp
        sub sp,256  ;bufer para la bios vesa
	shl ax,3
        mov bx,videomodes64k
        add bx,ax
        mov es,ss
        mov di,sp
        mov cx,[bx]
        db 102
        push [bx+2]
        mov ax,4f01  ;obtener informacion del modo de video
        int 10h
        cmp ax,4fh
        je >l2
        l1:
        ;funcion no soportada u otro error
        mov sp,bp
        popa
        xor ax,ax
        ret
	l2:
	mov bx,cx
        mov ax,4f02
        int 10h  ;fijar el modo de video
        cmp ax,4fh
	jne l1
        mov ax,[di+2] ;windows "a,b"
        and ax,505h
	cmp al,5 ;window "a" es de escritura
	jne l1
        cmp [w di+6],64 ;window size si 64k
	jne l1
        cmp [w di+8],0a000h ;video segment
	jne l1
        pop [w xmax]
        pop [w ymax]
        db 102  ;prefijo de 32 bits
        push [di+12]
        db 102
        pop [fcvesa+1]
        push [w di+16]
        pop [w bytesporlinea]
        push [w di+8]
	pop es
        mov cx,[di+4] ;granularidad ,debe ser una potencia de 2
        xor ax,ax
        shl cx,9
        l1:
        shl cx,1
        jz >l2
        inc al
        jmp l1
        l2:
        mov [cs:fcvesa-1],al
        l3:
        mov [b ACPAG],0
        mov sp,bp
        popa
        ret
 
setcolor:
        ;dl azul
        ;bl verde
        ;bh rojo
        ;retorna bx
     and bx,0f8fch
     shr dl,3
     xchg dl,bl
     xor dh,dh
     shl dx,3
     or bx,dx
     ret
 
setpixel:  ;x en cx,y en ax,color en bx
           mul [w bytesporlinea]
           add cx,cx
           add ax,cx
           adc dl,0
           mov di,ax
           cmp [b ACPAG],dl
           jne >l1
           mov [es:di],bx
           ret
           l1:
           ;vesabank  cambia el banco de memoria de video
           push bx
           mov [b ACPAG],dl
           xor bx,bx ;selecciona ventana 'A' ,que debe ser de escritura
           sal dx,0fh  ;cvar
           fcvesa:
           call 0ffffffffh ;cvar
           pop bx
           mov [w es:di],bx
           ret
 
mandeldata2:
dd -2.0 ; izq
dd  2.0 ; arb
dd  4.0 ; lado_x
dd -4.0 ; lado_y
dw  8   ; limite
videomodes64k:
dw 11ah,1279,1023,0
dw 117h,1023,767,0
dw 114h,799,599,0
dw 111h,639,479,0
dw 10eh,319,199,0
xmax: dw 0
ymax: dw ?
bytesporlinea: dw ?
acpag: db ?  ;numero del banco de memoria
 
mesage: db "no se encontro ningun modo de video valido"
db 10,13
endmesage:



Comentarios sobre la versión: Versión 1 (1)

coure
13 de Agosto del 2002
estrellaestrellaestrellaestrellaestrella
me agrado bastante tu codigo y el programa pero me gustaria sver si utilisaste un assembler com´pleto o el que hay en los modos D.O.S.
pues tengo que realisar un pequeño proyecto y no me permiten usar un assembler completo

y grasis por el codigo

¡¡help¡¡
Responder

Comentar la versión: Versión 1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios

http://lwp-l.com/s256