169 lines
4.2 KiB
C
169 lines
4.2 KiB
C
|
/****************************************************************************
|
||
|
|
||
|
THIS SOFTWARE IS NOT COPYRIGHTED
|
||
|
|
||
|
HP offers the following for use in the public domain. HP makes no
|
||
|
warranty with regard to the software or it's performance and the
|
||
|
user accepts the software "AS IS" with all faults.
|
||
|
|
||
|
HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD
|
||
|
TO THIS SOFTWARE INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||
|
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
|
||
|
****************************************************************************/
|
||
|
|
||
|
/* Diagnose register definitions */
|
||
|
|
||
|
|
||
|
#ifdef PCXL
|
||
|
|
||
|
#define CPU_DIAG_0_L2IHPMC_BIT 6 /* Level 2 I-cache error flag */
|
||
|
#define CPU_DIAG_0_L2DHPMC_BIT 8 /* Level 2 D-cache error flag */
|
||
|
#define CPU_DIAG_0_L1IHPMC_BIT 10 /* Level 1 I-cache error flag */
|
||
|
#define CPU_DIAG_0_L2PARERR_BIT 15 /* rightmost bit */
|
||
|
#define CPU_DIAG_0_PREV_HPMC_PREP_BIT 16 /* Previous HPMC finished */
|
||
|
#define CPU_DIAG_0_PWR_FAIL_BIT 17
|
||
|
#define CPU_DIAG_0_EXPECT_HPMC_BIT 18 /* Expecting HPMC */
|
||
|
|
||
|
/* Mask for Read/clear bits in CPU diagnose register 0 */
|
||
|
#define CPU0_MASK 0x02AF0000
|
||
|
|
||
|
#else /* PCXT */
|
||
|
|
||
|
#define CPU_DIAG_0_PREV_HPMC_PREP_BIT 3 /* Previous HPMC finished */
|
||
|
#define CPU_DIAG_0_BOOTING_BIT 4
|
||
|
#define CPU_DIAG_0_EXPECT_HPMC_BIT 5 /* Expecting HPMC */
|
||
|
|
||
|
#define CPU_DIAG_0_DHPMC_BIT 10
|
||
|
#define CPU_DIAG_0_ILPMC_BIT 14
|
||
|
#define CPU_DIAG_0_HTOC_BIT 23
|
||
|
|
||
|
/* Mask for Read/clear bits in CPU diagnose register 0 */
|
||
|
#define CPU0_MASK 0x00220100
|
||
|
|
||
|
#endif
|
||
|
|
||
|
/* Diagnose instruction macros */
|
||
|
|
||
|
#ifdef PCXL
|
||
|
|
||
|
/*** Different PCXL diagnose commands ***/
|
||
|
|
||
|
/* Original mfcpu replaced with the two commands mfcpu_t & mfcpu_c */
|
||
|
mfcpu_t .macro diag_reg,gen_reg
|
||
|
{ 0 .. 5} = 0x5 {26 .. 31}
|
||
|
{ 6 .. 10} = diag_reg {27 .. 31}
|
||
|
{11 .. 15} = 0x0 {27 .. 31}
|
||
|
{16 .. 18} = 0x0 {29 .. 31}
|
||
|
{19 .. 26} = 0xa0 {24 .. 31}
|
||
|
{27 .. 31} = gen_reg {27 .. 31}
|
||
|
.endm
|
||
|
|
||
|
mfcpu_c .macro diag_reg,gen_reg
|
||
|
{ 0 .. 5} = 0x5 {26 .. 31}
|
||
|
{ 6 .. 10} = diag_reg {27 .. 31}
|
||
|
{11 .. 15} = gen_reg {27 .. 31}
|
||
|
{16 .. 18} = 0x0 {29 .. 31}
|
||
|
{19 .. 26} = 0x30 {24 .. 31}
|
||
|
{27 .. 31} = 0x0 {27 .. 31}
|
||
|
.endm
|
||
|
|
||
|
mtcpu .macro gen_reg,diag_reg
|
||
|
{ 0 .. 5} = 0x5 {26 .. 31}
|
||
|
{ 6 .. 10} = diag_reg {27 .. 31}
|
||
|
{11 .. 15} = gen_reg {27 .. 31}
|
||
|
{16 .. 18} = 0x0 {29 .. 31}
|
||
|
{19 .. 26} = 0x12 {24 .. 31}
|
||
|
{27 .. 31} = 0x0 {27 .. 31}
|
||
|
.endm
|
||
|
|
||
|
shdw_gr .macro
|
||
|
{ 0 .. 5} = 0x5 {26 .. 31}
|
||
|
{ 6 .. 10} = 0x0 {27 .. 31}
|
||
|
{11 .. 15} = 0x0 {27 .. 31}
|
||
|
{16 .. 18} = 0x0 {29 .. 31}
|
||
|
{19 .. 26} = 0xd0 {24 .. 31}
|
||
|
{27 .. 31} = 0x0 {27 .. 31}
|
||
|
.endm
|
||
|
|
||
|
gr_shdw .macro
|
||
|
{ 0 .. 5} = 0x5 {26 .. 31}
|
||
|
{ 6 .. 10} = 0x0 {27 .. 31}
|
||
|
{11 .. 15} = 0x0 {27 .. 31}
|
||
|
{16 .. 18} = 0x0 {29 .. 31}
|
||
|
{19 .. 26} = 0xd2 {24 .. 31}
|
||
|
{27 .. 31} = 0x0 {27 .. 31}
|
||
|
.endm
|
||
|
|
||
|
#else
|
||
|
|
||
|
/*** original PCXT version ***/
|
||
|
|
||
|
/* Originally was mfcpu without the _c */
|
||
|
mfcpu_c .macro diag_reg,gen_reg
|
||
|
{ 0 .. 5} = 0x5 {26 .. 31}
|
||
|
{ 6 .. 10} = diag_reg {27 .. 31}
|
||
|
{11 .. 15} = gen_reg {27 .. 31}
|
||
|
{16 .. 18} = 0x0 {29 .. 31}
|
||
|
{19 .. 26} = 0xd0 {24 .. 31}
|
||
|
{27 .. 31} = 0x0 {27 .. 31}
|
||
|
.endm
|
||
|
|
||
|
mtcpu .macro gen_reg,diag_reg
|
||
|
{ 0 .. 5} = 0x5 {26 .. 31}
|
||
|
{ 6 .. 10} = diag_reg {27 .. 31}
|
||
|
{11 .. 15} = gen_reg {27 .. 31}
|
||
|
{16 .. 18} = 0x0 {29 .. 31}
|
||
|
{19 .. 26} = 0xb0 {24 .. 31}
|
||
|
{27 .. 31} = 0x0 {27 .. 31}
|
||
|
.endm
|
||
|
|
||
|
shdw_gr .macro
|
||
|
{ 0 .. 5} = 0x5 {26 .. 31}
|
||
|
{ 6 .. 10} = 0x2 {27 .. 31}
|
||
|
{11 .. 15} = 0x0 {27 .. 31}
|
||
|
{16 .. 18} = 0x1 {29 .. 31}
|
||
|
{19 .. 26} = 0x30 {24 .. 31}
|
||
|
{27 .. 31} = 0x0 {27 .. 31}
|
||
|
.endm
|
||
|
|
||
|
gr_shdw .macro
|
||
|
{ 0 .. 5} = 0x5 {26 .. 31}
|
||
|
{ 6 .. 10} = 0x2 {27 .. 31}
|
||
|
{11 .. 15} = 0x0 {27 .. 31}
|
||
|
{16 .. 18} = 0x0 {29 .. 31}
|
||
|
{19 .. 26} = 0x31 {24 .. 31}
|
||
|
{27 .. 31} = 0x0 {27 .. 31}
|
||
|
.endm
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/* Actual commands used doubled instructions for cpu timing */
|
||
|
|
||
|
|
||
|
#define SHDW_GR shdw_gr ! \
|
||
|
shdw_gr
|
||
|
|
||
|
|
||
|
/* Break instruction definitions */
|
||
|
|
||
|
#define i13BREAK 0xa5a /* im13 field for specified functions */
|
||
|
#define i5REG 0x06 /* Init registers */
|
||
|
#define i5BP 0x09 /* GDB breakpoint */
|
||
|
#define i5PSW 0x0b /* Get PSW */
|
||
|
#define i5INLINE 0x0e /* Get INLINE */
|
||
|
|
||
|
BR_INIT_REGS .macro
|
||
|
break i5REG,i13BREAK
|
||
|
.endm
|
||
|
|
||
|
BR_GET_PSW .macro
|
||
|
break i5PSW,i13BREAK
|
||
|
.endm
|
||
|
|
||
|
BR_INLINE .macro
|
||
|
break i5INLINE,i13BREAK
|
||
|
.endm
|
||
|
|