Thanks. :DZitat:
Zitat von Insert_Witty_Name
Printable View
Thanks. :DZitat:
Zitat von Insert_Witty_Name
I have a stupid annoying problem with pspSdkLoadStartModule... its returning 0x800200D1 which is SCE_KERNEL_ERROR_ILLEGAL_ PERM.
Code:
I can't see there being a problem there, so I've fiddled around and this one has me totally stumped. I've tried loading the module in PSPLink and I get the same error, so am I write in assuming its somewhere in my code/makefile/exports?Code:status = pspSdkLoadStartModule("p4ext.prx", PSP_MEMORY_PARTITION_USER);
if(status < 0) errorMajor(status);
else _printf("Successfully loaded and linked p4ext.prx\n");
Spoiler for P4Ext:
Spoiler for Makefile:
Spoiler for Exports (doubt this is the problem):
If anyone can shed any light onto whats going wrong here, I would greatly apprechiate it, its now affecting 3 modules...
-Aura
What's the 0x800 for?Code:PSP_MODULE_INFO("Ext", 0x800, 0, 1);
Also, have you tried the ku functions?
Shouldn't it be 0x0800 for an updater application?
It's updater mode, it's the same as user mode but with added write access to flash0 ;) It requires a updater PARAM.SFO though, and it needs to be in ms0:/PSP/GAME/UPDATE.Zitat:
Zitat von Archaemic
I extracted the 1.51 PARAM.SFO using PBP Unpacker, then opened it in a HEX-editor and changed the last '1.51' to '3.91':
http://xs225.xs.to/xs225/08123/screenshot953.jpg
I'm not sure if it's legal to post that PARAM.SFO here though..
I always wondered what the "offical" term was, I just know it gives flash access and so I use it for flashing apps without the pain of making kernel modules.Zitat:
Zitat von Archaemic
Whats the point in using KU functions? It appears to be the modules and not the way the function is loading them, I have tried, as all suggestions are worth trying, but it didn't do anything bar return the same error. I've also tried running in user mode, but to no avail.
I also had the thought that it may be because I'm running in 3.XX and not 1.50 (like trying to use sceLoadExec returns a similar error) but I attempted on 1.50 and had the same problem.
-Aura
Hey guys, I am quite happy with my first homebrew, even if it is a hello world.
I cannot wait to go further with this.
But I have a few questions, I am new to C and C++, so please bear with me.
After using the "make" command, it generated some files in where my project was. Can anyone please tell me what they are?
hello.elf - What does that do?
main.o - What does that do?
PARAM.SFO - I know what this is and does.
EBOOT.PBP - I know what this is and does.
Thanks to anyone that helps me.
Hey man,
The Hello.elf is the executable which is packed inside the eboot. As in this is the game data, not XMB picture or music or anything. Main.o is your compiled Main.c
In laymans terms, until you get the a bit more knowledgable, *.elf is a fully compiled and linked peice of code, a non-compressed exe file for PSPs if you will. *.PBP is a compressed packaged version of the *.elf, it contains the elf file and other files such as images and sounds for the XMB. *.sfo is an information package, so to speak, that contains the information detailed in the XMB when an EBOOT is selected, it shows the name (and in some things extra data that is relavent to that program). The *.o is the compiled and linked file of the .c source code of the same name, once this is compiled and linked it becomes a binary file, and will be packaged into the final program at the end.
You may also eventually notice *.prx files, these are 3.XX versions of the *.elf files, they work the same to the common user but have some big changes that probably wouldn't make much sence right now :p
-Aura
How would I add a cursor to a menu/application? Is there a built in one or do I have to load an image and have it move with the analog stick?
I decided after many errors to just remove all code relating to my enemy variables and functions, but I still get errors, with most be like the originals from a couple pages ago :Argh: .
My main.cpp:
I read in google that those to things in red are supposed to fix the errors that I was getting, but I still get the same problems.
Plus, I realize that some mistakes that I am making are elementary, but there are others that I just don't get from what I, and others know.
Everytime I try making something and then compile it, I seem to get the same, exact roadblocks :(
You can't assign values to a variable except during instantiation outside function scope.
ToCode:float totalhealth, health;
int mx, my, yyy;
bool paused;
OSL_SOUND *music, *music2;
OSL_IMAGE *player, *menu;
void oslStopSound(OSL_SOUND *music2);
health = 250;
totalhealth = 250;
~health;
~totalhealth;
Code:float totalhealth = 200.f, health = 250.f;
int mx, my, yyy;
bool paused;
OSL_SOUND *music, *music2;
OSL_IMAGE *player, *menu;
void oslStopSound(OSL_SOUND *music2);
Zitat:
Zitat von yaustar
Oh, I had forgotten that... I will try compiling once again.... ***crosses fingers***
-= Double Post =-
Ah, yaustar. If I could, I would donate points, you did what I could obviously not ;)
I don't have my PSP atm, but as soon as I do, I will make sure my newly compiled eboot works correctly :D
-= Double Post =-
Ok, I finally got the application to compile(amongst many errors) but it worked :)
But now, I get the problem, where everytime it is loaded from the memory stick, it freezes, and then the PSP shuts off. I can't figure out why that happens.... would there be any particular reason?
Anybody? :Cry:Zitat:
Zitat von Dre361224
There is a function in the PSPSDK about changing colours ;)
Have you actually looked at what your code does?Zitat:
Zitat von spike021
Zitat:
Zitat von yaustar
Yeah, but I just don't get what the probem could be... :Argh:
And I have sent PMs to a couple developers(won't say who), and the help that I have been getting has been a little mum. Although yaustar... you've been a good help, I applaud you ;)
I have tried making an account at the ps2dev forums, but for some reason, any of the emails that I try to use don't work(supposedly they are banned) I have never registered there in my life :(
I may come back here for help, but I really need to think about it first.
Given the code you have shown already:
How many times does that code actually runs when the games starts? (Clue: Lower then 2)Code:int main(int argc, char* argv[])
{
oslDrawImage (menu);
oslPlaySound(music2,0);
if (PSP_CTRL_START == true)
{
oslClearScreen (RGB(0,0,0));
oslStopSound(music2);
}
oslInit(0);
oslInitGfx(OSL_PF_8888, 1);
oslInitConsole();
oslInitAudio();
music = oslLoadSoundFile("awakeni ng.bgm", OSL_FMT_STREAM);// Sound for game
music2 = oslLoadSoundFile("dawn.bg m", OSL_FMT_STREAM);// Sound for menu
oslAssert(music); //Debug: verify it could be loaded
oslAssert(music2); //Debug: verify it could be loaded
oslPlaySound(music, 0);
player = oslLoadImageFile("Pics/player.png", OSL_IN_RAM, OSL_PF_8888);
menu = oslLoadImageFile("Pics/menu.png" , OSL_IN_RAM, OSL_PF_8888);
player->x = 135;
player->y = 240;
oslDrawImage(player);
// draw player
oslDeinitAudio();
oslQuit();
return 0;
}
Yep. Now I know what I have done wrong.... I feel like an idiot :o
Yaustar if I could donate........ ;)
-= Double Post =-
I'm still having problems... I guess it wasn't that(I added a while function for the return and everything). There must be something I am still missing.
Yep but we can't see it because you haven't posted any updated code.Zitat:
Zitat von spike021
Zitat:
Zitat von yaustar
Dam, the forums are creating spaces inbetween letters, just so you know.Code:int main(int argc, char* argv[])
{
oslInit(0);
oslInitGfx(OSL_PF_8888, 1);
oslInitConsole();
oslInitAudio();
SetupCallbacks();
music = oslLoadSoundFile("awakening.bgm", OSL_FMT_STREAM);// Sound for game
music2 = oslLoadSoundFile("dawn.bgm", OSL_FMT_STREAM);// Sound for menu
player = oslLoadImageFile("Pics/player.png", OSL_IN_RAM, OSL_PF_8888);
menu = oslLoadImageFile("Pics/menu.png" , OSL_IN_RAM, OSL_PF_8888);
while(!osl_quit){
Keys();
oslPlaySound(music2,0);
oslDrawImage (menu);
oslReadKeys();
if (osl_keys->held.start)
{
oslClearScreen (RGB(0,0,0));
oslStopSound(music2);
}
oslPlaySound(music, 0);
player->x = 135;
player->y = 240;
oslDrawImage(player);
// draw player
oslDeinitAudio();
oslQuit();
return 0;
}
}
Use the code tag...
No offense but you really should stop doing this and at least learn the basic logic flow statements. This code STILL only runs once.Code:int main(int argc, char* argv[])
{
oslInit(0);
oslInitGfx(OSL_PF_8888, 1);
oslInitConsole();
oslInitAudio();
SetupCallbacks();
music = oslLoadSoundFile("awakeni ng.bgm", OSL_FMT_STREAM);// Sound for game
music2 = oslLoadSoundFile("dawn.bg m", OSL_FMT_STREAM);// Sound for menu
player = oslLoadImageFile("Pics/player.png", OSL_IN_RAM, OSL_PF_8888);
menu = oslLoadImageFile("Pics/menu.png" , OSL_IN_RAM, OSL_PF_8888);
while (!osl_quit)
{
Keys();
oslPlaySound(music2,0);
oslDrawImage (menu);
oslReadKeys();
if (osl_keys->held.start)
{
oslClearScreen (RGB(0,0,0));
oslStopSound(music2);
}
oslPlaySound(music, 0);
player->x = 135;
player->y = 240;
oslDrawImage(player);
// draw player
oslDeinitAudio();
oslQuit();
return 0;
}
}
Read: http://parabellumgames.wordpress.com...c-programming/
I've never used OSL, but looking at that straight away makes me think its wrong, with that while(!osl_quit) and the oslQuit(); function in the while loop, surely it makes it act like linear code? You should have some if statement before the oslQuit, to make sure it only runs when you want it to, thus actually keeping the while loop.
A quick question to do with loops, if I do something like this:
Would that effectively break the first loop thus removing you from both loops, or would it keep you running in loop2 until you broke from that, then break you from loop1 once you've "escaped" loop2?Code:int loop1 = 1; loop2 = 1;
while(loop1)
{
//random code
while(loop2)
{
//more random code
if(something == something else) loop1 = 0;
}
}
-Aura
You should try experimenting yourself...Zitat:
Zitat von Auraomega
But if you need to know without experimenting, if 'something' IS true to 'something else' it will still run the nested loop, only should that nested loop break would it compare loop1 to true/1 again and not execute the outer loop.
P.S. what's loop2's data type ;)
Thanks for that, and it was just a quick question before I hit the hay, I couldn't be bothered to search for the answer or type some test code, makefile, and output,hell, I couldn't even make sure my code was correct :pZitat:
int loop1 = 1; loop2 = 1;
-Aura
Dev-C++ has made testing things a 5 second job... just throwing that out there ^^
How so?Zitat:
Zitat von SG57
You type out normal command line code (no GUI) and hit F9, it compiles, thats only Win32 mind, no PSP stuff.
I used to use Dev-C++, but it got annoying, its big, laggy, buggy and formats stuff horribly (I'm not talking the colouring, but the tabs, spaces etc), I instead use Notepad++ and MinGW32 command line stuff when I compile for the PC, its similar to the PSP too because you have to use makefiles, which I have also found preferable to showing an IDE what to link to.
-Aura
You don't have to. I still use an IDE to cross compile. (In my case Code::Blocks).Zitat:
Zitat von Auraomega
Hey, I noticed that graphics.c doesn't function properly when using intrafont. For example, when I try to display an image when printing with intrafont the image becomes distorted. Can anyone tell me how to get them both functioning?
I have no such problems, have you made sure that you have cached the fonts correctly? Try the biggest caching (I forget which one) and see if that helps. If that doesn't work maybe you could post some code, as it may be the order you are doing things.
-Aura
You need to reset a couple of the GU states that intraFont changes after using it.
:( Ah, and that...Zitat:
Zitat von Insert_Witty_Name
I edited my intraFontPrint function to contain everything needed so I wouldn't have to continuously add the code when I used intraFont:
Might be helpful to you.Code:float intraFontPrint(intraFont *font, float x, float y, const char *text) {
guStart(); /*~~~~~~~~~~~~~~~~Added Function~~~~~~~~~~~~~~~~~~~~*/
if (!text || strlen(text) == 0 || !font) return x;
int i = 0, length = 0;
if (font->options & INTRAFONT_STRING_SJIS) {
while (text[i]) {
length++;
i += ( text[i] <= 0x7FU || (text[i] >= 0xA0U && text[i] <= 0xDFU) || text[i] >= 0xFDU) ? 1 : 2; //single or double byte
}
} else {
length = strlen(text);
}
unsigned short* ucs2_text = (unsigned short*)malloc((length+1)*sizeof(unsigned short));
if (!ucs2_text) return x;
unsigned char* utext = (unsigned char*)text;
for (i = 0; i < length; i++) {
if (font->options & INTRAFONT_STRING_SJIS) {
ucs2_text[i] = intraFontSJIS2UCS2((unsigned char**)&utext);
} else {
ucs2_text[i] = utext[i];
}
}
ucs2_text[i] = 0;
x = intraFontPrintUCS2(font, x, y, ucs2_text);
free(ucs2_text);
sceGuTexMode(GU_PSM_8888, 0, 0, 0); /*~~~~~~~~~~~~~~~~Added Function~~~~~~~~~~~~~~~~~~~~*/
sceGuFinish(); /*~~~~~~~~~~~~~~~~Added Function~~~~~~~~~~~~~~~~~~~~*/
sceGuSync(0,0); /*~~~~~~~~~~~~~~~~Added Function~~~~~~~~~~~~~~~~~~~~*/
return x;
}
-Aura
Everything can be turned off or on in Dev-c++, my line/tab space is 2 and I ignore smart tabs. Works great.Zitat:
Zitat von Auraomega
By the way, the code you posted wasn't PSP specific so why does it matter if it was compiled for PC?
Hmm, well either way it was the makefile thing that was bugging me the most (I tried compiling the NeHe tutorials for OpenGL and it wouldn't link some libraries correctly).
The person after ask why Dev-C++ was faster, I was simply stating it wouldn't be suitable for testing for the PSP (which yaustar corrected me on), I just wanted to clear up any possible confusion seeing as this is a PSP thread. Either way its obsolete now as yaustar added, you can use an IDE to compile PSP stuff on the fly.
-Aura
Hello everyone,
I have a problem with tne netdialog.c: I can't compile it...
Here the netdialog.c:
And here the makefile:Code:/*
* PSP Software Development Kit - http://www.pspdev.org
* -----------------------------------------------------------------------
* Licensed under the BSD license, see LICENSE in PSPSDK root for details.
*
* main.c - Net dialog sample for connecting to an access point
*
* For OE firmwares, this sample must be run under the 3.xx kernel.
*
* Copyright (c) 2007 David Perry (Insert_Witty_Name)
*
*/
#include <pspkernel.h>
#include <pspdisplay.h>
#include <string.h>
#include <math.h>
#include <psputility.h>
#include <pspgu.h>
#include <pspgum.h>
#include <pspsdk.h>
#include <pspnet.h>
#include <pspnet_inet.h>
#include <pspnet_apctl.h>
/*
#if _PSP_FW_VERSION >= 200
PSP_MODULE_INFO("Net Dialog Sample", 0, 1, 1);
#else
PSP_MODULE_INFO("Net Dialog Sample", 0x1000, 1, 1);
PSP_MAIN_THREAD_ATTR(0);
#endif
*/
static int running = 1;
/* Exit callback */
int exit_callback(int arg1, int arg2, void *common)
{
quit();
return 0;
}
/* Callback thread */
int CallbackThread(SceSize args, void *argp)
{
int cbid;
cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);
sceKernelSleepThreadCB();
return 0;
}
/* Sets up the callback thread and returns its thread id */
int SetupCallbacks(void)
{
int thid = 0;
thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, PSP_THREAD_ATTR_USER, 0);
if (thid >= 0)
sceKernelStartThread(thid, 0, 0);
return thid;
}
/* Graphics stuff, based on cube sample */
static unsigned int __attribute__((aligned(16))) list[262144];
/*
struct Vertex
{
unsigned int color;
float x,y,z;
};
struct Vertex __attribute__((aligned(16))) vertices[12*3] =
{
{0xff7f0000,-1,-1, 1}, // 0
{0xff7f0000,-1, 1, 1}, // 4
{0xff7f0000, 1, 1, 1}, // 5
{0xff7f0000,-1,-1, 1}, // 0
{0xff7f0000, 1, 1, 1}, // 5
{0xff7f0000, 1,-1, 1}, // 1
{0xff7f0000,-1,-1,-1}, // 3
{0xff7f0000, 1,-1,-1}, // 2
{0xff7f0000, 1, 1,-1}, // 6
{0xff7f0000,-1,-1,-1}, // 3
{0xff7f0000, 1, 1,-1}, // 6
{0xff7f0000,-1, 1,-1}, // 7
{0xff007f00, 1,-1,-1}, // 0
{0xff007f00, 1,-1, 1}, // 3
{0xff007f00, 1, 1, 1}, // 7
{0xff007f00, 1,-1,-1}, // 0
{0xff007f00, 1, 1, 1}, // 7
{0xff007f00, 1, 1,-1}, // 4
{0xff007f00,-1,-1,-1}, // 0
{0xff007f00,-1, 1,-1}, // 3
{0xff007f00,-1, 1, 1}, // 7
{0xff007f00,-1,-1,-1}, // 0
{0xff007f00,-1, 1, 1}, // 7
{0xff007f00,-1,-1, 1}, // 4
{0xff00007f,-1, 1,-1}, // 0
{0xff00007f, 1, 1,-1}, // 1
{0xff00007f, 1, 1, 1}, // 2
{0xff00007f,-1, 1,-1}, // 0
{0xff00007f, 1, 1, 1}, // 2
{0xff00007f,-1, 1, 1}, // 3
{0xff00007f,-1,-1,-1}, // 4
{0xff00007f,-1,-1, 1}, // 7
{0xff00007f, 1,-1, 1}, // 6
{0xff00007f,-1,-1,-1}, // 4
{0xff00007f, 1,-1, 1}, // 6
{0xff00007f, 1,-1,-1}, // 5
};
*/
#define BUF_WIDTH (512)
#define SCR_WIDTH (480)
#define SCR_HEIGHT (272)
#define PIXEL_SIZE (4)
#define FRAME_SIZE (BUF_WIDTH * SCR_HEIGHT * PIXEL_SIZE)
#define ZBUF_SIZE (BUF_WIDTH SCR_HEIGHT * 2)
static void setupGu()
{
sceGuInit();
sceGuStart(GU_DIRECT,list);
sceGuDrawBuffer(GU_PSM_8888,(void*)0,BUF_WIDTH);
sceGuDispBuffer(SCR_WIDTH,SCR_HEIGHT,(void*)0x88000,BUF_WIDTH);
sceGuDepthBuffer((void*)0x110000,BUF_WIDTH);
sceGuOffset(2048 - (SCR_WIDTH/2),2048 - (SCR_HEIGHT/2));
sceGuViewport(2048,2048,SCR_WIDTH,SCR_HEIGHT);
sceGuDepthRange(0xc350,0x2710);
sceGuScissor(0,0,SCR_WIDTH,SCR_HEIGHT);
sceGuEnable(GU_SCISSOR_TEST);
sceGuDepthFunc(GU_GEQUAL);
sceGuEnable(GU_DEPTH_TEST);
sceGuFrontFace(GU_CW);
sceGuShadeModel(GU_SMOOTH);
sceGuEnable(GU_CULL_FACE);
sceGuEnable(GU_CLIP_PLANES);
sceGuFinish();
sceGuSync(0,0);
sceDisplayWaitVblankStart();
sceGuDisplay(GU_TRUE);
}
static void drawStuff(void)
{
static int val = 0;
sceGuStart(GU_DIRECT, list);
sceGuClearColor(0xff554433);
sceGuClearDepth(0);
sceGuClear(GU_COLOR_BUFFER_BIT|GU_DEPTH_BUFFER_BIT);
sceGumMatrixMode(GU_PROJECTION);
sceGumLoadIdentity();
sceGumPerspective(75.0f,16.0f/9.0f,0.5f,1000.0f);
sceGumMatrixMode(GU_VIEW);
sceGumLoadIdentity();
sceGumMatrixMode(GU_MODEL);
sceGumLoadIdentity();
ScePspFVector3 pos = { 0, 0, -5.0f };
ScePspFVector3 rot = { val * 0.79f * (M_PI/180.0f), val * 0.98f * (M_PI/180.0f), val * 1.32f * (M_PI/180.0f) };
sceGumTranslate(&pos);
sceGumRotateXYZ(&rot);
//sceGumDrawArray(GU_TRIANGLES, GU_COLOR_8888|GU_VERTEX_32BITF|GU_TRANSFORM_3D, 12*3, 0, vertices);
sceGuFinish();
sceGuSync(0,0);
val++;
}
int netDialog()
{
int done = 0;
pspUtilityNetconfData data;
memset(&data, 0, sizeof(data));
data.base.size = sizeof(data);
data.base.language = PSP_SYSTEMPARAM_LANGUAGE_ENGLISH;
data.base.buttonSwap = PSP_UTILITY_ACCEPT_CROSS;
data.base.graphicsThread = 17;
data.base.accessThread = 19;
data.base.fontThread = 18;
data.base.soundThread = 16;
data.action = PSP_NETCONF_ACTION_CONNECTAP;
struct pspUtilityNetconfAdhoc adhocparam;
memset(&adhocparam, 0, sizeof(adhocparam));
data.adhocparam = &adhocparam;
sceUtilityNetconfInitStart(&data);
while(running)
{
drawStuff();
switch(sceUtilityNetconfGetStatus())
{
case PSP_UTILITY_DIALOG_NONE:
break;
case PSP_UTILITY_DIALOG_VISIBLE:
sceUtilityNetconfUpdate(1);
break;
case PSP_UTILITY_DIALOG_QUIT:
sceUtilityNetconfShutdownStart();
break;
case PSP_UTILITY_DIALOG_FINISHED:
done = 1;
break;
default:
break;
}
sceDisplayWaitVblankStart();
sceGuSwapBuffers();
if(done)
break;
}
return 1;
}
void netInit(void)
{
sceNetInit(128*1024, 42, 4*1024, 42, 4*1024);
sceNetInetInit();
sceNetApctlInit(0x8000, 48);
}
void netTerm(void)
{
sceNetApctlTerm();
sceNetInetTerm();
sceNetTerm();
}
int user_thread(SceSize args, void *argp)
{
netInit();
SetupCallbacks();
setupGu();
netDialog();
netTerm();
return 0;
}
int main(int argc, char *argv[])
{
#if _PSP_FW_VERSION >= 200
sceUtilityLoadNetModule(PSP_NET_MODULE_COMMON);
sceUtilityLoadNetModule(PSP_NET_MODULE_INET);
netInit();
SetupCallbacks();
setupGu();
netDialog();
netTerm();
#else
pspSdkLoadInetModules();
SceUID thid = sceKernelCreateThread("user_thread", user_thread, 0x18, 0x10000, PSP_THREAD_ATTR_USER, NULL);
sceKernelStartThread(thid, 0, NULL);
sceKernelWaitThreadEnd(thid, 0);
#endif
sceKernelExitGame();
return 0;
}
Here a screenshot of the problem:Code:TARGET = net
OBJS = netdialog.o
PSP_FW_VERSION = 371
INCDIR =
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
PSPSDK=$(shell psp-config --pspsdk-path)
PSPBIN = $(PSPSDK)/../bin
LIBDIR =
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = net
LIBDIR =
LDFLAGS =
STDLIBS= -lc -lSDL_image -lSDL_gfx -lSDL_ttf -lpng -ljpeg -lSDL -lcurl -lfreetype
LIBS=$(STDLIBS)-lpspwlan -lpsputility -lpspgum -lpspgu -lm -lpspnet -lpspkernel -lpspnet_inet -lpspnet_apctl
include $(PSPSDK)/lib/build.mak
http://nsa01.casimages.com/img/2008/...6582716622.png
Thank you ^^
I answered this in another forum where you just posted the exact same question...
I'll answer it again though in case it turns up in a search for someone.
You're pre-compiled toolchain pre-dates the changes I made that are required for the sample to compile.
Weights = Thickness?
http://media.twango.com/m1/original/...2fbd03756c.png
How can i make it so that the cliffs have collision detection too? I know how to do it for the sides of the map but i was wondering how it can be done for various parts of the maps? I just want to know, now its in my head and i keep thinking about it lol. By the way i am using oslib and have just started to learn to code for the psp =\. would someone be kind enough to answer my question?