Implement additional pseudo-halt addresses
This commit is contained in:
+35
-23
@@ -420,7 +420,7 @@ static void vipTransferColumn(VB *sim, int32_t eye) {
|
||||
[sim->vip.dp.buffer][eye][sim->vip.dp.column];
|
||||
|
||||
/* Output is disabled */
|
||||
if ((sim->vip.dp.disp & sim->vip.dp.synce) == 0) {
|
||||
if (!sim->vip.dp.enabled) {
|
||||
for (y = 0; y < 224; y += 16)
|
||||
for (z = 0; z < 16; z++, dest += 384)
|
||||
*dest = 0;
|
||||
@@ -465,10 +465,11 @@ static int vipEmulateDisplay(VB *sim, uint32_t clocks) {
|
||||
switch (sim->vip.dp.step) {
|
||||
|
||||
case 0: /* 0ms - FCLK rising edge */
|
||||
sim->vip.dp.clocks = vipClocksMs(3);
|
||||
sim->vip.dp.fclk = 1;
|
||||
sim->vip.dp.step = 1;
|
||||
sim->vip.dp.until = vipClocksMs(8);
|
||||
sim->vip.dp.clocks = vipClocksMs(3);
|
||||
sim->vip.dp.enabled = sim->vip.dp.disp & sim->vip.dp.synce;
|
||||
sim->vip.dp.fclk = 1;
|
||||
sim->vip.dp.step = 1;
|
||||
sim->vip.dp.until = vipClocksMs(8);
|
||||
vipThrow(sim, 0x0010); /* FRAMESTART */
|
||||
|
||||
/* Game frame */
|
||||
@@ -479,6 +480,7 @@ static int vipEmulateDisplay(VB *sim, uint32_t clocks) {
|
||||
/* Initiate drawing procedure */
|
||||
if (sim->vip.xp.step == 0) {
|
||||
sim->vip.dp.buffer ^= 1;
|
||||
sim->vip.xp.enabled = 1;
|
||||
sim->vip.xp.overtime = 0;
|
||||
sim->vip.xp.step = 1;
|
||||
vipThrow(sim, 0x0008); /* GAMESTART */
|
||||
@@ -498,9 +500,11 @@ static int vipEmulateDisplay(VB *sim, uint32_t clocks) {
|
||||
/* 0ms-3ms - Idle */
|
||||
|
||||
case 1: /* 3ms - L*BSY rising edge */
|
||||
if (sim->vip.dp.buffer == 0)
|
||||
sim->vip.dp.l0bsy = 1;
|
||||
else sim->vip.dp.l1bsy = 1;
|
||||
if (sim->vip.dp.enabled) {
|
||||
if (sim->vip.dp.buffer == 0)
|
||||
sim->vip.dp.l0bsy = 1;
|
||||
else sim->vip.dp.l1bsy = 1;
|
||||
}
|
||||
sim->vip.dp.column = 0;
|
||||
sim->vip.dp.cta = 0x3DC00 | (uint32_t)sim->vip.cta.cta_l<<1;
|
||||
sim->vip.dp.step = 2;
|
||||
@@ -521,13 +525,15 @@ static int vipEmulateDisplay(VB *sim, uint32_t clocks) {
|
||||
break;
|
||||
|
||||
case 3: /* 8ms - L*BSY falling edge */
|
||||
if (sim->vip.dp.buffer == 0)
|
||||
sim->vip.dp.l0bsy = 0;
|
||||
else sim->vip.dp.l1bsy = 0;
|
||||
if (sim->vip.dp.enabled) {
|
||||
if (sim->vip.dp.buffer == 0)
|
||||
sim->vip.dp.l0bsy = 0;
|
||||
else sim->vip.dp.l1bsy = 0;
|
||||
vipThrow(sim, 0x0002); /* LFBEND */
|
||||
}
|
||||
sim->vip.dp.clocks = vipClocksMs(2);
|
||||
sim->vip.dp.step = 4;
|
||||
sim->vip.dp.until = vipClocksMs(10);
|
||||
vipThrow(sim, 0x0002); /* LFBEND */
|
||||
break;
|
||||
|
||||
/* 8ms-10ms - Idle */
|
||||
@@ -541,9 +547,11 @@ static int vipEmulateDisplay(VB *sim, uint32_t clocks) {
|
||||
/* 10ms-13ms - Idle */
|
||||
|
||||
case 5: /* 13ms - R*BSY rising edge */
|
||||
if (sim->vip.dp.buffer == 0)
|
||||
sim->vip.dp.r0bsy = 1;
|
||||
else sim->vip.dp.r1bsy = 1;
|
||||
if (sim->vip.dp.enabled) {
|
||||
if (sim->vip.dp.buffer == 0)
|
||||
sim->vip.dp.r0bsy = 1;
|
||||
else sim->vip.dp.r1bsy = 1;
|
||||
}
|
||||
sim->vip.dp.column = 0;
|
||||
sim->vip.dp.cta = 0x3DE00 | (uint32_t)sim->vip.cta.cta_r<<1;
|
||||
sim->vip.dp.step = 6;
|
||||
@@ -563,13 +571,16 @@ static int vipEmulateDisplay(VB *sim, uint32_t clocks) {
|
||||
break;
|
||||
|
||||
case 7: /* 18ms - R*BSY falling edge */
|
||||
if (sim->vip.dp.buffer == 0)
|
||||
sim->vip.dp.r0bsy = 0;
|
||||
else sim->vip.dp.r1bsy = 0;
|
||||
sim->vip.dp.clocks = vipClocksMs(2);
|
||||
sim->vip.dp.step = 0;
|
||||
sim->vip.dp.until = vipClocksMs(2);
|
||||
vipThrow(sim, 0x0004); /* RFBEND */
|
||||
if (sim->vip.dp.enabled) {
|
||||
if (sim->vip.dp.buffer == 0)
|
||||
sim->vip.dp.r0bsy = 0;
|
||||
else sim->vip.dp.r1bsy = 0;
|
||||
vipThrow(sim, 0x0004); /* RFBEND */
|
||||
}
|
||||
sim->vip.dp.clocks = vipClocksMs(2);
|
||||
sim->vip.dp.enabled = 0;
|
||||
sim->vip.dp.step = 0;
|
||||
sim->vip.dp.until = vipClocksMs(2);
|
||||
if (vipOnFrame(sim))
|
||||
return 1;
|
||||
break;
|
||||
@@ -1009,7 +1020,8 @@ static void vipEmulateDrawing(VB *sim, uint32_t clocks) {
|
||||
break;
|
||||
|
||||
case 4: /* Drawing complete */
|
||||
sim->vip.xp.step = 0;
|
||||
sim->vip.xp.enabled = 0;
|
||||
sim->vip.xp.step = 0;
|
||||
if (sim->vip.dp.buffer == 0)
|
||||
sim->vip.xp.f1bsy = 0;
|
||||
else sim->vip.xp.f0bsy = 0;
|
||||
|
||||
Reference in New Issue
Block a user