malloc_memdsp.c 3.02 KB
/*
=============================================================================
        Copyright (C) 1997-1999 NINTENDO Co.,Ltd.
        
        $RCSfile: malloc_memdsp.c,v $
        $Revision: 1.1.1.1 $
        $Date: 2002/10/30 02:07:09 $
=============================================================================
関数名:malloc_memdsp
-----------------------------------------------------------------------------
書式:  #include <malloc.h>
        int malloc_memdsp(unsigned char *s, int size)
引数:  s 文字列のポインタ
        size 文字列のサイズ ÷ 60
戻り値:使用したサイズ ÷ 60
説明:  指定した一次元文字列を60桁を1行として、メモリ割り当て領域の情報を
        文字情報として返す。注意事項としては、文字列は 60 × 2 の倍数で
        なければならない。

        文字情報の表示例
            #define MEMCHECK_STRINGLEN  10
            void dsp_memcheck(void)
            {
                int i, j;
                char    s[MEMCHECK_STRINGLEN*60];

                i = malloc_memdsp(s, MEMCHECK_STRINGLEN);
                for (j=0; j<i;j++)  osSyncPrintf("%s\n",s+j*60);
            }

        文字情報の内容
            文字情報は2行で1データを現す。
            1行目
                "########:$$$$$$$$-&&&&&&&&"
                    ########は、ヘッダ情報格納アドレス
                    $$$$$$$$は、確保または開放されているメモリブロックの
                                先頭アドレス
                    &&&&&&&&は、確保または開放されているメモリブロックの
                                終端アドレス

            2行目
                2行目は、メモリブロックのヘッダ情報を現す。
                    "        (########)[$$$$$$$$] FREE"
                    "        (########)[$$$$$$$$] USE"
                    "        (########)[$$$$$$$$] ALIN"

                    ########は、メモリブロックのバイトサイズ
                    $$$$$$$$は、次のヘッダ情報のアドレス

                    文字列末の文字列
                        FREE メモリブロックが開放され、使用可能領域
                        USE  メモリブロックが使用済み
                        ALIN memalign関数使用時にアライメントの補正の
                             為にサイズが0のヘッダだけのメモリブロック

            内容が不正の場合
                "malloc_memdsp error:######## over area $$$$$$$$-&&&&&&&&"
                    ヘッダ情報にかかれた「次のヘッダ情報のアドレス」が、
                    InitHeap()で確保されている範囲を超えている。

                "malloc_memdsp error:check InitHeap()"
                    InitHeap() がされずに malloc_memdsp() が呼び出されたか、
                    最初のメモリブロックのヘッダ情報が不正な情報になっている。
-----------------------------------------------------------------------------
*/
#include    <ultra64.h>
#include    "string.h"
#include    "malloc.h"
#include    "_malloc.h"

int malloc_memdsp(unsigned char *s, int size)
{
    if ((int)malloc_ptr == -1)  {
            sprintf(&s[ 0], "malloc_memdsp error:check InitHeap()");
            sprintf(&s[60], "");
            return  2;
    }
    return  _malloc_memdsp(malloc_ptr, s, size);
}