/*---------------------------------------------------------------------------* Project: CtrBrom - swi - include File: swi.h Copyright 2008 Nintendo. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Log: $ $NoKeywords: $ *---------------------------------------------------------------------------*/ #ifndef BROM_SWI_SWI_H_ #define BROM_SWI_SWI_H_ #include #include #include #include #include #if 0 #include #include #include #endif #ifdef __cplusplus extern "C" { #endif void SWI_Halt( void ); void SWI_WaitByLoop( s32 count ); void SWI_WaitIntr( BOOL clear, OSIrqMask mask ); void SWI_WaitVBlankIntr( void ); void SWI_CpuSet( const void* src, void* dest, u32 dmaCntData ); void SWI_CpuSetFast( const void* src, void* dest, u32 dmaCntData ); void SWI_UnPackBits32( const void* src, void* dest, const MIUnpackBitsParam *paramp ); void SWI_UnCompLZ77Byte( const void* src, void* dest ); void SWI_UnCompRLByte( const void* src, void* dest ); s32 SWI_DivS32( s32 number, s32 denom ); u16 SWI_SqrtU32( u32 src ); u16 SWI_GetCRC16( u32 start, const u16 *datap, u32 size ); s32 SWI_UnCompHuffman( const u8 *srcp, u32 *destp, u8 *tableBufp, const MIReadStreamCallbacks *scb ); s32 SWI_UnCompLZ77Short( const u8 *srcp, u16 *destp, const void *paramp, const MIReadStreamCallbacks *scb ); s32 SWI_UnCompRLShort( const u8 *srcp, u16 *destp, const void *paramp, const MIReadStreamCallbacks *scb ); s32 SWI_UnCompLZ77Stream( const u8 *srcp, u8 *destp, const void *paramp, const MIReadStreamCallbacks *scb ); u32 SWI_GetSinTable( s32 index ); u32 SWI_GetPitchTable( s32 index); u32 SWI_GetVolumeTable( s32 index ); void SWIi_Terminate( void ); #ifdef SDK_ARM9 void SWI_SetPauseReg( u32 w ); void SWI_UnDiffByte2Byte( const void *src, void *dest ); void SWI_UnDiffShort2Short( const void *src, void *dest ); #else // SDK_ARM7 void SWI_Sleep( void ); void SWI_SetPauseHi( u32 dummy0, u32 dummy1, u8 b ); void SWI_SetPauseCheckFlag( void ); void SWI_ChangeSoundBias16( u32 UpDown, u32 stepLoops ); #endif /*---------------------------------------------------------------------------* Name: SWI_CpuClear Description: clear memory by SWI_CpuSet ・CPUでRAMクリアします。 ・クリアデータはスタックに置かれ、それをデスティネーションへコピーします。 ・引数: data クリアデータ destp デスティネーションアドレス size クリアバイト数 bit 転送ビット幅(16|32) Arguments: data : clear data destp : destination address size : clear size ( by byte ) bit : bit width ( 16 or 32 ) Returns: None *---------------------------------------------------------------------------*/ #define SWI_CpuClear( data, destp, size, bit ) \ do{ \ vu##bit tmp = (vu##bit )(data); \ SWI_CpuSet((u8 *)&(tmp), (u8 *)(destp), ( \ MI_DMA_SRC_FIX | \ MI_DMA_##bit##BIT_BUS | ((size)/((bit)/8) & 0x1fffff))); \ } while(0) /*---------------------------------------------------------------------------* Name: SWI_CpuCopy Description: copy memory by SWI_CpuSet ・CPUでコピーします。 ・引数: srcp : ソースアドレス destp : デスティネーションアドレス size : 転送バイト数 bit : 転送ビット幅(16|32) Arguments: srcp : source address destp : destination address size : size to copy ( by byte ) bit : bit width ( 16 or 32 ) Returns: None *---------------------------------------------------------------------------*/ #define SWI_CpuCopy( srcp, destp, size, bit ) \ \ SWI_CpuSet((u8 *)(srcp), (u8 *)(destp), ( \ MI_DMA_SRC_INC | \ MI_DMA_##bit##BIT_BUS | ((size)/((bit)/8) & 0x1fffff))) /*---------------------------------------------------------------------------* Name: SWI_CpuClearFast Description: clear memory by SWI_CpuSetFast quickly ・CPUで高速にRAMクリアするシステムコールを呼び出します。 ・クリアデータはスタックに置かれ、それをデスティネーションへコピーします。 ・32Byte単位でアクセス可能な時には32Byte単位の複数ストア命令が使用され、 端数は4Byte単位でアクセスされます。 ・引数: data クリアデータ destp デスティネーションアドレス size クリアバイト数 Arguments: data : clear data destp : destination address size : clear size ( by byte ) Returns: None *---------------------------------------------------------------------------*/ #define SWI_CpuClearFast( data, destp, size ) \ do{ \ vu32 tmp = (vu32 )(data); \ SWI_CpuSetFast((u8 *)&(tmp), (u8 *)(destp), ( \ MI_DMA_SRC_FIX | ((size)/(32/8) & 0x1fffff))); \ } while(0) /*---------------------------------------------------------------------------* Name: SWI_CpuCopyFast Description: clear memory by SWI_CpuSetFast quickly ・CPUで高速にコピーします。 ・32Byte単位でアクセス可能な時には複数ロード/ストア命令が使用され、 端数は4Byte単位でアクセスされます。 ・引数: srcp ソースアドレス destp デスティネーションアドレス size 転送バイト数 Arguments: srcp : source address destp : destination address size : size to copy ( by byte ) Returns: None *---------------------------------------------------------------------------*/ #define SWI_CpuCopyFast( srcp, destp, size ) \ \ SWI_CpuSetFast((u8 *)(srcp), (u8 *)(destp), ( \ MI_DMA_SRC_INC | ((size)/(32/8) & 0x1fffff))) #ifdef __cplusplus } /* extern "C" */ #endif /* BROM_SWI_SWI_H_ */ #endif