Index: emu/vid.c
===================================================================
--- emu/vid.c	(revision b6f5f64fb4a1ea7d99d2b74583fec7a25d09bf6e)
+++ emu/vid.c	(revision 4f967e8eb19a1addd39ec92272705cffc64c374d)
@@ -319,7 +319,7 @@
 		}
 
-		int32_t w = (od[1] & 0xfc00) >> 10;
-
-		if (w == 0) {
+		int32_t w64 = (od[1] & 0xfc00) >> 10;
+
+		if (w64 == 0) {
 			ver3("vid obj %d empty", i);
 			continue;
@@ -349,18 +349,19 @@
 
 		int32_t x = (od[1] & 0x03ff) * 2;
-		int32_t off = od[2];
+		int32_t off, fon_h, w;
+
+		if (cb) {
+			off = od[2];
+			int32_t vcr1 = mem[REG_VCR1];
+			fon_h = (vcr1 & 0xf000) >> 12;
+			w = w64 * 4 / 3 * 2 * 8;
+		}
+		else {
+			off = ((od[0] & 0x00c0) << 10) | od[2];
+			fon_h = -1;
+			w = w64 * 16;
+		}
 
 		obj_t *obj = objs + n_objs;
-
-		if (cb) {
-			int32_t vcr1 = mem[REG_VCR1];
-			obj->fon_h = (vcr1 & 0xf000) >> 12;
-			w = w * 4 / 3 * 2 * 8; // 4 words per block, 3 words per 2 chars, 8 pixels per char
-		}
-		else {
-			off |= (od[0] & 0x00c0) << 10;
-			obj->fon_h = -1;
-			w *= 16; // 16 pixels per block
-		}
 
 		obj->x = x;
@@ -370,4 +371,5 @@
 		obj->mem = mem + off;
 		obj->tran = tde;
+		obj->fon_h = fon_h;
 
 		ver2("vid obj %d %c %c %d:%d %d+%d 0x%05x",
