Adjust GAMESTART logic, consolidate VIP sign-extensions
This commit is contained in:
parent
04e79c9151
commit
155a3aa678
|
@ -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 */
|
||||
|
|
43
core/vip.c
43
core/vip.c
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue