boot.c 950 Bytes
#include <ultra64.h>
#include <bstring.h>
#include "midiApp.h"

char	bootStack[STACKSIZE];

extern char _codeSegmentRomStart[];
extern char _codeSegmentRomEnd[];
extern char _codeSegmentStart[];
extern char _codeSegmentTextStart[];
extern char _codeSegmentTextEnd[];
extern char _codeSegmentDataStart[];
extern char _codeSegmentDataEnd[];
extern char _codeSegmentBssStart[];
extern char _codeSegmentBssEnd[];

boot(void *arg)
{
  
    void (*func)(void);
    
    osPiRawStartDma(OS_READ, (u32)_codeSegmentRomStart, _codeSegmentStart, 
		   _codeSegmentRomEnd-_codeSegmentRomStart);

    while(osPiGetStatus() & PI_STATUS_DMA_BUSY);

    osInvalICache(_codeSegmentTextStart,
		  _codeSegmentTextEnd-_codeSegmentTextStart);
    osInvalDCache(_codeSegmentDataStart,
		  _codeSegmentDataEnd-_codeSegmentDataStart);

    bzero(_codeSegmentBssStart, _codeSegmentBssEnd-_codeSegmentBssStart);

    func = (void (*)(void))_codeSegmentStart;
    func();

}