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

📄 util.h

📁 一个两碟控制的VCD的代码,两碟之间的转动及连续播放,已大量生产的CODE.
💻 H
字号:
/* SCCSID @(#)util.h	1.35 10/28/98 *//* * $Log$ */#ifndef __UTIL_H__#define __UTIL_H__#include "mvd.h"#include "common.h"register volatile int *mvd asm("r27");#define lwpeek(addr)		mvd[addr]#define	lwpoke(addr, data)	mvd[addr] = data#ifdef MPEG1#define DMAWIDTH0       256	/* 0x100 for refresh *//* for Y, we will use INC2_Y */#define DMAWIDTH2_E2_UV    (DISP_info[E2].wUV)#define DMAWIDTH1_E2_Y    ((704*3/4)/4)#define DMAWIDTH1       (176/4)	/* I/P screen */#define DMAWIDTH2       ((176*3/4) /4)	/* B screen */#else /*MPEG1*/#define DMAWIDTH0       256	/* 0x100 for refresh */#define DMAWIDTH1       (360/4)	/* uv screen */#define DMAWIDTH2       (720/4)	/* y screen */#endif /*MPEG1*/#ifdef SVCD#define WIDTH720   (720/4)#define WIDTH360   (360/4)#define WIDTH352   (352/4)#endif/* * **************** Risc Interface **************** */#define RIFACE_STLD_IRQSUPRESS	0x0000C000#define RIFACE_LD_IRQSUPRESS	0x00004000#define RIFACE_ST_IRQSUPRESS	0x00008000#define xport_irq		0x00000001#define tim1_irq		0x00000002#define tim2_irq		0x00000004#define vin_irq			0x00000008#define vout_irq		0x00000010#define rdma_irq		0x00000020#define vpcmdq_irq		0x00000040#define buscon_irq		0x00000080#define huff_irq		0x00000100#define host_irq		0x00000200#define aud_irq			0x00000400#define tdm_irq			0x00000800#define gateway_irq		0x00001000#define debug_irq		0x00002000	#define enable_int(ch) {					\	int tmp;						\	mvd[riface_irqsuppress] =0;	asm("nop"); asm("nop");	\	tmp = mvd[riface_irqmask];				\	tmp |= cat2(ch,_irq);					\	mvd[riface_irqmask] = tmp;				\}#define disable_int(ch) {					\	int tmp;						\	mvd[riface_irqsuppress] =0;	asm("nop"); asm("nop");	\	tmp = mvd[riface_irqmask] ;				\	tmp &= ~cat2(ch,_irq);					\	mvd[riface_irqmask] =tmp;				\}/* * **************** Risc DMA **************** */GBLDEF_0(int RDMADoneMask, 0);#define rdma_transr_enable	0x00000001#define rdma_tdmw_enable	0x00000002#define rdma_gater_enable	0x00000004#define rdma_gatew_enable	0x00000008#define rdma_hostr_enable	0x00000010#define rdma_hostw_enable	0x00000020#define disable_rdma(ch)	lwpoke(rdma_disable,cat3(rdma_,ch,_enable))#define enable_rdma(ch)		lwpoke(rdma_enable, cat3(rdma_,ch,_enable))#define clear_rdma_done(ch)	lwpoke(rdma_done, cat3(rdma_,ch,_enable))#define rdma_xfer(ch, adr, cnt, pri) do {	\  mvd[rdma_disable] = cat3(rdma_,ch,_enable);	\  mvd[cat3(rdma_,ch,_addr)] = (int)(adr) >> 1;	\  mvd[cat3(rdma_,ch,_cnt)] = cnt;		\  mvd[cat3(rdma_,ch,_pri)] = pri;		\  mvd[rdma_enable] = cat3(rdma_,ch,_enable);	\} while (0)#define	rdma_is_done(ch) \  (mvd[rdma_done] & cat3(rdma_,ch,_enable))#define rdma_wait(ch) do {			\  (void) mvd[rdma_done]; /* read twice */	\  do {} while (!rdma_is_done(ch));		\} while(0)/* * **************** Bus Controller DMA **************** */#define buscon_vp_runbit        0x00000001#define buscon_yscnnr_runbit    0x00000002#define buscon_yscn_runbit      0x00000004#define buscon_uscn_runbit      0x00000008#define buscon_vscn_runbit      0x00000010#define buscon_ycamnr_runbit    0x00000020#define buscon_ycam_runbit      0x00000040#define buscon_ucam_runbit      0x00000080#define buscon_vcam_runbit      0x00000100#define buscon_xportv_runbit    0x00000200#define buscon_xporta_runbit    0x00000400#define buscon_audioin_runbit	0x00000800#define buscon_audioout_runbit	0x00001000#define buscon_hostout_runbit	0x00002000#define buscon_ref_runbit	0x00004000#define buscon_b2r_runbit	0x00008000#define buscon_hufdecv_runbit	0x00010000#define buscon_hufdeca_runbit	0x00020000#define buscon_m2h_runbit	0x00040000#define buscon_hufenc_runbit	0x00080000#define buscon_h2m_runbit	0x00100000#define buscon_r2b_runbit	0x00200000#define buscon_xa1_runbit	buscon_hufenc_runbit#define buscon_xa2_runbit	buscon_audioin_runbit#define buscon_dma_deltas_xa1	buscon_dma_deltas_hufenc#define buscon_dma_xpos_xa1	buscon_dma_xpos_hufenc#define buscon_dma_ypos_xa1	buscon_dma_ypos_hufenc#define buscon_dma_deltas_xa2	buscon_dma_deltas_audio_in#define buscon_dma_xpos_xa2	buscon_dma_xpos_audio_in#define buscon_dma_ypos_xa2	buscon_dma_ypos_audio_in#define buscon_a2d_runbit	buscon_audioin_runbit#define buscon_dma_deltas_a2d	buscon_dma_deltas_audio_in#define buscon_dma_xpos_a2d	buscon_dma_xpos_audio_in#define buscon_dma_ypos_a2d	buscon_dma_ypos_audio_in#define buscon_d2a_runbit	buscon_audioout_runbit#define buscon_dma_deltas_d2a	buscon_dma_deltas_audio_out#define buscon_dma_xpos_d2a	buscon_dma_xpos_audio_out#define buscon_dma_ypos_d2a	buscon_dma_ypos_audio_out#define BDMA_INC2      0x1000  /* Increment Y position by 2 when DMAing*/#define BDMA_WIDTH0    0x0000  /* Use width0 for y increments           */#define BDMA_WIDTH1    0x0200  /* Use width1 for y increments           */#define BDMA_WIDTH2    0x0400  /* Use width2 for y increments           */#define BDMA_WIDTH3    0x0600  /* Use width3 for y increments           */#define BDMA_USEDX     0x0800  /* Use dx for y increments               */#define flush_xportv    0x80#define flush_xporta    0x40#define flush_hufenc    0x20#define flush_r2b       0x10#define flush_b2r       0x00    /* Doesn't really exists */#define flush_d2a       0x00    /* Doesn't really exists */#define DY_MAX	0x80	/* for VCP 0x40 */#define buscon_is_running(ch) \  (mvd[buscon_dma_status] & cat3(buscon_,ch,_runbit))#define buscon_wait(ch) do {		\  while (buscon_is_running(ch));	\  gbl_gate_control &= ~flush_##ch;	\  mvd[gate_control] = gbl_gate_control;	\} while (0)#define buscon_wait_timeout(ch, timeout) do {           \  int timeout_count = 0;                                \  while (buscon_is_running(ch)) {                       \    timeout_count++;                                    \    if (timeout_count > timeout) {                      \      EPRINTF(("pending_status = 0x%x at %d, %s\n",     \        mvd[buscon_dma_pending],__LINE__,__FILE__));    \      break;                                            \    }                                                   \  }                                                     \  gbl_gate_control &= ~flush_##ch;			\  mvd[gate_control] = gbl_gate_control;			\} while(0)#define buscon_disable(ch) mvd[buscon_dma_disable] = cat3(buscon_,ch,_runbit)#define buscon_enable(ch)  mvd[buscon_dma_enable] = cat3(buscon_,ch,_runbit)GBLDEF_0(int gbl_buscon_irqmasks,0);#ifdef BUSCON_IRQ_USE_MACRO #define buscon_irq_enable(ch_runbit) do {		\  do {} while (!(mvd[buscon_dma_status] & ch_runbit));	\  mvd[riface_irqsuppress] = 0; asm("nop"); asm("nop");	\  gbl_buscon_irqmasks |= ch_runbit;			\  mvd[buscon_dma_irqmasks] = gbl_buscon_irqmasks;	\} while (0)#define buscon_irq_disable(ch_runbit) do {		\  mvd[riface_irqsuppress] = 0; asm("nop"); asm("nop");	\  gbl_buscon_irqmasks &= ~ch_runbit;			\  mvd[buscon_dma_irqmasks] = gbl_buscon_irqmasks;	\} while (0)#endif#define buscon_zap(ch) do {			\  buscon_irq_disable(cat3(buscon_,ch,_runbit));	\  buscon_disable(ch);				\  /*do {;} while (buscon_is_running(ch));*/	\} while (0)#define a2x(a)	((a) & 0x1ff)#define a2y(a)	((a) >> 9)#define buscon_xfer(ch, mode, addr, dx, dy) do {			   \  mvd[cat2(buscon_dma_deltas_,ch)] = ((0x80 - (dy)) << 9) | (0x200 - (dx));\  mvd[cat2(buscon_dma_xpos_,ch)] = (mode) | a2x(addr);			   \  mvd[cat2(buscon_dma_ypos_,ch)] = a2y(addr);				   \} while(0)#define buscon_quick_BF(ch, addr, mode, BframeComp) do {    \  mvd[cat2(buscon_dma_xpos_,ch)] = (mode) | a2x(addr);	    \  mvd[cat2(buscon_dma_ypos_,ch)] = BframeComp + a2y(addr);  \} while(0)#define buscon_quick(ch, addr, mode) buscon_quick_BF(ch, addr, mode, 0)/* * **************** RISC fifo **************** */#define GATE_TREMASK    0x02#define GATE_DWMASK     0x01#if 1#define get_riscfifo(answer)	do {				\    while (!(lwpeek(gate_status) & GATE_DWMASK));		\    answer = lwpeek(gate_risc_fifo);				\} while (0)#define put_riscfifo(data)	do {				\    while (!(lwpeek(gate_status) & GATE_TREMASK));		\    lwpoke(gate_risc_fifo,data);				\} while (0)#else#define get_riscfifo(answer)	do {				\    int timeout = 0;						\    while (!(lwpeek(gate_status) & GATE_DWMASK)){		\	timeout++;						\	if (timeout>0x400000) {					\	    EPRINTF(("GateRiscFF DW timeout\n")); break;	\	}							\    }								\    answer = lwpeek(gate_risc_fifo);				\} while (0)#define put_riscfifo(data)	do {				\    int timeout = 0;						\    while (!(lwpeek(gate_status) & GATE_TREMASK)){		\	timeout++;						\	if (timeout>0x400000) {					\	    EPRINTF(("GateRiscFF TRE timeout\n")); break;	\	}							\    }								\    lwpoke(gate_risc_fifo,data);				\} while (0)#endifextern	unsigned int *RISC_ptr_realtime, *RISC_cache_realtime;extern	unsigned int *VCD_ptr_resume_info, *VCD_cache_resume_info;GBLDEF_0(int timer2_period, 0);	/* Period for timer2. Set at run time	*/void	RISC_timer2_interrupt_service(void);void	RISC_start_timer2(void);void	RISC_to_dram(int dst, int *srcp, int n);void    RISC_flush(int start, int n);void	update_glbTimer(void);void	risc_fifo_read(int *p, int n);void	risc_fifo_write(int *p, int n);void	sram_to_dram(int dst, int *srcp, int n);void	dram_to_sram(int *dstp, int src, int n);void	UTIL_flushcache(register unsigned int, unsigned int);#endif /* __UTIL_H__ */

⌨️ 快捷键说明

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