Miscellaneous bug fixes
This commit is contained in:
+10
-14
@@ -606,7 +606,7 @@ static void vipDrawObjects(VB *sim, int group) {
|
||||
start = group == 0 ? 0 : (sim->vip.spt[group - 1] + 1) & 1023;
|
||||
stop = sim->vip.spt[group];
|
||||
top = (int32_t) sim->vip.xp.sbcount << 3;
|
||||
for (o = stop;; o = (o - 1) & 1023) {
|
||||
for (o = stop; o != -1; o = o == start ? -1 : (o - 1) & 1023) {
|
||||
obj = &sim->vip.ram[0x3E000 | o << 3];
|
||||
|
||||
/* Validate object is enabled */
|
||||
@@ -655,15 +655,12 @@ static void vipDrawObjects(VB *sim, int group) {
|
||||
pixel = src[sy << 1 | sx >> 2] >> ((sx & 3) << 1) & 3;
|
||||
if (pixel != 0)
|
||||
dest[y] = plt[pixel]; /* TODO: Research clocks */
|
||||
} /* x */
|
||||
} /* y */
|
||||
|
||||
} /* y */
|
||||
} /* x */
|
||||
|
||||
} /* i */
|
||||
|
||||
/* All objects have been drawn */
|
||||
if (o == start)
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -792,13 +789,12 @@ static void vipDrawWorld(VB *sim, uint8_t *world, uint16_t attr) {
|
||||
param += 4;
|
||||
break;
|
||||
case 2: /* Affine */
|
||||
dx = (int32_t) (int16_t) vipParam(param | 6) << 7;
|
||||
dy = (int32_t) (int16_t) vipParam(param | 8) << 7;
|
||||
mp = (int32_t) (int16_t) vipParam(param | 2);
|
||||
mx = ((int32_t) (int16_t) vipParam(param ) << 13) +
|
||||
dx * (left - ((mp < 0) ^ i ? mp : 0));
|
||||
my = ((int32_t) (int16_t) vipParam(param | 4) << 13) +
|
||||
dy * (left - ((mp < 0) ^ i ? mp : 0));
|
||||
dx = (int32_t) (int16_t) vipParam(param|6) << 7;
|
||||
dy = (int32_t) (int16_t) vipParam(param|8) << 7;
|
||||
mp = (int32_t) (int16_t) vipParam(param|2);
|
||||
mp = left - wx - ((mp < 0) ^ i ? mp : 0);
|
||||
mx = ((int32_t) (int16_t) vipParam(param ) << 13) + dx*mp;
|
||||
my = ((int32_t) (int16_t) vipParam(param|4) << 13) + dy*mp;
|
||||
param += 16;
|
||||
}
|
||||
|
||||
@@ -882,7 +878,7 @@ static void vipRender(VB *sim) {
|
||||
attr = busReadBuffer(world, VB_U16);
|
||||
|
||||
/* Non-graphical world */
|
||||
if (attr & 0x0020) /* END */
|
||||
if (attr & 0x0040) /* END */
|
||||
break; /* Control world */
|
||||
if ((attr & 0xC000) == 0) /* LON, RON */
|
||||
continue; /* Dummy world */
|
||||
|
||||
Reference in New Issue
Block a user