Im programming mandelbrot set in assembly using SSE. I use interrupt:
mov ax,0x4F02
mov bx,0x107
int 0x10
to set video mode to 1280x1024 pixels with 256 colors, then I enable A20 gate and switch correctly to 32 bit protected mode and allow fpu and sse in cr0 and cr4. I tested some simple SSE instruction and they worked without exceptions. But then I made mandelbrot set and nothing is rendered when i start it (drawing pixels/lines is working fine). I also tried to step the code with debugger but I didnt find any mistake, could someone please look at my code ? thanks for anyhelp (compilling in nasm, running in freedos)
mov edx,0xA0000
xorps xmm7,xmm7
repeat:
movupd xmm0,xmm7
movupd xmm5,[centerimage]
subpd xmm0,xmm5
movupd xmm5,[zoom]
divpd xmm0,xmm5
movupd xmm6,xmm0
xorps xmm0,xmm0
xor ecx,ecx
nextiteration:
movupd xmm1,xmm0
mulpd xmm1,xmm1
hsubpd xmm1,xmm1
movupd xmm2,xmm0
shufpd xmm2,xmm2,0x1
mulpd xmm0,xmm2
haddpd xmm0,xmm0
movsd xmm0,xmm1
addpd xmm0,xmm6
movupd xmm1,xmm0
mulpd xmm1,xmm1
haddpd xmm1,xmm1
ucomisd xmm1,[double4]
ja getcolor
inc ecx
cmp ecx,0xFF
jb nextiteration
xor al,al
jmp drawpixel
getcolor:
mov al,cl
drawpixel:
movupd xmm0,xmm7
movupd xmm5,[double1double1280]
mulpd xmm0,xmm5
haddpd xmm0,xmm0
cvtsd2si edi,xmm0
mov [edx+edi],al
movupd xmm5,[double1double0]
addpd xmm7,xmm5
ucomisd xmm7,[screenX]
jb repeat
movsd xmm7,[double0]
movupd xmm5,[double0double1]
addpd xmm7,xmm5
movupd xmm0,xmm7
shufpd xmm0,xmm0,1
ucomisd xmm0,[screenY]
jb repeat
;movhpd xmm7,[double0]
cli
infloop:
hlt
jmp infloop
centerimage dq 640.0,512.0
zoom dq 50.0,50.0
double1double1280 dq 1.0,1280.0
double1double0 dq 1.0,0.0
double0double1 dq 0.0,1.0
screenX dq 1280.0
screenY dq 1024.0
double0 dq 0.0
double4 dq 4.0