Adjust GAMESTART logic, consolidate VIP sign-extensions

This commit is contained in:
Guy Perfect 2025-01-17 09:43:58 -06:00
parent 04e79c9151
commit 155a3aa678
2 changed files with 24 additions and 23 deletions

View File

@ -153,10 +153,6 @@ static void busRead(VB *sim, uint32_t address, int type, int32_t *value) {
case 0: /* VIP */
vipRead(sim, address, type, value);
switch (type) {
case VB_S8 : *value = (int8_t ) *value; break;
case VB_S16: *value = (int16_t) *value; break;
}
break;
case 1: break; /* VSU */

View File

@ -654,29 +654,29 @@ static int vipEmulateDisplay(VB *sim, uint32_t clocks) {
vipThrow(sim, 0x0010); /* FRAMESTART */
/* Game frame */
if (sim->vip.xp.xpen) {
if (sim->vip.xp.frame >= sim->vip.frmcyc) {
sim->vip.dp.buffer ^= sim->vip.xp.toggle;
sim->vip.xp.frame = 0;
sim->vip.xp.toggle = 0;
if (sim->vip.xp.frame >= sim->vip.frmcyc) {
sim->vip.xp.frame = 0;
/* Initiate drawing procedure */
if (sim->vip.xp.step == 0) {
sim->vip.xp.enabled = 1;
sim->vip.xp.overtime = 0;
sim->vip.xp.step = 1;
vipThrow(sim, 0x0008); /* GAMESTART */
}
vipThrow(sim, 0x0008); /* GAMESTART */
if (sim->vip.xp.step != 0) {
sim->vip.xp.overtime = 1;
vipThrow(sim, 0x8000); /* TIMEERR */
}
/* Drawing procedure has run into overtime */
else {
sim->vip.xp.overtime = 1;
vipThrow(sim, 0x8000); /* TIMEERR */
}
/* Initiate drawing procedure */
else if (sim->vip.xp.xpen) {
sim->vip.dp.buffer ^= sim->vip.xp.toggle;
sim->vip.xp.enabled = 1;
sim->vip.xp.overtime = 0;
sim->vip.xp.step = 1;
sim->vip.xp.toggle = 0;
}
} else sim->vip.xp.frame++;
}
/* Not a game frame */
else sim->vip.xp.frame++;
break;
/* 0ms-3ms - Idle */
@ -1316,8 +1316,13 @@ static void vipRead(VB *sim, uint32_t address, int type, int32_t *value) {
*value = 0;
/* I/O register */
else if (address < 0x60000)
else if (address < 0x60000) {
*value = vipReadIO(sim, address, type);
switch (type) {
case VB_S8 : *value = (int8_t ) *value; break;
case VB_S16: *value = (int16_t) *value; break;
}
}
/* Unmapped */
else if (address < 0x78000)