1
0
mirror of https://github.com/rcornwell/sims.git synced 2026-01-13 15:27:04 +00:00

KA10: Fixed Quantum timer to match hardware.

This commit is contained in:
Richard Cornwell 2019-07-22 23:05:59 -04:00
parent f35a8a995d
commit 284a7586ca
2 changed files with 15 additions and 11 deletions

View File

@ -813,12 +813,12 @@ int opflags[] = {
void
set_quantum()
{
double us;
sim_cancel(&cpu_unit[1]);
if ((qua_time & RSIGN) == 0) {
double us;
us = (double)(RSIGN - qua_time);
(void)sim_activate_after_d(&cpu_unit[1], us);
}
if (qua_time & BIT17)
return;
us = (double)(BIT17 - qua_time);
(void)sim_activate_after_d(&cpu_unit[1], us);
}
/*
@ -830,7 +830,10 @@ load_quantum()
if (sim_is_active(&cpu_unit[1])) {
double us;
us = sim_activate_time_usecs (&cpu_unit[1]);
qua_time = RSIGN - (uint32)us;
if ((uint32)us > BIT17)
qua_time = BIT17;
else
qua_time = (BIT17 - (uint32)us) & RMASK;
sim_cancel(&cpu_unit[1]);
}
}
@ -841,11 +844,11 @@ load_quantum()
uint32
get_quantum()
{
uint32 t = 0;
uint32 t = qua_time;
if (sim_is_active(&cpu_unit[1])) {
double us;
us = sim_activate_time_usecs (&cpu_unit[1]);
t = RSIGN - (uint32)us;
t = (BIT17 - (uint32)us) & RMASK;
}
return t;
}
@ -3491,9 +3494,10 @@ dpnorm:
AB = (AB + 1) & RMASK;
MB = M[AB]; /* WD 3 */
/* Store Quantum */
qua_time = MB & RMASK;
qua_time = MB & (RMASK|BIT17);
set_quantum();
fault_data = (MB >> 18) & RMASK;
fault_data &= ~1; /* Clear high quantum bit */
mem_prot = 0;
if ((fault_data & 0777772) != 0)
mem_prot = 1;
@ -5997,9 +6001,8 @@ qua_srv(UNIT * uptr)
{
if ((fault_data & 1) == 0 && pi_enable && !pi_pending && (FLAGS & USER) != 0) {
mem_prot = 1;
fault_data |= 1;
}
qua_time = RSIGN;
qua_time = BIT17;
return SCPE_OK;
}
#endif

View File

@ -167,6 +167,7 @@ extern DEBTAB crd_debug[];
#define BIT9 00000400000000LL
#define BIT10 00000200000000LL
#define BIT10_35 00000377777777LL
#define BIT17 00000001000000LL
#define MANT 00000777777777LL
#define EXPO 00377000000000LL
#define FPHBIT 01000000000000000000000LL