⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 me.c

📁 pmpmodavc102_sub_src,psp下很好的播放器源码
💻 C
字号:
/*
PMP Mod
Copyright (C) 2006 jonny

Homepage: http://jonny.leffe.dnsalias.com
E-mail:   jonny@leffe.dnsalias.com

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

/*
simple lib to use the psp me

a lot of code is taken from here: http://forums.ps2dev.org/viewtopic.php?t=2652
thanks to crazyc, mrbrown, Brunni, xdeadbeef and anyone else involved
(major optimizations in libavcodec are done with the me)
*/


#include <pspkernel.h>
#include <string.h>
#include "me.h"
#include "mem64.h"


struct me_struct
	{
	int start;
	int end;
	void (*func)(int);
	int param;
	int signaled;
	};


volatile struct me_struct *nocache;


void me_stub(void);
void me_stub_end(void);


void me_startproc(u32 func, u32 param)
	{
	memcpy((void *) 0xbfc00040, me_stub, (int) (me_stub_end - me_stub));

	_sw(func,  0xbfc00600);
	_sw(param, 0xbfc00604);

	sceKernelDcacheWritebackAll();
	sceSysregMeResetEnable();
	sceSysregMeBusClockEnable();
	sceSysregMeResetDisable();
	}


void me_function(int unused)
	{
	while (1)
		{
		while (nocache->start == 0);
		nocache->start = 0;
		nocache->func(nocache->param);
		nocache->end = 1;
		}
	}


int me_struct_init()
	{
	nocache = malloc_64(sizeof(struct me_struct));

	if (nocache == 0) return(0);

	nocache = (volatile struct me_struct *) (((int) nocache) | 0x40000000);
	sceKernelDcacheWritebackInvalidateAll();

	nocache->start    = 0;
	nocache->end      = 1;
	nocache->func     = 0;
	nocache->param    = 0;
	nocache->signaled = 0;

	me_startproc((u32) me_function, 0);

	return(1);
	}


void me_start(int func, int param)
	{
	nocache->end   = 0;
	nocache->func  = (void (*)(int)) func;
	nocache->param = param;
	nocache->start = 1;
	}


void me_wait()
	{
	while (nocache->end == 0);
	}


int me_unused()
	{
	return(nocache->end);
	}


void me_signal_reset()
	{
	nocache->signaled = 0;
	}


void me_signal()
	{
	nocache->signaled = 1;
	}


int me_signaled()
	{
	return(nocache->signaled);
	}


void me_sceKernelDcacheWritebackInvalidateAll()
	{
	asm __volatile__
		(
		"cache 20, 0($0)\n"
		"cache 20, 0($0)\n"
		"cache 20, 64($0)\n"
		"cache 20, 64($0)\n"
		"cache 20, 128($0)\n"
		"cache 20, 128($0)\n"
		"cache 20, 192($0)\n"
		"cache 20, 192($0)\n"
		"cache 20, 256($0)\n"
		"cache 20, 256($0)\n"
		"cache 20, 320($0)\n"
		"cache 20, 320($0)\n"
		"cache 20, 384($0)\n"
		"cache 20, 384($0)\n"
		"cache 20, 448($0)\n"
		"cache 20, 448($0)\n"
		"cache 20, 512($0)\n"
		"cache 20, 512($0)\n"
		"cache 20, 576($0)\n"
		"cache 20, 576($0)\n"
		"cache 20, 640($0)\n"
		"cache 20, 640($0)\n"
		"cache 20, 704($0)\n"
		"cache 20, 704($0)\n"
		"cache 20, 768($0)\n"
		"cache 20, 768($0)\n"
		"cache 20, 832($0)\n"
		"cache 20, 832($0)\n"
		"cache 20, 896($0)\n"
		"cache 20, 896($0)\n"
		"cache 20, 960($0)\n"
		"cache 20, 960($0)\n"
		"cache 20, 1024($0)\n"
		"cache 20, 1024($0)\n"
		"cache 20, 1088($0)\n"
		"cache 20, 1088($0)\n"
		"cache 20, 1152($0)\n"
		"cache 20, 1152($0)\n"
		"cache 20, 1216($0)\n"
		"cache 20, 1216($0)\n"
		"cache 20, 1280($0)\n"
		"cache 20, 1280($0)\n"
		"cache 20, 1344($0)\n"
		"cache 20, 1344($0)\n"
		"cache 20, 1408($0)\n"
		"cache 20, 1408($0)\n"
		"cache 20, 1472($0)\n"
		"cache 20, 1472($0)\n"
		"cache 20, 1536($0)\n"
		"cache 20, 1536($0)\n"
		"cache 20, 1600($0)\n"
		"cache 20, 1600($0)\n"
		"cache 20, 1664($0)\n"
		"cache 20, 1664($0)\n"
		"cache 20, 1728($0)\n"
		"cache 20, 1728($0)\n"
		"cache 20, 1792($0)\n"
		"cache 20, 1792($0)\n"
		"cache 20, 1856($0)\n"
		"cache 20, 1856($0)\n"
		"cache 20, 1920($0)\n"
		"cache 20, 1920($0)\n"
		"cache 20, 1984($0)\n"
		"cache 20, 1984($0)\n"
		"cache 20, 2048($0)\n"
		"cache 20, 2048($0)\n"
		"cache 20, 2112($0)\n"
		"cache 20, 2112($0)\n"
		"cache 20, 2176($0)\n"
		"cache 20, 2176($0)\n"
		"cache 20, 2240($0)\n"
		"cache 20, 2240($0)\n"
		"cache 20, 2304($0)\n"
		"cache 20, 2304($0)\n"
		"cache 20, 2368($0)\n"
		"cache 20, 2368($0)\n"
		"cache 20, 2432($0)\n"
		"cache 20, 2432($0)\n"
		"cache 20, 2496($0)\n"
		"cache 20, 2496($0)\n"
		"cache 20, 2560($0)\n"
		"cache 20, 2560($0)\n"
		"cache 20, 2624($0)\n"
		"cache 20, 2624($0)\n"
		"cache 20, 2688($0)\n"
		"cache 20, 2688($0)\n"
		"cache 20, 2752($0)\n"
		"cache 20, 2752($0)\n"
		"cache 20, 2816($0)\n"
		"cache 20, 2816($0)\n"
		"cache 20, 2880($0)\n"
		"cache 20, 2880($0)\n"
		"cache 20, 2944($0)\n"
		"cache 20, 2944($0)\n"
		"cache 20, 3008($0)\n"
		"cache 20, 3008($0)\n"
		"cache 20, 3072($0)\n"
		"cache 20, 3072($0)\n"
		"cache 20, 3136($0)\n"
		"cache 20, 3136($0)\n"
		"cache 20, 3200($0)\n"
		"cache 20, 3200($0)\n"
		"cache 20, 3264($0)\n"
		"cache 20, 3264($0)\n"
		"cache 20, 3328($0)\n"
		"cache 20, 3328($0)\n"
		"cache 20, 3392($0)\n"
		"cache 20, 3392($0)\n"
		"cache 20, 3456($0)\n"
		"cache 20, 3456($0)\n"
		"cache 20, 3520($0)\n"
		"cache 20, 3520($0)\n"
		"cache 20, 3584($0)\n"
		"cache 20, 3584($0)\n"
		"cache 20, 3648($0)\n"
		"cache 20, 3648($0)\n"
		"cache 20, 3712($0)\n"
		"cache 20, 3712($0)\n"
		"cache 20, 3776($0)\n"
		"cache 20, 3776($0)\n"
		"cache 20, 3840($0)\n"
		"cache 20, 3840($0)\n"
		"cache 20, 3904($0)\n"
		"cache 20, 3904($0)\n"
		"cache 20, 3968($0)\n"
		"cache 20, 3968($0)\n"
		"cache 20, 4032($0)\n"
		"cache 20, 4032($0)\n"
		"cache 20, 4096($0)\n"
		"cache 20, 4096($0)\n"
		"cache 20, 4160($0)\n"
		"cache 20, 4160($0)\n"
		"cache 20, 4224($0)\n"
		"cache 20, 4224($0)\n"
		"cache 20, 4288($0)\n"
		"cache 20, 4288($0)\n"
		"cache 20, 4352($0)\n"
		"cache 20, 4352($0)\n"
		"cache 20, 4416($0)\n"
		"cache 20, 4416($0)\n"
		"cache 20, 4480($0)\n"
		"cache 20, 4480($0)\n"
		"cache 20, 4544($0)\n"
		"cache 20, 4544($0)\n"
		"cache 20, 4608($0)\n"
		"cache 20, 4608($0)\n"
		"cache 20, 4672($0)\n"
		"cache 20, 4672($0)\n"
		"cache 20, 4736($0)\n"
		"cache 20, 4736($0)\n"
		"cache 20, 4800($0)\n"
		"cache 20, 4800($0)\n"
		"cache 20, 4864($0)\n"
		"cache 20, 4864($0)\n"
		"cache 20, 4928($0)\n"
		"cache 20, 4928($0)\n"
		"cache 20, 4992($0)\n"
		"cache 20, 4992($0)\n"
		"cache 20, 5056($0)\n"
		"cache 20, 5056($0)\n"
		"cache 20, 5120($0)\n"
		"cache 20, 5120($0)\n"
		"cache 20, 5184($0)\n"
		"cache 20, 5184($0)\n"
		"cache 20, 5248($0)\n"
		"cache 20, 5248($0)\n"
		"cache 20, 5312($0)\n"
		"cache 20, 5312($0)\n"
		"cache 20, 5376($0)\n"
		"cache 20, 5376($0)\n"
		"cache 20, 5440($0)\n"
		"cache 20, 5440($0)\n"
		"cache 20, 5504($0)\n"
		"cache 20, 5504($0)\n"
		"cache 20, 5568($0)\n"
		"cache 20, 5568($0)\n"
		"cache 20, 5632($0)\n"
		"cache 20, 5632($0)\n"
		"cache 20, 5696($0)\n"
		"cache 20, 5696($0)\n"
		"cache 20, 5760($0)\n"
		"cache 20, 5760($0)\n"
		"cache 20, 5824($0)\n"
		"cache 20, 5824($0)\n"
		"cache 20, 5888($0)\n"
		"cache 20, 5888($0)\n"
		"cache 20, 5952($0)\n"
		"cache 20, 5952($0)\n"
		"cache 20, 6016($0)\n"
		"cache 20, 6016($0)\n"
		"cache 20, 6080($0)\n"
		"cache 20, 6080($0)\n"
		"cache 20, 6144($0)\n"
		"cache 20, 6144($0)\n"
		"cache 20, 6208($0)\n"
		"cache 20, 6208($0)\n"
		"cache 20, 6272($0)\n"
		"cache 20, 6272($0)\n"
		"cache 20, 6336($0)\n"
		"cache 20, 6336($0)\n"
		"cache 20, 6400($0)\n"
		"cache 20, 6400($0)\n"
		"cache 20, 6464($0)\n"
		"cache 20, 6464($0)\n"
		"cache 20, 6528($0)\n"
		"cache 20, 6528($0)\n"
		"cache 20, 6592($0)\n"
		"cache 20, 6592($0)\n"
		"cache 20, 6656($0)\n"
		"cache 20, 6656($0)\n"
		"cache 20, 6720($0)\n"
		"cache 20, 6720($0)\n"
		"cache 20, 6784($0)\n"
		"cache 20, 6784($0)\n"
		"cache 20, 6848($0)\n"
		"cache 20, 6848($0)\n"
		"cache 20, 6912($0)\n"
		"cache 20, 6912($0)\n"
		"cache 20, 6976($0)\n"
		"cache 20, 6976($0)\n"
		"cache 20, 7040($0)\n"
		"cache 20, 7040($0)\n"
		"cache 20, 7104($0)\n"
		"cache 20, 7104($0)\n"
		"cache 20, 7168($0)\n"
		"cache 20, 7168($0)\n"
		"cache 20, 7232($0)\n"
		"cache 20, 7232($0)\n"
		"cache 20, 7296($0)\n"
		"cache 20, 7296($0)\n"
		"cache 20, 7360($0)\n"
		"cache 20, 7360($0)\n"
		"cache 20, 7424($0)\n"
		"cache 20, 7424($0)\n"
		"cache 20, 7488($0)\n"
		"cache 20, 7488($0)\n"
		"cache 20, 7552($0)\n"
		"cache 20, 7552($0)\n"
		"cache 20, 7616($0)\n"
		"cache 20, 7616($0)\n"
		"cache 20, 7680($0)\n"
		"cache 20, 7680($0)\n"
		"cache 20, 7744($0)\n"
		"cache 20, 7744($0)\n"
		"cache 20, 7808($0)\n"
		"cache 20, 7808($0)\n"
		"cache 20, 7872($0)\n"
		"cache 20, 7872($0)\n"
		"cache 20, 7936($0)\n"
		"cache 20, 7936($0)\n"
		"cache 20, 8000($0)\n"
		"cache 20, 8000($0)\n"
		"cache 20, 8064($0)\n"
		"cache 20, 8064($0)\n"
		"cache 20, 8128($0)\n"
		"cache 20, 8128($0)\n"
		);
	}	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -