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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? agnus.v

?? Verilog, c and asm source codes of the Minimig system, a fpga implementation of the Amiga computer.
?? V
?? 第 1 頁 / 共 3 頁
字號:
	To disable further sprite list processing it's enough to set VSTART and VSTOP to values which are outsideof the screen or has been already achieved.	When waiting for VSTART condition any write to SPRxDATA (write to SPRxDATB takes no effect) makes the written valuevisible on the screen but it doesn't start DMA although it's enabled. The same value is displayed in every subsequent line until DMA starts and delivers new data to SPRxDAT or SPRxCTL is written (by DMA, copper or cpu).It seems like only VSTART condition starts DMA transfer.	Any write to SPRxCTL while DMA is active doesn't stop display but new value of VSTOP takes effect. Actually display is reenabled by DMA write to SPRxDATA in next line.	The same applies to SPRxPOS writes when sprite is beeing displayed - only HSTART position changes (if new VSTARTis specified to be met before VSTOP nothing interesting happens).	The DMA engine sees VSTART condition as true even if DMA is dissabled. Enabling DMA after VSTART and before VSTOPstarts sprite display in enabled line (if it's enabled early enough).	Dissabling DMA in the line when new SPRxPOS/SPRxCTL is fetched and enabling it in the next one results in stoppedDMA transfer but the last line of sprite is displayed till the end of the screen.VSTART and VSTOP specified within vbl are not met.vbl stops dma transfer.The first possible line to display a sprite is line $1A (PAL).During vbl SPRxPOS/SPRxCTL are not automatically modified, values written before vbl are still present when vbl ends.algo:	if vbl or VSTOP : disable data dma	else if VSTART: start data dma		if vblend or (VSTOP and not vbl): dma transfer to sprxpos/sprxctl	else if data dma active: transfer to sprxdata/sprcdatbIt doesn't seem to be complicated :)Sprite which has been triggered by write to SPRxDATA is not disabled by vbl.It seems that vstop and vstart conditions are checked every cycle. Dma doesn't fetch new pos/ctl if vstop is not equal to the current line number.Feature:If new vstart is specified to be the same as the line during which it's fetched, display starts in the next linebut is one line shorter.*///sprite dma enginemodule sprdma_engine(	input 	clk,		    			//bus clock	input	clk28m,	output	reg reqdma,				//sprite dma engine requests dma cycle	input	ackdma,						//agnus dma priority logic grants dma cycle	input	[8:0]hpos,				//horizontal beam counter	input	[10:0]vpos,				//vertical beam counter	input	vbl,						//JB: vertical blanking	input	vblend,						//JB: last line of vertical blanking	input	[8:1]regaddressin,		//register address inputs	output 	reg [8:1]regaddressout,	//register address outputs	input	[15:0]datain,				//bus data in	output	[20:1]addressout			//chip address out);//register names and adresses		parameter SPRPTBASE=9'h120;		//sprite pointers base addressparameter SPRPOSCTLBASE=9'h140;	//sprite data, position and control register base address//local signalsreg 	[20:16]sprpth[7:0];		//upper 5 bits sprite pointers register bankreg 	[15:1]sprptl[7:0];		//lower 16 bits sprite pointers register bankreg		[15:8]sprpos[7:0];		//sprite vertical start position register bank//JB: implementing ECS extended vertical sprite positionreg		[15:4]sprctl[7:0];		//sprite vertical stop position register bankwire	[9:0]vstart;				//vertical start of selected spritewire	[9:0]vstop;				//vertical stop of selected spritewire	[2:0]sprite;				//sprite select signalwire	[20:1]newptr;				//new sprite pointer valuewire 	enable;						//hpos in sprite region//the following signals change their value during cycle 0 of 4-cycle dma sprite windowreg		sprvstop;					//current line is sprite's vstopreg		sprdmastate;				//sprite dma state (sprite image data cycles)reg		dmastate_mem[7:0];		//dma state for every spritewire	dmastate;					//output from memoryreg		dmastate_in;				//input to memoryreg		[2:0]sprsel;				//memory selection//sprite selection signal (in real amiga sprites are evaluated concurently,//in our solution to save resources they are evaluated sequencially but 8 times faster (28MHz clock)always @(posedge clk28m)	if (sprsel[2]==hpos[0])	//sprsel[2] is synced with hpos[0]		sprsel <= sprsel + 1;//--------------------------------------------------------------------------------------//register bank address multiplexerwire	[2:0]ptsel;			//sprite pointer and state registers selectwire	[2:0]pcsel;			//sprite position and control registers selectassign ptsel = (ackdma) ? sprite : regaddressin[4:2];assign pcsel = (ackdma) ? sprite : regaddressin[5:3];//sprite pointer arithmetic unitassign newptr = addressout[20:1] + 1;//sprite pointer high word register bank (implemented using distributed ram)wire [20:16]sprpth_in;assign sprpth_in = ackdma ? newptr[20:16] : datain[4:0];always @(posedge clk)	if(ackdma || ((regaddressin[8:5]==SPRPTBASE[8:5]) && !regaddressin[1]))//if dma cycle or bus write		sprpth[ptsel] <= sprpth_in;assign addressout[20:16] = sprpth[sprite];//sprite pointer low word register bank (implemented using distributed ram)wire [15:1]sprptl_in;assign sprptl_in = ackdma ? newptr[15:1] : datain[15:1];always @(posedge clk)	if(ackdma || ((regaddressin[8:5]==SPRPTBASE[8:5]) && regaddressin[1]))//if dma cycle or bus write		sprptl[ptsel] <= sprptl_in;assign addressout[15:1] = sprptl[sprite];//sprite vertical start position register bank (implemented using distributed ram)always @(posedge clk)	if((regaddressin[8:6]==SPRPOSCTLBASE[8:6]) && (regaddressin[2:1]==2'b00))//if bus write		sprpos[pcsel] <= datain[15:8];assign vstart[7:0] = sprpos[sprsel];//sprite vertical stop position register bank (implemented using distributed ram)always @(posedge clk)	if((regaddressin[8:6]==SPRPOSCTLBASE[8:6]) && (regaddressin[2:1]==2'b01))//if bus write		sprctl[pcsel] <= {datain[15:8],datain[6],datain[5],datain[2],datain[1]};		assign {vstop[7:0],vstart[9],vstop[9],vstart[8],vstop[8]} = sprctl[sprsel];//sprite dma channel state register bank//update dmastate when hpos is in sprite fetch region//every sprite has allocated 8 system clock cycles with two active dma slots://the first during cycle #3 and the second during cycle #7//first slot transfers data to sprxpos register during vstop or vblend or to sprxdata when dma is active//second slot transfers data to sprxctl register during vstop or vblend or to sprxdatb when dma is active//current dmastate is valid after cycle #1 for given sprite and it's needed during cycle #3 and #7always @(posedge clk28m)	dmastate_mem[sprsel] <= dmastate_in;assign dmastate = dmastate_mem[sprsel];//evaluating sprite image dma data statealways @(vbl or vpos or vstop or vstart or dmastate) 	if (vbl || (vstop[9:0]==vpos[9:0]))		dmastate_in = 0;	else if (vstart[9:0]==vpos[9:0])		dmastate_in = 1;	else		dmastate_in = dmastate;always @(posedge clk28m)	if (sprite==sprsel && hpos[2:1]==2'b00)		sprdmastate <= dmastate;always @(posedge clk28m)	if (sprite==sprsel && hpos[2:1]==2'b00)		sprvstop <= vstop[9:0]==vpos[9:0] ? 1 : 0;//--------------------------------------------------------------------------------------//--------------------------------------------------------------------------------------//check if we are allowed to allocate dma slots for sprites//dma slots for sprites from cycle 20 till 51assign enable = hpos[8:1]>=8'b0001_0100 && hpos[8:1]<8'b0011_0100 ? 1: 0;		//get sprite number for which we are going to do dmaassign sprite = hpos[5:3] - 3'b101;//generate regdma signalalways @(vpos or vbl or vblend or hpos or enable or sprite or sprvstop or sprdmastate)	if (enable && hpos[1:0]==2'b11)	begin		if (vblend || (sprvstop && ~vbl))		begin			reqdma = 1;			if (~hpos[2])				regaddressout[8:1] = {SPRPOSCTLBASE[8:6],sprite,2'b00};	//SPRxPOS			else				regaddressout[8:1] = {SPRPOSCTLBASE[8:6],sprite,2'b01};	//SPRxCTL		end		else if (sprdmastate)		begin			reqdma = 1;			if (~hpos[2])				regaddressout[8:1] = {SPRPOSCTLBASE[8:6],sprite,2'b10};	//SPRxDATA			else				regaddressout[8:1] = {SPRPOSCTLBASE[8:6],sprite,2'b11};	//SPRxDATB		end
		else		begin			reqdma = 0;			regaddressout[8:1] = 8'hFF;		end	end	else	begin		reqdma = 0;		regaddressout[8:1] = 8'hFF;	end//--------------------------------------------------------------------------------------//--------------------------------------------------------------------------------------endmodule//--------------------------------------------------------------------------------------//--------------------------------------------------------------------------------------//--------------------------------------------------------------------------------------//disk dma engine//the DMA cycle allocation is not completely according to the HRM,//there are 4 slots allocated for disk dma instead of 3////slots are: (horbeam[8:0] counts) //slot 0x000000011 //slot 0x000000111 //slot 0x000001011 //slot 0x000001111 module dskdma_engine(	input 	clk,		    		//bus clock	output	dma,					//true if disk dma engine uses it's cycle	input	dmal,					//Paula requests dma	input	dmas,					//Paula special dma	input	[8:0]horbeam,			//horizontal beam counter	output	wr,						//write (disk dma writes to memory)	input 	[8:1]regaddressin,	//register address inputs	output 	[8:1]regaddressout,	//register address outputs	input	[15:0]datain,			//bus data in	output	reg [20:1]addressout	//chip address out current disk dma pointer);//register names and adresses		parameter DSKPTH=9'h020;			parameter DSKPTL=9'h022;			parameter DSKDAT=9'h026;			parameter DSKDATR=9'h008;		//local signalswire	[20:1]addressoutnew;	//new disk dma pointer//--------------------------------------------------------------------------------------//dma cycle allocationassign dma=(dmal && (horbeam[8:4]==5'b00000) && (horbeam[1:0]==2'b11))?1:0;//write signalassign wr=~dmas;//--------------------------------------------------------------------------------------//addressout input multiplexer and ALUassign addressoutnew[20:1] = dma ? addressout[20:1]+1 : {datain[4:0],datain[15:1]}; //disk pointer controlalways @(posedge clk)	if(dma || (regaddressin[8:1]==DSKPTH[8:1]))		addressout[20:16]<=addressoutnew[20:16];//high 5 bitsalways @(posedge clk)	if(dma || (regaddressin[8:1]==DSKPTL[8:1]))		addressout[15:1]<=addressoutnew[15:1];//low 15 bits//--------------------------------------------------------------------------------------//register address outputassign regaddressout[8:1] = wr ? DSKDATR[8:1] : DSKDAT[8:1];//--------------------------------------------------------------------------------------endmodule//--------------------------------------------------------------------------------------//--------------------------------------------------------------------------------------//--------------------------------------------------------------------------------------//Audio dma engine//2 cycle types are defined, restart pointer, (go back to beginning of sample) and next pointer//(get next word of sample, dmas indicates restart pointer cycle//////slots are: (horbeam[8:0] counts) //slot 0x000010011 (channel #0)//slot 0x000010111 (channel #1)//slot 0x000011011 (channel #2)//slot 0x000011111 (channel #3)module auddma_engine(clk,dma,dmal,dmas,horbeam,regaddressin,regaddressout,datain,addressout);input 	clk;		    			//bus clockoutput	dma;					//true if audio dma engine uses it's cycleinput	dmal;				//Paula requests dmainput	dmas;				//Paula special dmainput	[8:0]horbeam;			//horizontal beam counterinput 	[8:1]regaddressin;		//register address inputsoutput 	[8:1]regaddressout;		//register address outputsinput	[15:0]datain;			//bus data inoutput	[20:1]addressout;		//chip address out//register names and adresses		parameter AUD0DAT=9'h0aa;			parameter AUD1DAT=9'h0ba;			parameter AUD2DAT=9'h0ca;			parameter AUD3DAT=9'h0da;			parameter AUD0LCH=9'h0a0;			parameter AUD1LCH=9'h0b0;			parameter AUD2LCH=9'h0c0;			parameter AUD3LCH=9'h0d0;			//local signalsreg		[8:1]regaddressout;		//see abovereg		[20:1]aud0lc;			//audio location register channel 0reg		[20:1]aud1lc;			//audio location register channel 1reg		[20:1]aud2lc;			//audio location register channel 2reg		[20:1]aud3lc;			//audio location register channel 3reg		[20:1]audlcout;		//audio location outputreg		[20:1]audpt[3:0];		//audio pointer bankwire		[20:1]audptout;		//audio pointer bank output//--------------------------------------------------------------------------------------//audio location register channel 0always @(posedge clk)	if((regaddressin[8:2]==AUD0LCH[8:2]) && !regaddressin[1])		aud0lc[20:16]<=datain[4:0];	else if((regaddressin[8:2]==AUD0LCH[8:2]) && regaddressin[1])		aud0lc[15:1]<=datain[15:1];//audio location register channel 1always @(posedge clk)	if((regaddressin[8:2]==AUD1LCH[8:2]) && !regaddressin[1])		aud1lc[20:16]<=datain[4:0];	else if((regaddressin[8:2]==AUD1LCH[8:2]) && regaddressin[1])		aud1lc[15:1]<=datain[15:1];//audio location register channel 2always @(posedge clk)	if((regaddressin[8:2]==AUD2LCH[8:2]) && !regaddressin[1])		aud2lc[20:16]<=datain[4:0];	else if((regaddressin[8:2]==AUD2LCH[8:2]) && regaddressin[1])		aud2lc[15:1]<=datain[15:1];//audio location register channel 3always @(posedge clk)	if((regaddressin[8:2]==AUD3LCH[8:2]) && !regaddressin[1])		aud3lc[20:16]<=datain[4:0];	else if((regaddressin[8:2]==AUD3LCH[8:2]) && regaddressin[1])		aud3lc[15:1]<=datain[15:1];//--------------------------------------------------------------------------------------//get audio location pointeralways @(horbeam or aud0lc or aud1lc or aud2lc or aud3lc)	case(horbeam[3:2])		2'b00: audlcout[20:1]=aud0lc[20:1];		2'b01: audlcout[20:1]=aud1lc[20:1];		2'b10: audlcout[20:1]=aud2lc[20:1];		2'b11: audlcout[20:1]=aud3lc[20:1];	endcase//dma cycle allocationassign dma=(dmal && (horbeam[8:4]==5'b00001) && (horbeam[1:0]==2'b11))?1:0;//addressout output multiplexerassign addressout[20:1]=(dmas)?audlcout[20:1]:audptout[20:1]; //audio location register bank (implemented using distributed ram)//and ALUalways @(posedge clk)	if(dma)//dma cycle		audpt[horbeam[3:2]]<=(addressout[20:1]+1);assign audptout[20:1]=audpt[horbeam[3:2]];//register address output multiplexeralways @(horbeam)	case(horbeam[3:2])		2'b00: regaddressout[8:1]=AUD0DAT[8:1];		2'b01: regaddressout[8:1]=AUD1DAT[8:1];		2'b10: regaddressout[8:1]=AUD2DAT[8:1];		2'b11: regaddressout[8:1]=AUD3DAT[8:1];	endcase//--------------------------------------------------------------------------------------endmodule

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人午夜精品一区二区三区| 午夜精品久久久久久久99樱桃| 国内精品久久久久影院薰衣草| 欧美一级一区二区| 免费在线看成人av| 久久人人爽爽爽人久久久| 国产经典欧美精品| 亚洲天堂中文字幕| 91麻豆精品国产| 精品一区二区在线看| 欧美国产综合一区二区| 日本久久电影网| 午夜精品一区二区三区免费视频 | 久久亚洲精品小早川怜子| 国产精品一级黄| 一区二区三区在线免费| 日韩一区二区电影网| 成人精品在线视频观看| 亚洲国产精品自拍| 精品成人一区二区| 色伊人久久综合中文字幕| 免费观看在线色综合| 国产欧美精品区一区二区三区| 色琪琪一区二区三区亚洲区| 男女男精品网站| 日韩美女视频一区二区| 欧美va日韩va| 91在线视频观看| 美国精品在线观看| 亚洲品质自拍视频| 亚洲精品一区二区精华| 欧美亚洲综合色| 国产精品99久久不卡二区| 亚洲香蕉伊在人在线观| 国产校园另类小说区| 在线成人小视频| 99久久国产免费看| 精品亚洲免费视频| 亚洲大片一区二区三区| 国产精品美女久久久久久久久久久| 欧美日韩黄色一区二区| av不卡在线播放| 国产乱人伦偷精品视频免下载 | 天天影视网天天综合色在线播放| 国产日韩精品一区| 777色狠狠一区二区三区| 97久久精品人人做人人爽| 韩国精品免费视频| 视频精品一区二区| 亚洲综合激情网| 亚洲天堂2016| 欧美国产成人精品| 久久免费午夜影院| 日韩欧美色综合网站| 欧美日韩国产综合久久| 欧洲另类一二三四区| 成人黄色777网| 国产精品一卡二卡| 国产乱子伦视频一区二区三区| 日韩精品高清不卡| 丝袜美腿亚洲色图| 亚洲人成7777| 亚洲精品国产精品乱码不99| 国产欧美一区二区精品婷婷| 欧美成人aa大片| 欧美大片国产精品| 日韩一级片网站| 欧美一区二区福利在线| 制服视频三区第一页精品| 欧美日韩黄色一区二区| 欧美日韩国产高清一区| 久久久久久久久久久电影| 精品日韩欧美在线| 精品国产一二三区| 亚洲精品一区二区三区在线观看| 欧美成人精品福利| 久久久一区二区| 国产欧美一二三区| 亚洲欧美在线高清| 亚洲男女一区二区三区| 亚洲黄色尤物视频| 亚洲aaa精品| 免费成人av资源网| 韩国成人在线视频| 粉嫩一区二区三区在线看| 成人av网站在线观看| 91在线国产福利| 在线国产电影不卡| 在线电影国产精品| 精品国产露脸精彩对白| 国产午夜精品理论片a级大结局| 国产欧美va欧美不卡在线| 亚洲色图.com| 亚洲国产成人av网| 麻豆视频一区二区| 高清国产一区二区| 欧美又粗又大又爽| 欧美一区二区私人影院日本| 精品国产91亚洲一区二区三区婷婷| 久久精品无码一区二区三区| 中文字幕在线不卡国产视频| 一级女性全黄久久生活片免费| 日韩成人午夜精品| 国产成人啪午夜精品网站男同| 99久久精品国产导航| 欧美精品日韩一本| 久久久亚洲精品一区二区三区| 中文字幕在线免费不卡| 日韩成人午夜电影| 成人免费福利片| 欧美美女一区二区三区| 久久亚洲欧美国产精品乐播 | 久久久三级国产网站| 亚洲日韩欧美一区二区在线| 奇米影视7777精品一区二区| 国产福利一区二区| 欧美日韩一区二区在线观看视频| 精品国产三级电影在线观看| 亚洲色图20p| 精品一二线国产| 99精品欧美一区二区三区小说 | 欧美日高清视频| 国产精品五月天| 日本三级韩国三级欧美三级| 成人免费电影视频| 欧美一区二区视频在线观看2020| 国产精品天干天干在观线| 日韩精品一卡二卡三卡四卡无卡| 成人99免费视频| 日韩欧美一级精品久久| 亚洲黄色小视频| 成人性生交大合| 日韩一级片在线播放| 亚洲激情成人在线| 日韩欧美激情四射| 亚洲国产日韩综合久久精品| 成人免费视频一区二区| 欧美一二三区精品| 亚洲gay无套男同| 日本韩国欧美三级| 国产精品欧美一区喷水| 久久99热这里只有精品| 欧美日本国产一区| 一区二区三区在线看| 波多野结衣亚洲| 欧美国产视频在线| 国内久久婷婷综合| 日韩精品一区二区三区老鸭窝| 亚洲国产成人91porn| 91福利精品视频| 亚洲蜜臀av乱码久久精品| 成人国产电影网| 中文字幕+乱码+中文字幕一区| 国产乱码一区二区三区| 欧美电视剧免费观看| 毛片av中文字幕一区二区| 欧美挠脚心视频网站| 亚洲超碰精品一区二区| 欧美午夜一区二区三区免费大片| 中文字幕亚洲不卡| 成人激情开心网| 国产精品免费视频网站| 成人黄色av网站在线| 国产欧美日韩亚州综合 | 日韩视频一区二区三区 | 欧美一二三区在线| 蜜臀av一区二区在线免费观看 | 成人福利视频网站| 国产精品视频你懂的| 播五月开心婷婷综合| 国产精品美女久久久久久久| aaa亚洲精品一二三区| 一区二区三区在线免费播放| 欧美在线综合视频| 首页国产欧美日韩丝袜| 欧美一级理论片| 国产综合色视频| 中文一区一区三区高中清不卡| 成人综合婷婷国产精品久久| 中文字幕一区二区三区蜜月| 99在线精品免费| 亚洲一二三四在线| 69av一区二区三区| 国产乱子伦视频一区二区三区| 中文字幕第一区综合| 在线观看av一区| 蜜臀久久99精品久久久久宅男 | 久久精品夜夜夜夜久久| 成人av电影观看| 一区二区三区欧美久久| 国产成人精品免费视频网站| 成人免费精品视频| 国产一区二区主播在线| 99国产欧美久久久精品| 欧美一区二区在线免费播放| 激情欧美一区二区| 亚洲天堂av老司机| 欧美一级日韩一级| 粉嫩一区二区三区性色av| 亚洲免费观看视频|