Added HELP device REGISTERS support and register definitions for the VAX CPU device
This commit is contained in:
parent
923d5411f5
commit
19f8fccbc1
2 changed files with 130 additions and 84 deletions
|
@ -408,55 +408,55 @@ UNIT cpu_unit = {
|
||||||
};
|
};
|
||||||
|
|
||||||
REG cpu_reg[] = {
|
REG cpu_reg[] = {
|
||||||
{ HRDATA (PC, R[nPC], 32) },
|
{ HRDATAD (PC, R[nPC], 32, "program counter") },
|
||||||
{ HRDATA (R0, R[0], 32) },
|
{ HRDATAD (R0, R[0], 32, "General Purpose Register 0") },
|
||||||
{ HRDATA (R1, R[1], 32) },
|
{ HRDATAD (R1, R[1], 32, "General Purpose Register 1") },
|
||||||
{ HRDATA (R2, R[2], 32) },
|
{ HRDATAD (R2, R[2], 32, "General Purpose Register 2") },
|
||||||
{ HRDATA (R3, R[3], 32) },
|
{ HRDATAD (R3, R[3], 32, "General Purpose Register 3") },
|
||||||
{ HRDATA (R4, R[4], 32) },
|
{ HRDATAD (R4, R[4], 32, "General Purpose Register 4") },
|
||||||
{ HRDATA (R5, R[5], 32) },
|
{ HRDATAD (R5, R[5], 32, "General Purpose Register 5") },
|
||||||
{ HRDATA (R6, R[6], 32) },
|
{ HRDATAD (R6, R[6], 32, "General Purpose Register 6") },
|
||||||
{ HRDATA (R7, R[7], 32) },
|
{ HRDATAD (R7, R[7], 32, "General Purpose Register 7") },
|
||||||
{ HRDATA (R8, R[8], 32) },
|
{ HRDATAD (R8, R[8], 32, "General Purpose Register 8") },
|
||||||
{ HRDATA (R9, R[9], 32) },
|
{ HRDATAD (R9, R[9], 32, "General Purpose Register 9") },
|
||||||
{ HRDATA (R10, R[10], 32) },
|
{ HRDATAD (R10, R[10], 32, "General Purpose Register 10") },
|
||||||
{ HRDATA (R11, R[11], 32) },
|
{ HRDATAD (R11, R[11], 32, "General Purpose Register 11") },
|
||||||
{ HRDATA (R12, R[12], 32) },
|
{ HRDATAD (R12, R[12], 32, "General Purpose Register 12") },
|
||||||
{ HRDATA (R13, R[13], 32) },
|
{ HRDATAD (R13, R[13], 32, "General Purpose Register 13") },
|
||||||
{ HRDATA (R14, R[14], 32) },
|
{ HRDATAD (R14, R[14], 32, "General Purpose Register 14") },
|
||||||
{ HRDATA (AP, R[nAP], 32) },
|
{ HRDATAD (AP, R[nAP], 32, "Alias for R12") },
|
||||||
{ HRDATA (FP, R[nFP], 32) },
|
{ HRDATAD (FP, R[nFP], 32, "Alias for R13") },
|
||||||
{ HRDATA (SP, R[nSP], 32) },
|
{ HRDATAD (SP, R[nSP], 32, "Alias for R14") },
|
||||||
{ HRDATA (PSL, PSL, 32) },
|
{ HRDATAD (PSL, PSL, 32, "processor status longword") },
|
||||||
{ HRDATA (CC, PSL, 4) },
|
{ HRDATAD (CC, PSL, 4, "condition codes, PSL<3:0>") },
|
||||||
{ HRDATA (KSP, KSP, 32) },
|
{ HRDATAD (KSP, KSP, 32, "kernel stack pointer") },
|
||||||
{ HRDATA (ESP, ESP, 32) },
|
{ HRDATAD (ESP, ESP, 32, "executive stack pointer") },
|
||||||
{ HRDATA (SSP, SSP, 32) },
|
{ HRDATAD (SSP, SSP, 32, "supervisor stack pointer") },
|
||||||
{ HRDATA (USP, USP, 32) },
|
{ HRDATAD (USP, USP, 32, "user stack pointer") },
|
||||||
{ HRDATA (IS, IS, 32) },
|
{ HRDATAD (IS, IS, 32, "interrupt stack pointer") },
|
||||||
{ HRDATA (SCBB, SCBB, 32) },
|
{ HRDATAD (SCBB, SCBB, 32, "system control block base") },
|
||||||
{ HRDATA (PCBB, PCBB, 32) },
|
{ HRDATAD (PCBB, PCBB, 32, "process control block base") },
|
||||||
{ HRDATA (P0BR, P0BR, 32) },
|
{ HRDATAD (P0BR, P0BR, 32, "P0 base register") },
|
||||||
{ HRDATA (P0LR, P0LR, 22) },
|
{ HRDATAD (P0LR, P0LR, 22, "P0 length register") },
|
||||||
{ HRDATA (P1BR, P1BR, 32) },
|
{ HRDATAD (P1BR, P1BR, 32, "P1 base register") },
|
||||||
{ HRDATA (P1LR, P1LR, 22) },
|
{ HRDATAD (P1LR, P1LR, 22, "P1 length register") },
|
||||||
{ HRDATA (SBR, SBR, 32) },
|
{ HRDATAD (SBR, SBR, 32, "system base register") },
|
||||||
{ HRDATA (SLR, SLR, 22) },
|
{ HRDATAD (SLR, SLR, 22, "system length register") },
|
||||||
{ HRDATA (SISR, SISR, 16) },
|
{ HRDATAD (SISR, SISR, 16, "software interrupt summary register") },
|
||||||
{ HRDATA (ASTLVL, ASTLVL, 4) },
|
{ HRDATAD (ASTLVL, ASTLVL, 4, "AST level register") },
|
||||||
{ FLDATA (MAPEN, mapen, 0) },
|
{ FLDATAD (MAPEN, mapen, 0, "memory management enable") },
|
||||||
{ FLDATA (PME, pme, 0) },
|
{ FLDATAD (PME, pme, 0, "performance monitor enable") },
|
||||||
{ HRDATA (TRPIRQ, trpirq, 8) },
|
{ HRDATAD (TRPIRQ, trpirq, 8, "trap/interrupt pending") },
|
||||||
{ FLDATA (CRDERR, crd_err, 0) },
|
{ FLDATAD (CRDERR, crd_err, 0, "correctible read data error flag") },
|
||||||
{ FLDATA (MEMERR, mem_err, 0) },
|
{ FLDATAD (MEMERR, mem_err, 0, "memory error flag") },
|
||||||
{ FLDATA (HLTPIN, hlt_pin, 0) },
|
{ FLDATA (HLTPIN, hlt_pin, 0) },
|
||||||
{ HRDATA (IDLE_MASK, cpu_idle_mask, 16), REG_HIDDEN },
|
{ HRDATA (IDLE_MASK, cpu_idle_mask, 16), REG_HIDDEN },
|
||||||
{ DRDATA (IDLE_INDX, cpu_idle_type, 4), REG_HRO },
|
{ DRDATA (IDLE_INDX, cpu_idle_type, 4), REG_HRO },
|
||||||
{ DRDATA (IDLE_ENAB, sim_idle_enab, 4), REG_HRO },
|
{ DRDATA (IDLE_ENAB, sim_idle_enab, 4), REG_HRO },
|
||||||
{ BRDATA (PCQ, pcq, 16, 32, PCQ_SIZE), REG_RO+REG_CIRC },
|
{ BRDATAD (PCQ, pcq, 16, 32, PCQ_SIZE, "PC prior to last PC change or interrupt;"), REG_RO+REG_CIRC },
|
||||||
{ HRDATA (PCQP, pcq_p, 6), REG_HRO },
|
{ HRDATA (PCQP, pcq_p, 6), REG_HRO },
|
||||||
{ HRDATA (BADABO, badabo, 32), REG_HRO },
|
{ HRDATA (BADABO, badabo, 32), REG_HRO },
|
||||||
{ HRDATA (WRU, sim_int_char, 8) },
|
{ HRDATAD (WRU, sim_int_char, 8, "interrupt character") },
|
||||||
{ HRDATA (MODEL, sys_model, 32), REG_HRO },
|
{ HRDATA (MODEL, sys_model, 32), REG_HRO },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
|
|
46
scp.c
46
scp.c
|
@ -1007,10 +1007,37 @@ for (i = 0; (dptr = sim_devices[i]) != NULL; i++) {
|
||||||
fprintf (st, "h{elp} %sn ATTACH\t type help for unit %sn ATTACH command\n", dptr->name, dptr->name);
|
fprintf (st, "h{elp} %sn ATTACH\t type help for unit %sn ATTACH command\n", dptr->name, dptr->name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (dptr->registers) {
|
||||||
|
REG *rptr;
|
||||||
|
|
||||||
|
for (rptr = dptr->registers; rptr->name != NULL; rptr++) {
|
||||||
|
if (rptr->desc) {
|
||||||
|
fprintf (st, "h{elp} %s REGISTERS\t type help for device %s register variables\n", dptr->name, dptr->name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void fprint_reg_help (FILE *st, DEVICE *dptr)
|
||||||
|
{
|
||||||
|
REG *rptr;
|
||||||
|
t_bool found = FALSE;
|
||||||
|
|
||||||
|
for (rptr = dptr->registers; rptr->name != NULL; rptr++) {
|
||||||
|
if (rptr->desc) {
|
||||||
|
if (!found)
|
||||||
|
fprintf (st, "%s device registers:\n", dptr->name);
|
||||||
|
found = TRUE;
|
||||||
|
fprintf (st, " %-9s %s\n", rptr->name, rptr->desc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found)
|
||||||
|
fprintf (st, "No register help is available for the %s device\n", dptr->name);
|
||||||
|
}
|
||||||
|
|
||||||
t_stat help_cmd (int32 flag, char *cptr)
|
t_stat help_cmd (int32 flag, char *cptr)
|
||||||
{
|
{
|
||||||
char gbuf[CBUFSIZE];
|
char gbuf[CBUFSIZE];
|
||||||
|
@ -1044,6 +1071,18 @@ if (*cptr) {
|
||||||
if (sim_log)
|
if (sim_log)
|
||||||
fprintf (sim_log, "h{elp} %s ATTACH\t type help for device %s ATTACH command\n", dptr->name, dptr->name);
|
fprintf (sim_log, "h{elp} %s ATTACH\t type help for device %s ATTACH command\n", dptr->name, dptr->name);
|
||||||
}
|
}
|
||||||
|
if (dptr->registers) {
|
||||||
|
REG *rptr;
|
||||||
|
|
||||||
|
for (rptr = dptr->registers; rptr->name != NULL; rptr++) {
|
||||||
|
if (rptr->desc) {
|
||||||
|
fprintf (stdout, "h{elp} %s REGISTERS\t type help for device %s register variables\n", dptr->name, dptr->name);
|
||||||
|
if (sim_log)
|
||||||
|
fprintf (sim_log, "h{elp} %s REGISTERS\t type help for device %s register variables\n", dptr->name, dptr->name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1101,6 +1140,12 @@ if (*cptr) {
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
cmdp = NULL;
|
cmdp = NULL;
|
||||||
|
if (0 == MATCH_CMD (gbuf, "REGISTERS")) {
|
||||||
|
fprint_reg_help (stdout, dptr);
|
||||||
|
if (sim_log)
|
||||||
|
fprint_reg_help (sim_log, dptr);
|
||||||
|
}
|
||||||
|
else {
|
||||||
if ((dptr->help == NULL) && (cmdp == NULL)) {
|
if ((dptr->help == NULL) && (cmdp == NULL)) {
|
||||||
fprintf (stdout, "No help available for the %s device\n", dptr->name);
|
fprintf (stdout, "No help available for the %s device\n", dptr->name);
|
||||||
if (sim_log)
|
if (sim_log)
|
||||||
|
@ -1152,6 +1197,7 @@ if (*cptr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
fprint_help (stdout);
|
fprint_help (stdout);
|
||||||
if (sim_log)
|
if (sim_log)
|
||||||
|
|
Loading…
Add table
Reference in a new issue