MTS: EEѥǥХå桼ƥƥå饤֥
	2000/05/19	K.Uehara
	$Id: readme.txt,v 1.10 2002/09/11 06:18:37 usr01475 Exp $

ǥХơT10000ξǻѤǤ㳰פȡåå
ǽȤƻġåɴؿ<MTS>Ѱդ
åɵư򤳤δؿǹԤʤȤˤꡢǥХƤǤ⡢
㳰סååǽˤʤ롣

file:
	mts.h
		MTS إå
	debugutil.h
		㳰סååإå
	mts.a
		饤֥
	mts_m.a
		ޥѥ饤֥ꡣMTS_*Ϥδؿ㳰פ
		ååƤӽФʤprintfϤʤ
		<<ɬޥϤѤ뤳ȡ>>

MTSѤϡDEBUG_*Ϥδؿۤ˸ƤӽФ뤬
MTSѤʤǤľܸƤӽФȤǻѤ뤳ȤǤ롣

㳰פ˴ؤƤϡEE-kernelؿѤƼ¸Ƥ뤿ᡢ
EE-kernelκΥС󥢥åפκݤ˻ǽˤʤǽ롣
EE-kernelΥСϡ1.5.3
ɵ˥饤֥1.6.0SetDebugHandlerؿݡȤ줿
 eretǥϥɥƤӽФפΤᡢǥХåʤ
 SetDebugHandlerǤ⡢mtsäƤ뤳ȤȤۤƱȤäƤΤǡ
 mtsǤϡȤꤢԤΤ꤫ΤޤޤǤ

㳰ХåǤϡsyscallȤäkernel̿θƽФϰڤǤʤ
iϤδؿ᡿쥸ͤΥͥؤ꤬Ǥʤ

ޤ㳰פˤĤƤϡ٥򸵤Υɥ쥹᤻ʤᡢ
LoadExecǵưʤˤϿΥץǺꤹɬפ롣
# MTSȤäƤ뤫DEBUG_InitExceptionʤܡ
# ϿϤΥ㡼θǤΥޥmts_m.aȤΤ̵

ʤäexception.cդgccγĥǽ򤫤ʤȤäƤ뤿ᡢ
gccʳδĶǤΥѥϤǤʤʤȻפ

printf򥪡С饤ɤط塢ɬlibcǥ󥯤뤳ȡ

------ åȥ졼ɤ --------

02/09/11ꡢ㳰׻˴ʰץåȥ졼ɽ褦ˤʤä
ʤˤꡢ쥸פä

åȥ졼ȤϤäƤ⡢֥å򥵡ƴؿؤƤ餷
ɥ쥹ͤäɽפäơδؿǰѿ˴ؿؤΥݥ󥿤
ѤϡͤɽƤޤ

ɤ.text󤫤ϳƥץμˤ뤿ᡢ
void MTS_SetIsTextFunc( int (*func)( void *addr ) );
ǡΥɥ쥹ƥȥꥢɤ֤ؿϿʤ
εǽƯʤ

ޤ֥åꥢɥ쥹פʤΤǡǥХåɽ륢ɥ쥹Ȥ
+8 ƤΤդɬס(ꥢɥ쥹+8ˤʤΤ)

---------------------------------------

ؿϰʲ̤ꡣ

------------------ mts.h ---------------------
-- MTS

ͥΥޥåɵǽȡ㳰åϤδؿȤäơ
EEǤΥåɤεư뤿Υӥ˥󥹴ؿ
åɤͥʤɤδEE-kernelΤΤ򤽤Τޤ޻Ȥ
åɤMTS_THREAD_MAXǵꤵƤ롣
δؿѤϡDEBUG_*ѤɬפϤʤ

ŪˤϡʲΤ褦main񤱤Ф
---
void Main( int id, void *arg )
{
	// main
}

#define STACKSIZE (16*1024)	// ƤȤ
static u_long128 main_stack[ STACKSIZE/sizeof( u_long128 ) ];

void main( void )
{
	MTS_BootThread( "MAIN", Main, 24, main_stack, STACKSIZE, NULL );// 24ϤƤȤ
}
---

**** ܥåɴ

void MTS_BootThread( char *name, void (*func)( int id, void *arg )
					, int pri, void *stack_top, int stack_size, void *arg );
	MTSươfuncꤷץ饤ƥΥåɤȤư
	nameϰդμ̻ҤǤʤƤϤʤʤ(12ʸޤ)
	funcΰEE-kernelΥåID
	main()ؿDMAϤνȤ
	mainؿΥåƱΤꤷƤưϤ
	Ǥ̤ΥåΰȤȤ˾ޤ
	δؿǵưåɤSleep롣
	㳰ȯˤϡꤵƤstack(app.cmdstack)Ѥ롣

int  MTS_NewThread( char *name, void (*func)( int id, void *arg )
					, int pri, void stack_top, int stack_size, void *arg );
	funcꤷץ饤ƥΥåɤȤư
	CreateStart롣
	nameϰդμ̻ҤǤʤƤϤʤʤ(12ʸޤ)
	֤͡funcΰEE-kernelΥåID

void MTS_ExitThread( void );
	ζλ

int MTS_GetThreadId( char *name );
	ID̾Ǹ롣

void MTS_SetExceptionCallback( void (*func)( void ) );
	㳰ХåϿ롣
	Ϥξɽθ˼¹Ԥ롣

void MTS_PANIC( char *format, ... );
	ǥɥ쥹顼򤪤㳰̤ɽ롣
	ޥѤΥ⥸塼󥯤ϡʤˤ⤷ʤäƤ롣

**** åɴ桼ƥƥ

<<EVENT FLAG>>

EEIOPΥ٥ȥե饰ȤۤƱεǽ¸롣
ʲ¤ꡣ
MTS_EventFlag¤Τϥ桼ץstaticǳݤ롣
1ĤΥ٥ȥե饰Ԥ륹åɤ1ġ
顼åϤ
31ӥåȡ

typedef struct {
	int value;
	int mask;
	int wait_threadid;
	int mode;
} MTS_EVENTFLAG;

MTS_EVENTFLAG *MTS_CreateEventFlag( MTS_EVENTFLAG *eventflag );

٥ȥե饰ꤹ롣

int MTS_WaitEventFlag( MTS_EVENTFLAG *ev, int mask, int mode, int timeout );

mode
#define MTS_EW_MODE_AND		0x0001
#define MTS_EW_MODE_OR		0x0002
#define MTS_EW_MODE_CLEAR	0x0004

֤
enum {
	MTS_EW_OK = 0,			// ｪλ
	MTS_EW_NO_WAIT  = -1,	// Ǥ˾郎ΩƤ
	MTS_EW_TIMEOUT = -2,	// timeout(hsync)вᤷƤ郎Ωʤä
};

int MTS_SetEventFlag( MTS_EVENTFLAG *ev, int mask );
int MTS_iSetEventFlag( MTS_EVENTFLAG *ev, int mask );

int MTS_CancelEventFlag( MTS_EVENTFLAG *ev );

<<DELAY THREAD>>
HSYNC꡼פ롣

void MTS_DelayThread( int wait_time );
wait_time  HSYNCñ̡

---------------- debugutil.h -----------------
-- 㳰

Υ⥸塼뤬󥯤ȡprintfС饤ɤ롣
㳰ȯ˲̤˥쥸פprintfΥɽ롣
ɸǤϡ512*448 VRAMΣϤɽ
printfΥϺԡХȡ
printfϺ128ʸޤǤ¤롣
ѹϡexception.cƬ#defineѹ롣

㳰β̥פΤ쥸ꥹȤr1-r24ɽƤ롣
r25,26ϥͥ롢r27-31gp,sp,fp,ra,pc

void DEBUG_InitException( void *stacktop );
	㳰ȯ˲̤˥פ⥸塼ΥåȥåפԤʤ
	ɬΰǸƤӽФȡ
	mainƬꤷƤסIOP֡ȤƤ¸Ƥ褦
	stacktopϡ㳰⥸塼ǻѤ륹åɥ쥹<>
	NULLꤹȡ0x001FFFF0ꤵ롣

void DEBUG_SetExceptionCallback( void (*func)( unsigned long *regs ) );
	㳰ȯ˸ƤФ륳ХåؿϿ
	1ĤϿǤʤΤǡա
	regsϥ֤줿쥸$0äƤʤᡢ1Ƥ뤳Ȥա

int cprintf( const char *format, ... );
	Ȥʤprintf

void excep_printf( const char *format, ... );
	㳰ХåΤ߸ƤӽФǽ
	̤ɽprintf

-- å

typedef struct _debug_stackcheck_info {
	struct _debug_stackcheck_info *next;
	char *name;
	void *top;
	int size;
} DEBUG_STACKCHECK_INFO;

void DEBUG_SetStackCheck( DEBUG_STACKCHECK_INFO *stack, char *name, void *top, int size );
	ååԤʤˡåΰѤͤĤ
	ߤ$spåơޤǤʤ褦ˤƤ뤬
	ȤΥåɤΥåˤϻѤʤ̵

DEBUG_STACKCHECK_INFO *DEBUG_ReleaseStack( void );
	åɤνλɬƤӽФ
	åݥ󥿤ͤ饫ȤΥå򸡺
	åˤΥåڤΥ

int DEBUG_GetStackUseSize( void );
	ߤΥåɤΥå̤򤫤
	åСʤɤƤСϥ󥰥åפ롣
	spľܻȤΤǡХåʤɤϸƤӽФʤ
	ΥMTSǵưƤ뤫DEBUG_SetStackCheckѤƤɬפ롣
	mts_m.aǤϡ֤(ϥޥ֤ǸƤФ٤ΤǤϤʤ
