/**************************************************************************** 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. ****************************************************************************/ .space $TEXT$ .subspa $CODE$,access=0x2c #include "diagnose.h" #if 0 #include "iva_table.h" #endif R_gr0 .equ 0 R_gr1 .equ 4 R_gr2 .equ 8 R_gr3 .equ 12 R_gr4 .equ 16 R_gr5 .equ 20 R_gr6 .equ 24 R_gr7 .equ 28 R_gr8 .equ 32 R_gr9 .equ 36 R_gr10 .equ 40 R_gr11 .equ 44 R_gr12 .equ 48 R_gr13 .equ 52 R_gr14 .equ 56 R_gr15 .equ 60 R_gr16 .equ 64 R_gr17 .equ 68 R_gr18 .equ 72 R_gr19 .equ 76 R_gr20 .equ 80 R_gr21 .equ 84 R_gr22 .equ 88 R_gr23 .equ 92 R_gr24 .equ 96 R_gr25 .equ 100 R_gr26 .equ 104 R_gr27 .equ 108 R_gr28 .equ 112 R_gr29 .equ 116 R_gr30 .equ 120 R_gr31 .equ 124 R_rctr .equ 160 R_cpu0 .equ 164 R_pidr1 .equ 168 R_pidr2 .equ 172 R_ccr .equ 176 R_sar .equ 180 R_pidr3 .equ 184 R_pidr4 .equ 188 R_iva .equ 192 R_eiem .equ 196 R_itmr .equ 200 R_pcsqH .equ 204 R_pcoqH .equ 208 R_iir .equ 212 R_pcsqT .equ 216 R_pcoqT .equ 220 R_isr .equ 224 R_ior .equ 228 R_ipsw .equ 232 R_eirr .equ 236 R_tr0 .equ 240 R_tr1 .equ 244 R_tr2 .equ 248 R_tr3 .equ 252 R_tr4 .equ 256 R_tr5 .equ 260 R_tr6 .equ 264 R_tr7 .equ 268 R_SIZE .equ 300 .import putc,code .import puts,code .import putnum,code .import put_led,code .import save_regs,code .import STUB_RESTORE,code .import RegBlk,data .export iva_table,data .IMPORT led_putnum,code .IMPORT delay,code .IMPORT putnum,code .IMPORT outbyte,code .IMPORT print,code .align 2048 iva_table .blockz 32 ; entry 0 is reserved .align 32 hpmc nop b,n hpmc_handler nop .word 0 .word 0 .word 0 .word hpmc_handler .word 0 .align 32 power_fail ; PrintString Str02,0x2 ldi 1,%r26 bl,n putnum,%r2 nop .align 32 recovery ;; PrintString Str03,0x3 ldi 2,%r26 bl,n putnum,%r2 nop ldi 3,%r1 b,n handle_rcc nop .align 32 external ; PrintString Str04,0x4 ldi 3,%r26 bl,n putnum,%r2 nop .align 32 lpmc ; PrintString Str05,0x5 ldi 4,%r26 bl,n putnum,%r2 nop .align 32 itlb_miss ; PrintString Str06,0x6 ldi 5,%r26 bl,n putnum,%r2 nop .align 32 imem_protection ; PrintString Str07,0x7 ldi 6,%r26 bl,n putnum,%r2 nop .align 32 illegal_inst ; PrintString Str08,0x8 ldi 7,%r26 bl,n putnum,%r2 nop .align 32 break b,n break_handler nop .align 32 privileged_op ; PrintString Str0a,0xa ldi 8,%r26 bl,n putnum,%r2 nop .align 32 privileged_reg ; PrintString Str0b,0xb ldi 9,%r26 bl,n putnum,%r2 nop .align 32 overflow ; PrintString Str0c,0xc ldi 32,%r26 bl,n putnum,%r2 nop .align 32 conditional ; PrintString Str0d,0xd ldi 32,%r26 bl,n putnum,%r2 nop .align 32 assist_excep ; PrintString Str0e,0xe ldi 32,%r26 bl,n putnum,%r2 nop .align 32 dtlb_miss ; PrintString Str0f,0xf ldi 32,%r26 bl,n putnum,%r2 nop .align 32 na_itlb ; PrintString Str10,0x10 ldi 32,%r26 bl,n putnum,%r2 nop .align 32 na_dtlb ; PrintString Str11,0x11 ldi 32,%r26 bl,n putnum,%r2 nop .align 32 dmem_protection ; PrintString Str12,0x12 ldi 32,%r26 bl,n putnum,%r2 nop .align 32 dmem_break ; PrintString Str13,0x13 ldi 32,%r26 bl,n putnum,%r2 nop .align 32 tlb_dirty ; PrintString Str14,0x14 ldi 32,%r26 bl,n putnum,%r2 nop .align 32 page_ref ; PrintString Str15,0x15 ldi 32,%r26 bl,n putnum,%r2 nop .align 32 assist_emul ; PrintString Str16,0x16 ldi 32,%r26 bl,n putnum,%r2 nop .align 32 high_priv ; PrintString Str17,0x17 ldi 32,%r26 bl,n putnum,%r2 nop .align 32 low_priv ; PrintString Str18,0x18 ldi 32,%r26 bl,n putnum,%r2 nop .align 32 branch_taken ; PrintString Str19,0x19 ldi 32,%r26 bl,n putnum,%r2 nop /* * foobar -- debug procedure calling between C and assembler */ .EXPORT foobar,ENTRY,ARGW0=GR,RTNVAL=GR foobar .PROC .CALLINFO CALLER,FRAME=128,SAVE_RP .ENTRY stw %r2,-20(0,%r30) ; stash the return pointer ldo 128(%r30),%r30 ; push up the stack pointer ldi 8, %r26 bl,n led_putnum,%r2 nop ldil L'900000,%r26 ldo R'900000(%r26),%r26 bl,n delay,%r2 nop ldi 8, %r26 bl,n led_putnum,%r2 nop ldil L'900000,%r26 ldo R'900000(%r26),%r26 bl,n delay,%r2 nop ;; copy %r26,%r26 ;; bl,n putnum,%r2 nop ldw -148(0,%r30),%r2 ; retrieve the return pointer ldo -128(%r30),%r30 ; reset the stack pointer bv,n 0(%r2) nop .EXIT .PROCEND /* * setup_vectors -- add vectors for GDB to the vector table. * %r3 - current vector table * %r4 - new vector table */ .EXPORT setup_vectors,ENTRY,ARGW0=GR,RTNVAL=GR setup_vectors .PROC .CALLINFO CALLER,FRAME=128,SAVE_RP .ENTRY stw %r2,-20(0,%r30) ; stash the return pointer ldo 128(%r30),%r30 ; push up the stack pointer mfctl %iva,%r3 ldil L%iva_table,%r4 ; Get the new vector table ldo R%iva_table(%r4),%r4 ; address ldil L%break_handler,%r5 ; Get the breakpoint ldo R%break_handler(%r5),%r5 ; handler vector ldil L%break_default,%r6 ; Get the default handler ldo R%break_default(%r6),%r6 ; vector stw %r6,4(%r4) ; ad the default vector stw %r5,36(%r4) ; add the break vector mtctl %r4,%iva ldw -148(0,%r30),%r2 ; retrieve the return pointer ldo -128(%r30),%r30 ; reset the stack pointer bv,n 0(%r2) nop .EXIT .PROCEND ;------------------------------------------------------------------------------- hpmc_handler bl,n save_state,%r25 nop bl print_intr,%rp ldi Str01-Str01,%arg0 bl print_state,%rp nop ldil L%0xf0000000,%r1 ldw (%r1),%r1 ; read from ROM to reset HPMC mfcpu_c 0,%r1 mfcpu_c 0,%r1 depi 0,CPU_DIAG_0_PREV_HPMC_PREP_BIT,1,%r1 ; clear Prev HPMC bit #ifdef PCXL depi 0,CPU_DIAG_0_L2DHPMC_BIT,1,%r1 depi 0,CPU_DIAG_0_L2IHPMC_BIT,1,%r1 depi 0,CPU_DIAG_0_L1IHPMC_BIT,1,%r1 depi 0,CPU_DIAG_0_L2PARERR_BIT,4,%r1 #else /* PCXT */ depi 0,CPU_DIAG_0_DHPMC_BIT,1,%r1 ; don't clear DHPMC depi 0,CPU_DIAG_0_ILPMC_BIT,1,%r1 ; don't clear ILPMC depi 0,CPU_DIAG_0_HTOC_BIT,1,%r1 ; don't clear HTOC #endif mtcpu %r1,0 mtcpu %r1,0 b,n restore_to_STUB ldi 0x1,%r1 /* * break_handler -- this is the main entry point for an exception */ .ALIGN 2048 break_handler mfctl %iir,%r1 ; r1 = break instruction extru %r1,18,13,%r8 ldo -i13BREAK(%r8),%r8 ; if im13 field doesn't match comb,<>,n %r8,%r0,break_default ; go to default operation extru %r1,31,5,%r8 ldi 0x9,%r1 ; set exception index comib,=,n i5BP,%r8,break_breakpoint comib,=,n i5PSW,%r8,break_psw comib,=,n i5REG,%r8,break_reg_init comib,=,n i5INLINE,%r8,break_breakpoint ; fall through to break_default break_default ; PrintString Str09,0x9 ldi 32,%r26 bl,n putnum,%r2 nop break_reg_init bl setup_vectors,%r25 nop bl save_regs,%r25 nop ; fall through to advance past break instruction break_psw b,n recover break_breakpoint b,n STUB_RESTORE ;------------------------------------------------------------------------------- handle_rcc mfctl %ipsw,%r1 bb,>=,n %r1,10,do_restore ; check nullify bit dep %r0,10,1,%r1 mtctl %r1,%ipsw ; clear nullify bit ;; was the AdvancePCOQ .macro mtctl %r0,%pcoq ; throw away iiaoq head pointer, tail->head mfctl %pcoq,%r1 ; get tail pointer mtctl %r1,%pcoq ; insert tail pointer ldo 4(%r1),%r1 ; advance tail pointer mtctl %r1,%pcoq ; insert new tail pointer, former tail->head do_restore b,n STUB_RESTORE nop ;------------------------------------------------------------------------------- print_intr ; %dp may be messed up, so do self-relocating to reach Save_area blr %r0,%r1 addil L%Str01-pr_intr_0,%r1 pr_intr_0 ldo R%Str01-pr_intr_0(%r1),%r1 ; r1 points to Save_area b puts ; print string--return through rp add %r1,%arg0,%arg0 ;------------------------------------------------------------------------------- halt ; %dp may be messed up, so do self-relocating to reach Save_area blr %r0,%r1 addil L%HaltStr-halt_0,%r1 halt_0 bl puts,%rp ; print halt message ldo R%HaltStr-halt_0(%r1),%arg0 nop b,n . ; loop forever nop ;------------------------------------------------------------------------------- recover ;; was the AdvancePCOQ .macro mtctl %r0,%pcoq ; throw away iiaoq head pointer, tail->head mfctl %pcoq,%r1 ; get tail pointer mtctl %r1,%pcoq ; insert tail pointer ldo 4(%r1),%r1 ; advance tail pointer mtctl %r1,%pcoq ; insert new tail pointer, former tail->head rfir ;------------------------------------------------------------------------------- save_state ; %r25 is return pointer ; %dp may be messed up, so do self-relocating to reach Save_area blr %r0,%r1 addil L%Save_area-sa_st_0,%r1 sa_st_0 ldo R%Save_area-sa_st_0(%r1),%r1 ; r1 points to Save_area ; save general registers stw %r0,R_gr0(%r1) ; don't save %r1 until restored stw %r2,R_gr2(%r1) stw %r3,R_gr3(%r1) stw %r4,R_gr4(%r1) stw %r5,R_gr5(%r1) stw %r6,R_gr6(%r1) stw %r7,R_gr7(%r1) ; don't save %r8, %r9 until restored stw %r10,R_gr10(%r1) stw %r11,R_gr11(%r1) stw %r12,R_gr12(%r1) stw %r13,R_gr13(%r1) stw %r14,R_gr14(%r1) stw %r15,R_gr15(%r1) ; don't save %r16, %r17 until restored stw %r18,R_gr18(%r1) stw %r19,R_gr19(%r1) stw %r20,R_gr20(%r1) stw %r21,R_gr21(%r1) stw %r22,R_gr22(%r1) stw %r23,R_gr23(%r1) ; don't save %r24, %r25 until restored stw %r26,R_gr26(%r1) stw %r27,R_gr27(%r1) stw %r28,R_gr28(%r1) stw %r29,R_gr29(%r1) copy %r25,%rp ; copy return pointer to %rp stw %r30,R_gr30(%r1) copy %r1,%r19 ; save Save_area pointer in %r19 stw %r31,R_gr31(%r1) shdw_gr ; restore %r1 and %r25 (et al.) from shadow regs shdw_gr stw %r1,R_gr1(%r19) ; save %r1 stw %r8,R_gr8(%r19) stw %r9,R_gr9(%r19) stw %r16,R_gr16(%r19) stw %r17,R_gr17(%r19) stw %r24,R_gr24(%r19) ; save control registers mfctl %rctr,%r1 stw %r1,R_rctr(%r19) mfctl %pidr1,%r1 stw %r1,R_pidr1(%r19) mfctl %pidr2,%r1 stw %r1,R_pidr2(%r19) mfctl %ccr,%r1 stw %r1,R_ccr(%r19) mfctl %sar,%r1 stw %r1,R_sar(%r19) mfctl %pidr3,%r1 stw %r1,R_pidr3(%r19) mfctl %pidr4,%r1 stw %r1,R_pidr4(%r19) mfctl %iva,%r1 stw %r1,R_iva(%r19) mfctl %eiem,%r1 stw %r1,R_eiem(%r19) mfctl %itmr,%r1 stw %r1,R_itmr(%r19) mfctl %pcsq,%r1 mtctl %r1,%pcsq stw %r1,R_pcsqH(%r19) mfctl %pcsq,%r1 mtctl %r1,%pcsq stw %r1,R_pcsqT(%r19) mfctl %pcoq,%r1 mtctl %r1,%pcoq stw %r1,R_pcoqH(%r19) mfctl %pcoq,%r1 mtctl %r1,%pcoq stw %r1,R_pcoqT(%r19) mfctl %iir,%r1 stw %r1,R_iir(%r19) mfctl %isr,%r1 stw %r1,R_isr(%r19) mfctl %ior,%r1 stw %r1,R_ior(%r19) mfctl %ipsw,%r1 stw %r1,R_ipsw(%r19) mfctl %eirr,%r1 stw %r1,R_eirr(%r19) mfctl %tr0,%r1 stw %r1,R_tr0(%r19) mfctl %tr1,%r1 stw %r1,R_tr1(%r19) mfctl %tr2,%r1 stw %r1,R_tr2(%r19) mfctl %tr3,%r1 stw %r1,R_tr3(%r19) mfctl %tr4,%r1 stw %r1,R_tr4(%r19) mfctl %tr5,%r1 stw %r1,R_tr5(%r19) mfctl %tr6,%r1 stw %r1,R_tr6(%r19) mfctl %tr7,%r1 stw %r1,R_tr7(%r19) ; save diagnose registers mfcpu_c 0,%r1 mfcpu_c 0,%r1 stw %r1,R_cpu0(%r19) #ifdef PRINT_SPACE stw %r25,R_gr25(%r19) ; save space registers mfsp %sr0,%r1 stw %r1,R_sr0(%r19) mfsp %sr1,%r1 stw %r1,R_sr1(%r19) mfsp %sr2,%r1 stw %r1,R_sr2(%r19) mfsp %sr3,%r1 stw %r1,R_sr3(%r19) mfsp %sr4,%r1 stw %r1,R_sr4(%r19) mfsp %sr5,%r1 stw %r1,R_sr5(%r19) mfsp %sr6,%r1 stw %r1,R_sr6(%r19) mfsp %sr7,%r1 bv (%rp) stw %r1,R_sr7(%r19) #else bv (%rp) stw %r25,R_gr25(%r19) #endif ;------------------------------------------------------------------------------- restore_to_STUB ; doesn't return--goes to STUB_RESTORE ; Note--STUB_RESTORE executes rfir, ; so we don't need to copy %r1,%r8 ; save exception index ; %dp may be messed up, so do self-relocating to reach Save_area bl re_st_0,%r1 addil L%Save_area-re_st_0,%r1 re_st_0 ldo R%Save_area-re_st_0(%r1),%r1 ; r1 points to Save_area ; restore general registers ldw R_gr2(%r1),%r2 ldw R_gr3(%r1),%r3 ldw R_gr4(%r1),%r4 ldw R_gr5(%r1),%r5 ldw R_gr6(%r1),%r6 ldw R_gr7(%r1),%r7 ; ldw R_gr8(%r1),%r8 don't smash the exception index ldw R_gr9(%r1),%r9 ldw R_gr10(%r1),%r10 ldw R_gr11(%r1),%r11 ldw R_gr12(%r1),%r12 ldw R_gr13(%r1),%r13 ldw R_gr14(%r1),%r14 ldw R_gr15(%r1),%r15 ldw R_gr16(%r1),%r16 ldw R_gr17(%r1),%r17 ldw R_gr18(%r1),%r18 ldw R_gr19(%r1),%r19 ldw R_gr20(%r1),%r20 ldw R_gr21(%r1),%r21 ldw R_gr22(%r1),%r22 ldw R_gr23(%r1),%r23 ldw R_gr24(%r1),%r24 ldw R_gr25(%r1),%r25 ldw R_gr26(%r1),%r26 ldw R_gr27(%r1),%r27 ldw R_gr28(%r1),%r28 ldw R_gr29(%r1),%r29 ldw R_gr30(%r1),%r30 ldw R_gr31(%r1),%r31 ldw R_gr1(%r1),%r1 b STUB_RESTORE copy %r8,%r1 ; restore the exception index ;------------------------------------------------------------------------------- #define HoldPtr %r10 #define SavePtr %r11 #define StrPtr %r12 #define Count %r13 #define Hold_Hold 0*4 /* First word of hold area */ #define Hold_Save 1*4 /* Second word of hold area */ #define Hold_Str 2*4 /* Third word of hold area */ #define Hold_Count 3*4 /* Fourth word of hold area */ #define Hold_rp 4*4 /* Fifth word of hold area */ print_state ; %dp may be messed up, so do self-relocating to reach Save_area blr %r0,%mrp addil L%Hold_area-pr_st_0,%mrp pr_st_0 ldo R%Hold_area-pr_st_0(%r1),%r1 ; r1 points to Hold_area ; save working registers stw HoldPtr,Hold_Hold(%r1) copy %r1,HoldPtr ; HoldPtr = &Hold_area stw SavePtr,Hold_Save(HoldPtr) ldo Save_area-Hold_area(HoldPtr),SavePtr ; SavePtr = &Save_area stw StrPtr,Hold_Str(HoldPtr) addil L%PrintLabels-pr_st_0,%mrp stw Count,Hold_Count(HoldPtr) ldo R%PrintLabels-pr_st_0(%r1),StrPtr stw %rp,Hold_rp(HoldPtr) #ifdef PRINT_SPACE ldi 68,Count #else ldo R_gr0(SavePtr),SavePtr ldi 60,Count #endif ; print register values print_loop bl puts,%rp ; print label ldo 1(StrPtr),%arg0 ; advance past length byte bl putnum,%rp ; print register value ldwm 4(SavePtr),%arg0 ldbs,ma 1(StrPtr),%r1 addib,> -1,Count,print_loop add %r1,StrPtr,StrPtr ; skip to next line bl puts,%rp ; print label ldo 1(StrPtr),%arg0 ; advance past length byte ; restore working registers ldw Hold_rp(HoldPtr),%rp ldw Hold_Count(HoldPtr),Count ldw Hold_Str(HoldPtr),StrPtr ldw Hold_Save(HoldPtr),SavePtr bv (%rp) ldw Hold_Hold(HoldPtr),HoldPtr #undef SavePtr #undef HoldPtr #undef StrPtr #undef Count #undef Hold_Save #undef Hold_Scr #undef Hold_Str #undef Hold_Count #undef Hold_rp ;------------------------------------------------------------------------------- .space $PRIVATE$ .subspa $DATA$,align=4,access=0x1f /* Used to save machine registers before printing */ Save_area .block R_SIZE ; Used to store registers /* Used to hold callee-save registers */ Hold_area .block 8*4 ; 8 words to store temp. registers HaltStr .stringz "\r\nHalted\r\n" RebootStr .stringz "\r\nRebooting . . .\r\n" Str01 .stringz "\r\nHPMC\r\n" Str02 .stringz "\r\nPower Fail\r\n" Str03 .stringz "\r\nRecovery Counter Trap\r\n" Str04 .stringz "\r\nExternal Interrupt\r\n" Str05 .stringz "\r\nLPMC\r\n" Str06 .stringz "\r\nITLB Miss\r\n" Str07 .stringz "\r\nInstruction Memory Protection Trap\r\n" Str08 .stringz "\r\nIllegal Instruction\r\n" Str09 .stringz "\r\nBreak Trap\r\n" Str0a .stringz "\r\nPrivileged Operation\r\n" Str0b .stringz "\r\nPrivileged Register\r\n" Str0c .stringz "\r\nOverflow Trap\r\n" Str0d .stringz "\r\nConditional Trap\r\n" Str0e .stringz "\r\nAssist Exception\r\n" Str0f .stringz "\r\nData TLB Miss\r\n" Str10 .stringz "\r\nNon-access ITLB Miss\r\n" Str11 .stringz "\r\nNon-access DTLB Miss\r\n" Str12 .stringz "\r\nData Memory Protection Trap\r\n" Str13 .stringz "\r\nData Memory Break\r\n" Str14 .stringz "\r\nTLB Dirty Bit Trap\r\n" Str15 .stringz "\r\nPage Reference Trap\r\n" Str16 .stringz "\r\nAssist Emulation Trap\r\n" Str17 .stringz "\r\nHigher-privilege Trap\r\n" Str18 .stringz "\r\nLower-privilege Trap\r\n" Str19 .stringz "\r\nTaken Branch Trap\r\n" Str20 .stringz "\r\nHere I am!\r\n" PrintLabels #ifdef PRINT_SPACE .byte 10 .stringz "sr 0 = 0x" .byte 13 .stringz "sr 1 = 0x" .byte 13 .stringz "sr 2 = 0x" .byte 13 .stringz " sr 3 = 0x" .byte 12 .stringz "\r\nsr 4 = 0x" .byte 13 .stringz " sr 5 = 0x" .byte 13 .stringz " sr 6 = 0x" .byte 13 .stringz " sr 7 = 0x" .byte 13 .stringz "\r\n\ngr 0 = 0x" #else .byte 10 .stringz "gr 0 = 0x" #endif .byte 13 .stringz " gr 1 = 0x" .byte 13 .stringz " gr 2 = 0x" .byte 13 .stringz " gr 3 = 0x" .byte 12 .stringz "\r\ngr 4 = 0x" .byte 13 .stringz " gr 5 = 0x" .byte 13 .stringz " gr 6 = 0x" .byte 13 .stringz " gr 7 = 0x" .byte 12 .stringz "\r\ngr 8 = 0x" .byte 13 .stringz " gr 9 = 0x" .byte 13 .stringz " gr10 = 0x" .byte 13 .stringz " gr11 = 0x" .byte 12 .stringz "\r\ngr12 = 0x" .byte 13 .stringz " gr13 = 0x" .byte 13 .stringz " gr14 = 0x" .byte 13 .stringz " gr15 = 0x" .byte 12 .stringz "\r\ngr16 = 0x" .byte 13 .stringz " gr17 = 0x" .byte 13 .stringz " gr18 = 0x" .byte 13 .stringz " gr19 = 0x" .byte 12 .stringz "\r\ngr20 = 0x" .byte 13 .stringz " gr21 = 0x" .byte 13 .stringz " gr22 = 0x" .byte 13 .stringz " gr23 = 0x" .byte 12 .stringz "\r\ngr24 = 0x" .byte 13 .stringz " gr25 = 0x" .byte 13 .stringz " gr26 = 0x" .byte 13 .stringz " gr27 = 0x" .byte 12 .stringz "\r\ngr28 = 0x" .byte 13 .stringz " gr29 = 0x" .byte 13 .stringz " gr30 = 0x" .byte 13 .stringz " gr31 = 0x" .byte 13 .stringz "\r\n\nrctr = 0x" .byte 53 .stringz " cpu0 = 0x" .byte 12 .stringz "\r\npid1 = 0x" .byte 13 .stringz " pid2 = 0x" .byte 13 .stringz " ccr = 0x" .byte 13 .stringz " sar = 0x" .byte 12 .stringz "\r\npid3 = 0x" .byte 13 .stringz " pid4 = 0x" .byte 13 .stringz " iva = 0x" .byte 13 .stringz " eiem = 0x" .byte 12 .stringz "\r\nitmr = 0x" .byte 13 .stringz " iasq = 0x" .byte 13 .stringz " iaoq = 0x" .byte 13 .stringz " iir = 0x" .byte 32 .stringz "\r\n iasq = 0x" .byte 13 .stringz " iaoq = 0x" .byte 12 .stringz "\r\n isr = 0x" .byte 13 .stringz " ior = 0x" .byte 13 .stringz " ipsw = 0x" .byte 13 .stringz " eirr = 0x" .byte 12 .stringz "\r\ncr24 = 0x" .byte 13 .stringz " cr25 = 0x" .byte 13 .stringz " cr26 = 0x" .byte 13 .stringz " cr27 = 0x" .byte 12 .stringz "\r\ncr28 = 0x" .byte 13 .stringz " cr29 = 0x" .byte 13 .stringz " cr30 = 0x" .byte 13 .stringz " cr31 = 0x" .byte 4 .stringz "\r\n\n" .end