⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iva_table.s

📁 俄罗斯高人Mamaich的Pocket gcc编译器(运行在PocketPC上)的全部源代码。
💻 S
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************		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"#endifR_gr0		.equ	 0R_gr1		.equ	 4R_gr2		.equ	 8R_gr3		.equ	12R_gr4		.equ	16R_gr5		.equ	20R_gr6		.equ	24R_gr7		.equ	28R_gr8		.equ	32R_gr9		.equ	36R_gr10		.equ	40R_gr11		.equ	44R_gr12		.equ	48R_gr13		.equ	52R_gr14		.equ	56R_gr15		.equ	60R_gr16		.equ	64R_gr17		.equ	68R_gr18		.equ	72R_gr19		.equ	76R_gr20		.equ	80R_gr21		.equ	84R_gr22		.equ	88R_gr23		.equ	92R_gr24		.equ	96R_gr25		.equ	100R_gr26		.equ	104R_gr27		.equ	108R_gr28		.equ	112R_gr29		.equ	116R_gr30		.equ	120R_gr31		.equ	124R_rctr		.equ	160R_cpu0		.equ	164R_pidr1		.equ	168R_pidr2		.equ	172R_ccr 		.equ	176R_sar 		.equ	180R_pidr3         .equ	184R_pidr4         .equ	188R_iva 		.equ	192R_eiem		.equ	196R_itmr		.equ	200R_pcsqH         .equ	204R_pcoqH         .equ	208R_iir 		.equ	212R_pcsqT         .equ	216R_pcoqT         .equ	220R_isr 		.equ	224R_ior 		.equ	228R_ipsw		.equ	232R_eirr		.equ	236R_tr0 		.equ	240R_tr1 		.equ	244R_tr2 		.equ	248R_tr3 		.equ	252R_tr4 		.equ	256R_tr5 		.equ	260R_tr6 		.equ	264R_tr7 		.equ	268R_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	2048iva_table	.blockz	32	; entry 0 is reserved	.align	32hpmc	nop	b,n	hpmc_handler	nop	.word	0	.word	0	.word	0	.word	hpmc_handler	.word	0	.align	32power_fail;	PrintString	Str02,0x2	ldi	1,%r26	bl,n	putnum,%r2	nop		.align	32recovery;;	PrintString	Str03,0x3	ldi	2,%r26	bl,n	putnum,%r2	nop		ldi	3,%r1	b,n	handle_rcc	nop	.align	32external;	PrintString	Str04,0x4	ldi	3,%r26	bl,n	putnum,%r2	nop		.align	32lpmc;	PrintString	Str05,0x5	ldi	4,%r26	bl,n	putnum,%r2	nop		.align	32itlb_miss;	PrintString	Str06,0x6	ldi	5,%r26	bl,n	putnum,%r2	nop		.align	32imem_protection;	PrintString	Str07,0x7	ldi	6,%r26	bl,n	putnum,%r2	nop		.align	32illegal_inst;	PrintString	Str08,0x8	ldi	7,%r26	bl,n	putnum,%r2	nop		.align	32break	b,n	break_handler	nop	.align	32privileged_op;	PrintString	Str0a,0xa	ldi	8,%r26	bl,n	putnum,%r2	nop		.align	32privileged_reg;	PrintString	Str0b,0xb	ldi	9,%r26	bl,n	putnum,%r2	nop		.align	32overflow;	PrintString	Str0c,0xc	ldi	32,%r26	bl,n	putnum,%r2	nop		.align	32conditional;	PrintString	Str0d,0xd	ldi	32,%r26	bl,n	putnum,%r2	nop		.align	32assist_excep;	PrintString	Str0e,0xe	ldi	32,%r26	bl,n	putnum,%r2	nop		.align	32dtlb_miss;	PrintString	Str0f,0xf	ldi	32,%r26	bl,n	putnum,%r2	nop		.align	32na_itlb;	PrintString	Str10,0x10	ldi	32,%r26	bl,n	putnum,%r2	nop		.align	32na_dtlb;	PrintString	Str11,0x11	ldi	32,%r26	bl,n	putnum,%r2	nop		.align	32dmem_protection;	PrintString	Str12,0x12	ldi	32,%r26	bl,n	putnum,%r2	nop		.align	32dmem_break;	PrintString	Str13,0x13	ldi	32,%r26	bl,n	putnum,%r2	nop		.align	32tlb_dirty;	PrintString	Str14,0x14	ldi	32,%r26	bl,n	putnum,%r2	nop		.align	32page_ref;	PrintString	Str15,0x15	ldi	32,%r26	bl,n	putnum,%r2	nop		.align	32assist_emul;	PrintString	Str16,0x16	ldi	32,%r26	bl,n	putnum,%r2	nop		.align	32high_priv;	PrintString	Str17,0x17	ldi	32,%r26	bl,n	putnum,%r2	nop		.align	32low_priv;	PrintString	Str18,0x18	ldi	32,%r26	bl,n	putnum,%r2	nop		.align	32branch_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=GRfoobar	.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=GRsetup_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	2048break_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_defaultbreak_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 instructionbreak_psw	b,n	recoverbreak_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->headdo_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,%r1pr_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,%r1halt_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,%r1sa_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)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -