foo
[dos_low3d] / src / 3dgfx.c
index 535fa98..f53ead6 100644 (file)
@@ -70,10 +70,12 @@ void g3d_draw(int prim, struct g3d_vertex *varr, int vcount)
 int32_t vpscale(int32_t x, int32_t s, int32_t shift);
 #pragma aux vpscale = \
        "add eax, 0x100" \
-       "mul ebx" \
+       "imul ebx" \
        "shrd eax, edx, cl" \
        parm [eax] [ebx] [ecx] \
-       value [eax];
+       value [eax] \
+       modify [eax edx];
+
 
 void g3d_draw_prim(int prim, struct g3d_vertex *varr)
 {
@@ -97,6 +99,9 @@ void g3d_draw_prim(int prim, struct g3d_vertex *varr)
                if(v[i].w != 0) {
                        v[i].x = (v[i].x << 4) / (v[i].w >> 4);
                        v[i].y = (v[i].y << 4) / (v[i].w >> 4);
+               } else {
+                       v[i].x >>= 8;
+                       v[i].y >>= 8;
                }
 
                /* viewport transform */