@@ -257,8 +257,8 @@ void GPU::cmdPolygon(PolygonArgs arg) {
257257 TextureInfo tex;
258258
259259 for (int i = 0 ; i < arg.getVertexCount (); i++) {
260- v[i].pos .x = extend_sign<10 >(arguments[ptr] & 0xffff );
261- v[i].pos .y = extend_sign<10 >((arguments[ptr++] & 0xffff0000 ) >> 16 );
260+ v[i].pos .x = extend_sign<11 >(arguments[ptr] & 0xffff );
261+ v[i].pos .y = extend_sign<11 >((arguments[ptr++] & 0xffff0000 ) >> 16 );
262262
263263 if (!arg.isRawTexture && (!arg.gouroudShading || i == 0 )) v[i].color .raw = arguments[0 ] & 0xffffff ;
264264 if (arg.isTextureMapped ) {
@@ -310,8 +310,8 @@ void GPU::cmdLine(LineArgs arg) {
310310 line.isSemiTransparent = arg.semiTransparency ;
311311 line.gouroudShading = arg.gouroudShading ;
312312
313- line.pos [0 ].x = extend_sign<10 >(arguments[ptr] & 0xffff );
314- line.pos [0 ].y = extend_sign<10 >((arguments[ptr++] & 0xffff0000 ) >> 16 );
313+ line.pos [0 ].x = extend_sign<11 >(arguments[ptr] & 0xffff );
314+ line.pos [0 ].y = extend_sign<11 >((arguments[ptr++] & 0xffff0000 ) >> 16 );
315315 line.color [0 ].raw = (arguments[0 ] & 0xffffff );
316316
317317 if (arg.gouroudShading ) {
@@ -320,8 +320,8 @@ void GPU::cmdLine(LineArgs arg) {
320320 line.color [1 ] = line.color [0 ];
321321 }
322322
323- line.pos [1 ].x = extend_sign<10 >((arguments[ptr] & 0xffff ));
324- line.pos [1 ].y = extend_sign<10 >((arguments[ptr++] & 0xffff0000 ) >> 16 );
323+ line.pos [1 ].x = extend_sign<11 >((arguments[ptr] & 0xffff ));
324+ line.pos [1 ].y = extend_sign<11 >((arguments[ptr++] & 0xffff0000 ) >> 16 );
325325
326326 drawLine (line);
327327
@@ -353,12 +353,12 @@ void GPU::cmdRectangle(RectangleArgs arg) {
353353 int16_t h = arg.getSize ();
354354
355355 if (arg.size == 0 ) {
356- w = extend_sign<10 >(arguments[(arg.isTextureMapped ? 3 : 2 )] & 0xffff );
357- h = extend_sign<10 >((arguments[(arg.isTextureMapped ? 3 : 2 )] & 0xffff0000 ) >> 16 );
356+ w = extend_sign<11 >(arguments[(arg.isTextureMapped ? 3 : 2 )] & 0xffff );
357+ h = extend_sign<11 >((arguments[(arg.isTextureMapped ? 3 : 2 )] & 0xffff0000 ) >> 16 );
358358 }
359359
360- int16_t x = extend_sign<10 >(arguments[1 ] & 0xffff );
361- int16_t y = extend_sign<10 >((arguments[1 ] & 0xffff0000 ) >> 16 );
360+ int16_t x = extend_sign<11 >(arguments[1 ] & 0xffff );
361+ int16_t y = extend_sign<11 >((arguments[1 ] & 0xffff0000 ) >> 16 );
362362
363363 primitive::Rect rect;
364364 rect.pos = vec2 (x, y);
@@ -630,8 +630,8 @@ void GPU::writeGP0(uint32_t data) {
630630 drawingArea.bottom = (arguments[0 ] & 0xffc00 ) >> 10 ;
631631 } else if (command == 0xe5 ) {
632632 // Drawing offset
633- drawingOffsetX = extend_sign<10 >(arguments[0 ] & 0x7ff );
634- drawingOffsetY = extend_sign<10 >((arguments[0 ] >> 11 ) & 0x7ff );
633+ drawingOffsetX = extend_sign<11 >(arguments[0 ] & 0x7ff );
634+ drawingOffsetY = extend_sign<11 >((arguments[0 ] >> 11 ) & 0x7ff );
635635 } else if (command == 0xe6 ) {
636636 // Mask bit setting
637637 gp0_e6._reg = arguments[0 ];
0 commit comments