亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ts101_prom.asm

?? ADSP TS101 加載核。加載核在dsp上電或復(fù)位時(shí)從flash中加載應(yīng)用程序
?? ASM
字號(hào):
/*********************************************************************************************** 		
	TigerSHARC eprom boot loader

	TS101_prom.asm

	This code is written unoptimized one instruction per line for clarity.

  	Revision history:

    	11/12/01  Boris Lerner 			Version	1.0.0 
    	3/25/2002  Boris Lerner 		Version	1.0.1	Added (NP) to all jumps

	Algorithm description:

		1. This boot loader resides in the eprom/flash memory 0x0000 - 0x03ff. It gets loaded 
		by DMA0 of the TigerSharc initially into memory 0x00000000 - 0x000000ff. After the 
		boot loader	is loaded, the DMA0 interrupt wakes the TigerSharc up and starts the
		execution of the loader at location 0x00000000. At this stage, the TigerSharc is at
		interrupt level of DMA0 and, thus, further DMA0 and global (PMASK[60]) interrupts 
		are disabled.

		2. The loader sets the NMOD bit in SQCTL register to insure supervisor mode. Then, 
		RDS reduces interrupt to subroutine level. Now, DMA0 and global interrupts are 
		enabled	again.

		3. DMA0 interrupt vector is set to dma_int. DMA0 is setup to move data from boot 
		prom starting at 0x0400 (0x0000-0x03ff was the boot loader) to internal memory 
		starting at 0x00000000. The DMA routine will start the DMA by programming the TCBs, 
		advance the prom pointer and sit in IDLE until the DMA interrupt wakes it up and 
		sends to dma_int. There RTI returns to DMA routine, which, in turn, returns to 
		loader execution.
		
		4. Since this is not a link port boot, all link port controls are reset and	link port 
		DMAs are disabled.

		5. Processor ID is computed and stored in xR10.

		6. Now, the loader parses the blocks of data from the prom. Two words are moved to
		locations 0x00000000 and 0x00000001. These are the tag words of the block to follow.
		In the first word, bits 31:30 are block TYPE (0=final init, 1=non-zero init, 2=zero init),
		bits 29:27 are the processor ID, bits 26:16 are reserved and bits 15:0 are the block 
		COUNT. The second tag word is pointer to DESTINATION.

		7. ID of the block is compared to the ID stored in xR10. If IDs are not the same, the
		prom block is skept.

		8. If IDs are the same, the type is examined.

		9. If type is 1, the COUNT number of words are moved one word at a time via location
		0x00000000 to the DESTINATION. Once finished, the steps starting with 5 are repeated.
 
		10. If type is 2, the COUNT number of zeros are moved to the DESTINATION. Once finished, 
		the steps starting with 5 are repeated.

		11.If type is 0, the loader performs the final init, i.e. it overwrites itself with 
		the user code. A DMA of 256 words into 0x00000000-0x000000ff with wake up from IDLE
		would do this, but would start user code execution at interrupt level of DMA0. To
		avoid this, the following algorithm is used:

			a. First four instrucions of user code (destined to locations 0x00000000-0x00000003)
			are DMAed from the prom and stored in the registers xR11:8.

			b. The following code is written into locations 0x00000000-0x00000003:

				RETI = 0;;
				NOP;;
				RTI (NP); Q[j31+=0] = xR11:8;;

			c. The DMA0 interrupt vector is set to 0x00000000.

			d. yR0 is preset to 0x80000000. This will be the new value for IMASKH to disable
			all interrupts except emulation.

			e. Branch Target Buffer is invalidated (BTBINV) to clear cached branches.

			f. The DMA is setup to transfer 252 words of user code destined to
			0x00000004-0x000000ff.

			g. DMA is started by writing to the TCBs and then processor goes IDLE.

			h. When the DMA is finished, interrupt wakes the TigerSharc up and jumps
			execution to code inserted at 0x00000000 in step b.

			i. This code executes IMASKH = yR0;; which disables all global interrupts, then
			RTI (NP); Q[j31+=0]=xR11:8;;, which reduces the interrupt level to none, puts user
			code into locations 0x00000000-0x00000003 and jumps execution to 0x00000000 (since
			RETI is set to 0x00000000). The user code starts cleanly at 0x00000000, with no
			interrupt level. Note that (NP) option is necessary so that RTI does not cache into
			BTB.

***********************************************************************************************/

/**********************************************************************************************/
.section seg_ldr;

/************************************** Start of code *****************************************/
_main:
	xr0 = 0x00000201;;					// set NMOD and BTB enable (1/24/00) bits in sequencer control register
	SQCTLST = xr0;;						// mnemonic changed to SQCTLST (12/19/00)
	rds;;								// reduce interrupt to subroutine level

										// INSERT CUSTOM INITS HERE - DRAM REGISTERS ETC...
	
	jL0 = 0;;
	jL1 = 0;;
	j0 = _dma_int;;						// set DMA interrupt vector
	IVDMA0 = j0;;						// global and DMA0 ints are already enabled

	yr0 = 0;;							// will be used for zero init and ints disable in patch
	LCTL0 = yr0;;						// Links disable and clear 
	LCTL1 = yr0;;
	LCTL2 = yr0;;
	LCTL3 = yr0;;

	xr1 = 0x00040004;;					// count = 4, modify = 4
	xr3 = 0x00000000;;					// disable DMA, int mem,prio=norm,2D=no,word=quad,int=yes,RQ=enbl,chain=no
	DC4 = xr3:0;;						// disable DMA
	DC5 = xr3:0;;						// disable DMA
	DC6 = xr3:0;;						// disable DMA
	DC7 = xr3:0;;						// disable DMA
	DC8 = xr3:0;;						// disable DMA
	DC9 = xr3:0;;						// disable DMA
	DC10 = xr3:0;;						// disable DMA
	DC11 = xr3:0;;						// disable DMA
	
	xr0 = 0x400;;						// xr0 = source index
	xr3 = 0xc3000000;;					// boot rom,prio=norm,2D=no,word=norm,int=yes,RQ=dsbl,chain=no
	xr4 = 0;;							// xr4 = destination index
	xr7 = 0x43000000;;					// int mem,prio=norm,2D=no,word=norm,int=yes,RQ=dsbl,chain=no
	xr8 = 1;;
	xr10 = SYSTAT;;
	xr1 = 0x00000007;;
	xr10 = r1 and r10;;					// xr10 = processor ID									

/**********************************************************************************************/
_boot_loop:	
	xr1 = 0x00020004;;					// source count = 2, modify = 4
	xr5 = 0x00020001;;					// dest count = 2, modify = 1
	xr9 = 8;;							// prom pointer modifier

	call _do_dma (NP);;					// do DMA transfer	
	
	xr2 = [j31+=0];;					// read ID, type and count
	j0 = [j31+1];;						// read destination

	xr1 = 0x0000FFFF;;
	xr9 = r1 and r2;;					// mask count
	xr6 = 0x00001B03;;
	xr6 = fext r2 by r6;;				// extract processor ID
	xcomp(r6,r10);;						// if not same...
	if nxaeq, jump _wrong_id (NP);;		// ...skip the block...
	xr6 = 0x00001E02;;
	xr6 = fext r2 by r6;;				// ...else, extract type
	if xseq, jump _final_init (NP);;	// if zero - final init...(xseq - 1/24/00)
 	xr6 = r6 - r8;;						// ...else if 1...
	if xaeq, jump _init_data (NP);;		// ...non-zero data init...

/***********************************************************************************************/
_zero_init:								// ...else zero-data init
	LC0 = xr9;;							// put count into counter

_zero_init_loop:
		[j0+=1] = yr0;;					// init with 0's
		if NLC0E, jump _zero_init_loop (NP);;

	jump _boot_loop (NP);;				// check next block
	
/***********************************************************************************************/
_init_data:
	LC0 = xr9;;							// put count into loop counter
	xr1 = 0x00010004;;					// source count = 1, modify = 4
	xr5 = 0x00010001;;					// dest count = 1, modify = 1
	xr9 = 4;;							// prom pointer modifier

_init_data_1:
	call _do_dma (NP);;					// do DMA transfer	
	xr6 = [j31 += 0];;					// read word
	[j0 += 1] = xr6;;					// write word
	if NLC0E, jump _init_data_1 (NP);;
	jump _boot_loop (NP);;				// check next block

/***********************************************************************************************/
_wrong_id:
	xr6 = 0x000001E02;;
	xr6 = fext r2 by r6;;				// extract type
	if xseq, jump _skip_255 (NP);;		// if zero - final init, skip 255... seq replaced by xseq (3/29/00)
	xr9 = lshift r9 by 2;;				// ...else, quadrupple the count...
	xr6 = r6 - r8;;						// ...if 1...
	if xaeq, jump _skip_block (NP);;	// ...skip block as is...
    xr9 = 0;;							// ...else zero init, skip none
   	jump _skip_block (NP);;

_skip_255:
	xr9 = 0x3FC;;						// prom pointer modifier = 255*4

_skip_block:
	xr0 = r0 + r9;;						// advance prom pointer
	jump _boot_loop (NP);;				// check next block

/**************************************************************************************************
	This routine transfers data via DMA0
		Input: xr3:0 = source TCB setup, xr7:4 = destination TCB setup, xr9 = prom pointer modifier
***************************************************************************************************/
_do_dma:
	DCS0 = xr3:0;;						// start DMA
	DCD0 = xr7:4;;
	idle;;								// wait till DMA interrupt
	xr0 = r0 + r9;;						// advance prom pointer
	cjmp (NP)(ABS);;					// and return

/*************************************************************************************************
	DMA0 ISR
*************************************************************************************************/
_dma_int:
	nop;;								// Note: RTI can not be the first instruction of an ISR!
	rti (ABS)(NP);;

/*************************************************************************************************
	 Final Init 
*************************************************************************************************/
_final_init:
	xr9 = 4;;							// since final init has only one tag,...
	xr0 = r0 - r9;;						// ...backup one word (4 bytes)
	xr1 = 0x00040004;;					// source count = 4, modify = 4
	xr5 = 0x00040001;;					// dest count = 4, modify = 1
	xr9 = 16;;

	call _do_dma (NP);;					// do DMA transfer
	
	xr11:8 = Q[j31 += 0];;				// put first four user instrucions into xr11:8

	j0 = _last_patch_code;;				// move patch into locations 0x00000000-0x00000003
	j1 = 0;;
	LC0 = 4;;

_patch_loop:
	xr6 = [j0 += 1];;
	[j1 += 1] = xr6;;
	if NLC0E, jump _patch_loop (NP);;

	j1 = 0;;							// set DMA0 int vector to 0x00000000
	IVDMA0 = j1;;						
	yr0 = 0x80000000;;					// IMASKH value - disable all ints except emulation
	xr1 = 0x00FC0004;;					// count = 0xFC, modifier = 4
	xr4 = 4;;							// start at location 0x4, patch is at loc 0x0-0x3
	xr5 = 0x00FC0001;;					// count = 0xFC, modifier = 1
	btbinv;;   							// invalidate cache
	DCS0 = xr3:0;;						// start DMA
	DCD0 = xr7:4;;						
	idle;;								// wait till dma is done...
										// ...by which time DMA0 interrupt takes over,...
										// ...and jumps execution to 0x0 to the last patch
										
/*********************************** Last Patch *************************************************/	
_last_patch_code:
	RETI = 0;;							// set RETI to 0x0 for patch
	IMASKH = yr0;;						// disable interrupts
	rti (ABS)(NP); Q[j31+=0] = xr11:8;;		// reduce interrupt and patch
	
	nop;;
	nop;;
	nop;;
	nop;;
	nop;;
	

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美伊人久久久久久午夜久久久久| 精品久久久网站| 91在线观看高清| 99麻豆久久久国产精品免费 | 成人免费看视频| 国产精品影视网| 粉嫩一区二区三区性色av| 国产精品亚洲第一| 粉嫩欧美一区二区三区高清影视| 成人免费视频视频在线观看免费| 成人91在线观看| 色呦呦国产精品| 在线观看区一区二| 欧美日韩和欧美的一区二区| 欧美一区二区三区性视频| 日韩美女主播在线视频一区二区三区| 欧美大尺度电影在线| 久久精品在这里| 亚洲视频1区2区| 午夜精品一区二区三区电影天堂| 日韩成人一区二区三区在线观看| 麻豆精品一区二区三区| 国产精品白丝av| 91麻豆产精品久久久久久| 欧美又粗又大又爽| 日韩欧美国产成人一区二区| 国产午夜精品在线观看| 亚洲欧美日韩人成在线播放| 亚洲成人动漫av| 国产一区二区三区香蕉| 99久久精品国产导航| 欧美日韩成人在线| 久久亚区不卡日本| 一区二区三区四区在线| 日韩va亚洲va欧美va久久| 国产福利精品导航| 91久久免费观看| 欧美va亚洲va国产综合| 国产精品国产三级国产aⅴ入口 | 精品一区二区三区免费毛片爱| 国产精品夜夜嗨| 在线免费av一区| 欧美成人精品二区三区99精品| 国产精品欧美一区喷水| 亚洲国产aⅴ成人精品无吗| 国产在线不卡一区| 在线看不卡av| 精品动漫一区二区三区在线观看| 亚洲色图20p| 精品在线一区二区三区| 色天天综合色天天久久| 日韩欧美aaaaaa| 一区二区三区丝袜| 国产精品一区二区果冻传媒| 欧美日精品一区视频| 国产精品视频yy9299一区| 天使萌一区二区三区免费观看| 高清不卡一区二区| 日韩精品中文字幕在线不卡尤物 | 亚洲日本在线天堂| 精品一区二区国语对白| 欧美性色黄大片| 国产精品人妖ts系列视频| 久久精品久久精品| 欧美怡红院视频| 亚洲欧洲三级电影| 国内精品伊人久久久久av一坑| 欧美视频精品在线观看| 中文字幕在线不卡视频| 国产伦精品一区二区三区免费迷| 欧美日韩在线亚洲一区蜜芽| 国产精品国产三级国产| 国产成人精品午夜视频免费| 91精品国产高清一区二区三区蜜臀| 最好看的中文字幕久久| 国产xxx精品视频大全| 欧美刺激脚交jootjob| 午夜精品久久久久| 一本一道波多野结衣一区二区| 国产亚洲女人久久久久毛片| 秋霞电影网一区二区| 欧美丝袜自拍制服另类| 亚洲欧美日韩国产成人精品影院| 国产69精品久久久久毛片| 日韩精品最新网址| 奇米影视在线99精品| 欧美日韩一二区| 亚洲国产日韩在线一区模特| 91网站最新网址| 亚洲欧洲精品天堂一级| 成人高清免费观看| 国产精品欧美一区二区三区| 成人综合在线观看| 国产女人aaa级久久久级| 国产精品一色哟哟哟| 欧美大肚乱孕交hd孕妇| 久久69国产一区二区蜜臀| 日韩一二三四区| 蜜乳av一区二区三区| 在线综合+亚洲+欧美中文字幕| 亚洲国产日日夜夜| 欧美另类高清zo欧美| 亚洲va欧美va人人爽| 欧美日韩一区二区在线观看视频| 一区二区三区四区在线| 欧美三级视频在线观看| 亚洲福利一二三区| 在线成人小视频| 日韩精品一区第一页| 欧美一二三区在线| 久久精品国产精品亚洲红杏| 欧美videofree性高清杂交| 国模大尺度一区二区三区| 国产午夜精品久久久久久久| 国产ts人妖一区二区| 中文字幕亚洲不卡| 在线亚洲高清视频| 视频在线观看一区二区三区| 欧美一区二区三区的| 激情综合网激情| 国产女人水真多18毛片18精品视频| 成人毛片视频在线观看| 亚洲人成小说网站色在线| 在线观看av不卡| 免费精品99久久国产综合精品| 2017欧美狠狠色| 成人h动漫精品一区二区| 亚洲欧美成人一区二区三区| 欧美日韩美少妇| 精品一区二区三区在线播放| 国产精品色噜噜| 欧美专区日韩专区| 另类欧美日韩国产在线| 中文字幕av免费专区久久| 色婷婷综合久久久中文字幕| 丝袜亚洲另类丝袜在线| 久久久久久久综合狠狠综合| www.日本不卡| 午夜精品福利久久久| 久久人人爽爽爽人久久久| 97se亚洲国产综合自在线不卡| 午夜成人免费视频| 久久精品亚洲乱码伦伦中文| 色偷偷一区二区三区| 久久国产夜色精品鲁鲁99| 国产精品久久久久永久免费观看| 欧美午夜一区二区三区| 国内成人免费视频| 一区二区三区免费网站| 精品国产一区二区国模嫣然| caoporn国产一区二区| 日本aⅴ精品一区二区三区 | 亚洲女厕所小便bbb| 欧美一区二区大片| fc2成人免费人成在线观看播放| 亚洲高清不卡在线观看| 中日韩av电影| 91麻豆精品国产91久久久资源速度| 国产成人精品免费在线| 亚洲成人av在线电影| 国产精品免费人成网站| 在线播放欧美女士性生活| 成人午夜伦理影院| 奇米影视一区二区三区| 亚洲欧美色图小说| 久久久久久久久久看片| 欧美精品日日鲁夜夜添| 99久久国产综合精品女不卡| 久久99国产精品麻豆| 一区二区三区 在线观看视频| 久久综合九色欧美综合狠狠| 欧美猛男gaygay网站| 99国产精品久| 国产伦精品一区二区三区免费迷| 日本伊人午夜精品| 亚洲中国最大av网站| 国产精品久久久久久久久图文区 | 玉足女爽爽91| 欧美激情在线看| 精品久久人人做人人爱| 欧美一区二区三区免费| 欧美日韩在线精品一区二区三区激情| 成人在线视频一区| 国产麻豆精品95视频| 久久精品久久综合| 免费在线观看日韩欧美| 婷婷开心激情综合| 亚洲国产美国国产综合一区二区| 国产精品进线69影院| 国产欧美一区二区三区在线看蜜臀 | 一区二区理论电影在线观看| 欧美激情中文字幕| 国产亚洲欧美一级| 国产喂奶挤奶一区二区三区| 精品久久一区二区三区| 精品乱码亚洲一区二区不卡| 日韩一级成人av| 日韩一区二区高清| 日韩一区二区三区视频在线| 91精品国产综合久久香蕉的特点 |