From e054a78398903577d4d7fa48bc00365fb46a70b7 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Mon, 18 Jan 2016 07:02:06 -0800 Subject: [PATCH] PDP11: Add descriptions to register names and bitfields to the PSW register. --- PDP11/pdp11_cpu.c | 140 ++++++++++++++++++++++++++-------------------- 1 file changed, 79 insertions(+), 61 deletions(-) diff --git a/PDP11/pdp11_cpu.c b/PDP11/pdp11_cpu.c index a4364072..3185edfd 100644 --- a/PDP11/pdp11_cpu.c +++ b/PDP11/pdp11_cpu.c @@ -385,62 +385,80 @@ int32 trap_clear[TRAP_V_MAX] = { /* trap clears */ UNIT cpu_unit = { UDATA (NULL, UNIT_FIX|UNIT_BINK, INIMEMSIZE) }; +const char *psw_modes[] = {"K", "E", "S", "U"}; + + +BITFIELD psw_bits[] = { + BIT(C), /* Carry */ + BIT(V), /* Overflow */ + BIT(Z), /* Zero */ + BIT(N), /* Negative */ + BIT(TBIT), /* trace trap */ + BITFFMT(IPL,3,%d), /* IPL */ + BIT(FPD), /* First Part Done */ + BITNCF(2), /* MBZ */ + BIT(RS), /* Register Set */ + BITFNAM(PM,2,psw_modes), /* Previous Access Mode */ + BITFNAM(CM,2,psw_modes), /* Current Access Mode */ + ENDBITS +}; + REG cpu_reg[] = { - { ORDATA (PC, saved_PC, 16) }, - { ORDATA (R0, REGFILE[0][0], 16) }, - { ORDATA (R1, REGFILE[1][0], 16) }, - { ORDATA (R2, REGFILE[2][0], 16) }, - { ORDATA (R3, REGFILE[3][0], 16) }, - { ORDATA (R4, REGFILE[4][0], 16) }, - { ORDATA (R5, REGFILE[5][0], 16) }, - { ORDATA (SP, STACKFILE[MD_KER], 16) }, - { ORDATA (R00, REGFILE[0][0], 16) }, - { ORDATA (R01, REGFILE[1][0], 16) }, - { ORDATA (R02, REGFILE[2][0], 16) }, - { ORDATA (R03, REGFILE[3][0], 16) }, - { ORDATA (R04, REGFILE[4][0], 16) }, - { ORDATA (R05, REGFILE[5][0], 16) }, - { ORDATA (R10, REGFILE[0][1], 16) }, - { ORDATA (R11, REGFILE[1][1], 16) }, - { ORDATA (R12, REGFILE[2][1], 16) }, - { ORDATA (R13, REGFILE[3][1], 16) }, - { ORDATA (R14, REGFILE[4][1], 16) }, - { ORDATA (R15, REGFILE[5][1], 16) }, - { ORDATA (KSP, STACKFILE[MD_KER], 16) }, - { ORDATA (SSP, STACKFILE[MD_SUP], 16) }, - { ORDATA (USP, STACKFILE[MD_USR], 16) }, - { ORDATA (PSW, PSW, 16) }, - { GRDATA (CM, PSW, 8, 2, PSW_V_CM) }, - { GRDATA (PM, PSW, 8, 2, PSW_V_PM) }, - { FLDATA (RS, PSW, PSW_V_RS) }, - { FLDATA (FPD, PSW, PSW_V_FPD) }, - { GRDATA (IPL, PSW, 8, 3, PSW_V_IPL) }, - { FLDATA (T, PSW, PSW_V_TBIT) }, - { FLDATA (N, PSW, PSW_V_N) }, - { FLDATA (Z, PSW, PSW_V_Z) }, - { FLDATA (V, PSW, PSW_V_V) }, - { FLDATA (C, PSW, PSW_V_C) }, - { ORDATA (PIRQ, PIRQ, 16) }, - { ORDATA (STKLIM, STKLIM, 16) }, - { ORDATA (FAC0H, FR[0].h, 32) }, - { ORDATA (FAC0L, FR[0].l, 32) }, - { ORDATA (FAC1H, FR[1].h, 32) }, - { ORDATA (FAC1L, FR[1].l, 32) }, - { ORDATA (FAC2H, FR[2].h, 32) }, - { ORDATA (FAC2L, FR[2].l, 32) }, - { ORDATA (FAC3H, FR[3].h, 32) }, - { ORDATA (FAC3L, FR[3].l, 32) }, - { ORDATA (FAC4H, FR[4].h, 32) }, - { ORDATA (FAC4L, FR[4].l, 32) }, - { ORDATA (FAC5H, FR[5].h, 32) }, - { ORDATA (FAC5L, FR[5].l, 32) }, - { ORDATA (FPS, FPS, 16) }, - { ORDATA (FEA, FEA, 16) }, - { ORDATA (FEC, FEC, 4) }, - { ORDATA (MMR0, MMR0, 16) }, - { ORDATA (MMR1, MMR1, 16) }, - { ORDATA (MMR2, MMR2, 16) }, - { ORDATA (MMR3, MMR3, 16) }, + { ORDATAD (PC, saved_PC, 16, "Program Counter") }, + { ORDATAD (R0, REGFILE[0][0], 16, "General Purpose R0") }, + { ORDATAD (R1, REGFILE[1][0], 16, "General Purpose R1") }, + { ORDATAD (R2, REGFILE[2][0], 16, "General Purpose R2") }, + { ORDATAD (R3, REGFILE[3][0], 16, "General Purpose R3") }, + { ORDATAD (R4, REGFILE[4][0], 16, "General Purpose R4") }, + { ORDATAD (R5, REGFILE[5][0], 16, "General Purpose R5") }, + { ORDATAD (SP, STACKFILE[MD_KER], 16, "Stack Pointer"), }, + { ORDATAD (R00, REGFILE[0][0], 16, "Register File R00") }, + { ORDATAD (R01, REGFILE[1][0], 16, "Register File R01") }, + { ORDATAD (R02, REGFILE[2][0], 16, "Register File R02") }, + { ORDATAD (R03, REGFILE[3][0], 16, "Register File R03") }, + { ORDATAD (R04, REGFILE[4][0], 16, "Register File R04") }, + { ORDATAD (R05, REGFILE[5][0], 16, "Register File R05") }, + { ORDATAD (R10, REGFILE[0][1], 16, "Register File R10") }, + { ORDATAD (R11, REGFILE[1][1], 16, "Register File R11") }, + { ORDATAD (R12, REGFILE[2][1], 16, "Register File R12") }, + { ORDATAD (R13, REGFILE[3][1], 16, "Register File R13") }, + { ORDATAD (R14, REGFILE[4][1], 16, "Register File R14") }, + { ORDATAD (R15, REGFILE[5][1], 16, "Register File R15") }, + { ORDATAD (KSP, STACKFILE[MD_KER], 16, "Kernel Stack Pointer" ) }, + { ORDATAD (SSP, STACKFILE[MD_SUP], 16, "Supervisor Stack Pointer" ) }, + { ORDATAD (USP, STACKFILE[MD_USR], 16, "User Stack Pointer" ) }, + { ORDATADF(PSW, PSW, 16, "Processor Status Word", psw_bits) }, + { GRDATAD (CM, PSW, 8, 2, PSW_V_CM, "Current Mode") }, + { GRDATAD (PM, PSW, 8, 2, PSW_V_PM, "Previous Mode") }, + { FLDATAD (RS, PSW, PSW_V_RS, "Register Set") }, + { FLDATAD (FPD, PSW, PSW_V_FPD, "First Part Done") }, + { GRDATAD (IPL, PSW, 8, 3, PSW_V_IPL, "Interrupt Priority Level") }, + { FLDATAD (T, PSW, PSW_V_TBIT, "Trace Trap") }, + { FLDATAD (N, PSW, PSW_V_N, "Condition Code: Negative") }, + { FLDATAD (Z, PSW, PSW_V_Z, "Condition Code: Zero") }, + { FLDATAD (V, PSW, PSW_V_V, "Condition Code: Overflow") }, + { FLDATAD (C, PSW, PSW_V_C, "Condition Code: Carry") }, + { ORDATAD (PIRQ, PIRQ, 16, "Programmed Interrupt Request") }, + { ORDATAD (STKLIM, STKLIM, 16, "Stack Limit") }, + { ORDATAD (FAC0H, FR[0].h, 32, "Floating Point: R0 High") }, + { ORDATAD (FAC0L, FR[0].l, 32, "Floating Point: R0 Low") }, + { ORDATAD (FAC1H, FR[1].h, 32, "Floating Point: R1 High") }, + { ORDATAD (FAC1L, FR[1].l, 32, "Floating Point: R1 Low") }, + { ORDATAD (FAC2H, FR[2].h, 32, "Floating Point: R2 High") }, + { ORDATAD (FAC2L, FR[2].l, 32, "Floating Point: R2 Low") }, + { ORDATAD (FAC3H, FR[3].h, 32, "Floating Point: R3 High") }, + { ORDATAD (FAC3L, FR[3].l, 32, "Floating Point: R3 Low") }, + { ORDATAD (FAC4H, FR[4].h, 32, "Floating Point: R4 High") }, + { ORDATAD (FAC4L, FR[4].l, 32, "Floating Point: R4 Low") }, + { ORDATAD (FAC5H, FR[5].h, 32, "Floating Point: R5 High") }, + { ORDATAD (FAC5L, FR[5].l, 32, "Floating Point: R5 Low") }, + { ORDATAD (FPS, FPS, 16, "FP Status") }, + { ORDATAD (FEA, FEA, 16, "FP Exception Code") }, + { ORDATAD (FEC, FEC, 4, "FP Exception Address") }, + { ORDATAD (MMR0, MMR0, 16, "MMR0 - Status") }, + { ORDATAD (MMR1, MMR1, 16, "MMR1 - R+/-R") }, + { ORDATAD (MMR2, MMR2, 16, "MMR2 - saved PC") }, + { ORDATAD (MMR3, MMR3, 16, "MMR3 - 22b status") }, { GRDATA (KIPAR0, APRFILE[000], 8, 16, 16) }, { GRDATA (KIPDR0, APRFILE[000], 8, 16, 0) }, { GRDATA (KIPAR1, APRFILE[001], 8, 16, 16) }, @@ -537,13 +555,13 @@ REG cpu_reg[] = { { GRDATA (UDPDR6, APRFILE[076], 8, 16, 0) }, { GRDATA (UDPAR7, APRFILE[077], 8, 16, 16) }, { GRDATA (UDPDR7, APRFILE[077], 8, 16, 0) }, - { BRDATA (IREQ, int_req, 8, 32, IPL_HLVL), REG_RO }, - { ORDATA (TRAPS, trap_req, TRAP_V_MAX) }, - { FLDATA (WAIT, wait_state, 0) }, + { BRDATAD (IREQ, int_req, 8, 32, IPL_HLVL, "Interrupt Requests"), REG_RO }, + { ORDATAD (TRAPS, trap_req, TRAP_V_MAX, "Trap Requests") }, + { FLDATAD (WAIT, wait_state, 0, "Wait State") }, { FLDATA (WAIT_ENABLE, wait_enable, 0), REG_HIDDEN }, - { ORDATA (STOP_TRAPS, stop_trap, TRAP_V_MAX) }, - { FLDATA (STOP_VECA, stop_vecabort, 0) }, - { FLDATA (STOP_SPA, stop_spabort, 0) }, + { ORDATAD (STOP_TRAPS, stop_trap, TRAP_V_MAX, "Stop on Trap") }, + { FLDATAD (STOP_VECA, stop_vecabort, 0, "Stop on Vec Abort") }, + { FLDATAD (STOP_SPA, stop_spabort, 0, "Stop on SP Abort") }, { FLDATA (AUTOCON, autcon_enb, 0), REG_HRO }, { BRDATA (PCQ, pcq, 8, 16, PCQ_SIZE), REG_RO+REG_CIRC }, { ORDATA (PCQP, pcq_p, 6), REG_HRO },