📄 dma_opti.s
字号:
! 32bit-32bit
! Author:
! Fang ZF
! Jian Huan (Modify)
! Date:
! 2006-2006-1-3 21:36
! 2006-1-10 9:01
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!__attribute__((section(".avi_v_text, \"ax\"")))
!void copy_uv_from_external_to_internal(DECODER *xvid_dec, short x, short y)
!{
! unsigned long xy_cord;
! unsigned long src = 0, dst = 0;
! DMA_CHANNEL_REG *DmaChl;
!
! while(DMA_CHANNEL_FULL == ( DmaChl = GetDmaChannelState(0)));
!
! xy_cord = (unsigned long)(xvid_dec->width) * (unsigned long)(y<<3) + (unsigned long)(x<<4);
!
! src = (unsigned long)((unsigned long)(xvid_dec->ref->uv_page)<<16) + 0x2c00 + (unsigned long)xy_cord;
! dst = (unsigned long)IntMem.mb_uv_row + (unsigned long)(x<<4);
!//---------------------------------------------------------------------
! DmaChl->pDmaFnct = DMA_FNCT_NULL;
! DmaChl->pDmaFnctArg = DMA_FNCT_NULL;
!//---------------------------------------------------------------------
!
! DmaChl->DmaSar = ((unsigned long)(src)<<1)+(unsigned long)0x4000000;
! DmaChl->DmaDar = ((unsigned long)(dst)<<1)+(unsigned long)0x40000;
!
! DmaChl->DmaCtl.Lsb = 0x00060025; //0x00060013;
! DmaChl->DmaCtl.Msb = 16*4; //16*8;
!
! DmaChl->DmaCfg.Lsb = 0x00000020;
! DmaChl->DmaCfg.Msb = 0x00001004;
!
! DmaChl->DmaSgr = 0x00800098; //0x01000130;
!
! DmaChl->DmaDsr = 0x00800098; //0x01000130;
!
! Dma_16x8Block = 1;
!
! DmaChl->Priority = 2;
!
! DmaChl->pResFlag = &Dma_16x8Block;
!
! CALL_DmaChannelSetup(0);
!
!}
MP4_ASSEMBLE_SECTION
.global _copy_uv_from_external_to_internal
.walign 2
_copy_uv_from_external_to_internal:
stdu r0, r12, -2
stdu r2, r12, -2
stdu r8, r12, -2
stdu r10, r12, -2
stdu r14, r12, -2
mov r0, %rpc
mov r8, r4
stu r0, r12, -1
mov r9, 320*8 !320
mul.a r9, r6
shll r5, 4
add r0, r5 !xy_cord
mov r9, r5
DMA_COPY_UV_FROM_EXTERNAL_TO_INTERNAL_STATE:
mov r4, 0
lda r13, _GetDmaChannelState
call r13
cmp r4, -1
bz DMA_COPY_UV_FROM_EXTERNAL_TO_INTERNAL_STATE
mov r13, r4
add r8, 5
mov r6, r4
ld r2, r8 !xvid_dec->ref
ld r3, r2, 2 !xvid_dec->ref->uv_page
xor r2, r2
movlh r10, 0x00002c00
add.e r2, r10
add.e r2, r0 !src
movh r10, _IntMem
mov r14, -1
movl r10, _IntMem
mov r15, -1
ld r10, r10, 1 !IntMem.mb_uv_row
xor r11, r11
add r10, r9 !dst
stdu r14, r13, 2
add r13, 2
movlh r8, 0x04000000
shll.e r2, 1
add.e r2, r8
stdu r2, r13, 2 !DmaChl->DmaSar
shrl r9, 8
shll.e r10, 1
add.e r10, r8
stdu r10, r13, 2 !DmaChl->DmaDar
movlh r8, 0x00060025
stdu r8, r13, 2 !DmaChl->DmaCtl.Lsb
movlh r10, 16*4
stdu r10, r13, 2 !DmaChl->DmaCfg.Msb
movlh r8, 0x00000020
stdu r8, r13, 2 !DmaChl->DmaCfg.Lsb
movlh r10, 0x00001004
stdu r10, r13, 2 !DmaChl->DmaCfg.Msb
movlh r8, 0x00800098
stdu r8, r13, 2 !DmaChl->DmaSgr
stdu r8, r13, 2 !DmaChl->DmaDsr
mov r5, 1
movh r8, _Dma_16x8Block
mov r9, 2
movl r8, _Dma_16x8Block
st r5, r8, 0
mov r4, 0
st r9, r6, 3 !DmaChl->Priority
movh r13, _CALL_DmaChannelSetup
st r8, r6, 2 !DmaChl->pResFlag
movl r13, _CALL_DmaChannelSetup
call r13
mov r5, r12
add r5, 1
ldu r6, r5, 1
mov %rpc, r6
lddu r14, r5, 2
lddu r10, r5, 2
lddu r8, r5, 2
lddu r2, r5, 2
lddu r0, r5, 2
add r5, -1
mov r12, r5
ret
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! Func:
! DMA_RGB_I2E
! Description:
! RGB Internal SRAM to External SDRAM
! Author:
! Jian H
! Date:
! 2006-1-5 9:10
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!__attribute__((section(".avi_v_text, \"ax\"")))
!void DMA_RGB_I2E(unsigned short *RgbBuf, short y, short size)
!{
! unsigned long dstRGB;
! unsigned long RGBPage = 4;
! DMA_CHANNEL_REG *DmaChl;
!
! while(DMA_CHANNEL_FULL == ( DmaChl = GetDmaChannelState(1)));
!
! RGBPage = 262144 + ((unsigned long)AviRgbSdramIndex)*76800;
! dstRGB = (unsigned long )((unsigned long )(RGBPage)) + (unsigned long)(y)*(unsigned long)(size/320); //指向SDRAM里当前帧Y分量的地址
!
!//---------------------------------------------------------------------
! DmaChl->pDmaFnct = DMA_FNCT_NULL;
! DmaChl->pDmaFnctArg = DMA_FNCT_NULL;
!//---------------------------------------------------------------------
!
! DmaChl->DmaSar = (unsigned long)(((unsigned long)(RgbBuf)<<1)+(unsigned long)0x40000);
! DmaChl->DmaDar = ((unsigned long)(dstRGB)<<1)+(unsigned long)0x4000000;
!
! DmaChl->DmaCtl.Lsb = 0x00040025;
! DmaChl->DmaCtl.Msb = 0x00000A00; //320*16/2
!
! DmaChl->DmaCfg.Lsb = 0x00000020;
! DmaChl->DmaCfg.Msb = 0x00001004;
!
! DmaChl->DmaDsr = 0x00800070;
!
! Dma_RGB_I2E = 1;
!
! DmaChl->Priority = 2;
!
! DmaChl->pResFlag = &Dma_RGB_I2E;
!
! CALL_DmaChannelSetup(1);
!}
MP4_ASSEMBLE_SECTION
.global _DMA_RGB_I2E
.walign 2
_DMA_RGB_I2E:
stdu r0, r12, -2
stdu r2, r12, -2
stdu r8, r12, -2
stdu r10, r12, -2
stdu r14, r12, -2
mov r0, %rpc
mov r8, r4
stu r0, r12, -1
mov r0, r5
DMA_RGB_I2E_STATE:
mov r4, 1
lda r13, _GetDmaChannelState
call r13
cmp r4, -1 !DMA_CHANNEL_FULL
bz DMA_RGB_I2E_STATE
mov r13, r4
mov r6, r4
movl r11, _AviRgbSdramIndex
movl r14, 150
movh r11, _AviRgbSdramIndex
movh r14, 0
ld r11, r11 !AviRgbSdramIndex
shll r0, 4 !y*(size/320)=y*16
shll r11, 9 !AviRgbSdramIndex*32*16
mov r1, 4 !4*64*1024=262144=0x4,0000
mac.a r11, r14 !dstRGB
mov r14, -1
mov r15, -1
!DmaChl->pDmaFnct = DMA_FNCT_NULL;
!DmaChl->pDmaFnctArg = DMA_FNCT_NULL;
stdu r14, r13, 2
!DmaChl->DmaSar = (unsigned long)(((unsigned long)(RgbBuf)<<1)+(unsigned long)0x40000);
!DmaChl->DmaDar = ((unsigned long)(dstRGB)<<1)+(unsigned long)0x4000000;
mov r9, 0
add r13, 2
shll.e r8, 1
movlh r10, 0x40000
add.e r8, r10
stdu r8, r13, 2
shll r11, 8
shll.e r0, 1
add.e r0, r10
stdu r0, r13, 2
!DmaChl->DmaCtl.Lsb = 0x00040025;
!DmaChl->DmaCtl.Msb = 0x00000A00;
movlh r8, 0x00040025
stdu r8, r13, 2 !DmaChl->DmaCtl.Lsb
movlh r10, 0x00000A00
stdu r10, r13, 2 !DmaChl->DmaCtl.Msb
!DmaChl->DmaCfg.Lsb = 0x00000020;
!DmaChl->DmaCfg.Msb = 0x00001004;
movlh r8, 0x00000020
stdu r8, r13, 2 !DmaChl->DmaCfg.Lsb
movlh r10, 0x00001004
stdu r10, r13, 2 !DmaChl->DmaCfg.Msb
!DmaChl->DmaDsr = 0x00800070;
movlh r8, 0x00800070
add r13, 2
mov r5, 1
stdu r8, r13, 2 !DmaChl->DmaDsr
movh r8, _Dma_RGB_I2E
mov r9, 2
movl r8, _Dma_RGB_I2E
mov r4, 1
st r5, r8, 0
movh r13, _CALL_DmaChannelSetup
st r9, r6, 3 !DmaChl->Priority
movl r13, _CALL_DmaChannelSetup
st r8, r6, 2 !DmaChl->pResFlag
call r13
mov r5, r12
add r5, 1
ldu r6, r5, 1
mov %rpc, r6
lddu r14, r5, 2
lddu r10, r5, 2
lddu r8, r5, 2
lddu r2, r5, 2
lddu r0, r5, 2
add r5, -1
mov r12, r5
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -