Skip to content

Commit

Permalink
No commit message
Browse files Browse the repository at this point in the history
  • Loading branch information
soywiz committed Aug 21, 2011
1 parent a159957 commit 4842cc3
Show file tree
Hide file tree
Showing 95 changed files with 1,233 additions and 1,078 deletions.
5 changes: 4 additions & 1 deletion src/gdb/GdbServerConnectionBase.d
Expand Up @@ -21,6 +21,7 @@ class GdbServerConnectionBase {
GdbProcessorRegisters registers;

bool debugData;
bool debugMaster = false;

this() {
init();
Expand Down Expand Up @@ -97,7 +98,9 @@ class GdbServerConnectionBase {
char type = packet[0];

if (type != 'm') {
writefln("recvData: %s", packet);
if (debugMaster) {
writefln("recvData: %s", packet);
}
debugData = true;
} else {
debugData = false;
Expand Down
4 changes: 1 addition & 3 deletions src/pspemu/core/display/Display.d
Expand Up @@ -18,8 +18,6 @@ import pspemu.utils.Event;

import pspemu.core.Interrupts;

import pspemu.extra.Cheats;

import pspemu.utils.sync.WaitEvent;
import pspemu.utils.sync.WaitMultipleObjects;

Expand Down Expand Up @@ -226,4 +224,4 @@ class Display : IDisplay {
public string toString() {
return info.toString();
}
}
}
17 changes: 11 additions & 6 deletions src/pspemu/hle/HleFunctionAttribute.d
Expand Up @@ -27,12 +27,12 @@ struct HleFunctionAttribute {
}

static string registerNids_RegisterFunction(alias Module, uint nid, uint requiredFirmwareVersion, string moduleMember)() {
return Module.registerd!(nid, __traits(getMember, Module, moduleMember), requiredFirmwareVersion);
return Module.registerFunction!(nid, __traits(getMember, Module, moduleMember), requiredFirmwareVersion);
}

static string registerNids_FindAnnotation(alias Module)() {
string r;
HleFunctionAttribute currentHleFunction;
/*
foreach (k, member; __traits(allMembers, Module)) {
static if (member.length >= 13 && member[0..13] == "__HLEFunction") {
r ~= HleFunctionAttribute.registerNids_RegisterFunction!(
Expand All @@ -45,15 +45,20 @@ struct HleFunctionAttribute {
);
}
}
*/
return r;
}

static string registerNids() {
return q{
HleFunctionAttribute.registerNids_FindAnnotation!(typeof(this));
};
static string registerNids(alias Module)() {
return "";
}

/*
static string registerNids(alias Module)() {
return HleFunctionAttribute.registerNids_FindAnnotation!Module;
}
*/

string toString() {
return std.string.format("HleFunction(nid=0x%08X, methodName='%s', requiredFirmwareVersion=%d)", nid, methodName, requiredFirmwareVersion);
}
Expand Down
91 changes: 91 additions & 0 deletions src/pspemu/hle/HleInterop.d
@@ -0,0 +1,91 @@
module pspemu.hle.HleInterop;

import pspemu.hle.HleThread;

/**
* Psp Callback.
*/
class PspCallback {
/**
* Name of the callback.
*/
string name;

/**
* Pointer to the callback function to execute.
*/
SceKernelCallbackFunction func;

/**
* Argument to send to callback function.
*/
uint arg;

/**
* Number of times the callback has been executed;
*/
uint notifyCount;

/**
* Constructor.
*/
this(string name, SceKernelCallbackFunction func, uint arg) {
this.name = name;
this.func = func;
this.arg = arg;
}

void execute(HleEmulatorState hleEmulatorState, ThreadState threadState, uint[] arguments) {
//writefln("Calling 0x%08X with arguments %s", pspCallback.func, arguments);
hleEmulatorState.executeGuestCode(threadState, this.func, arguments);
this.notifyCount++;
}

public string toString() {
return std.string.format("PspCallback('%s', %08X, %08X, %d)", name, func, arg, notifyCount);
}
}

class HleInterop {
/**
* Executes a piece of PSP code on the current thread. Pausing the current execution.
*/
public uint executeCallbackNow(uint codeAddress, uint[] args) {
HleThread thread = HleThread.current;
Registers registers = thread.registers;

uint retval;

registers.restoreBlock({
foreach (k, arg; args) registers.R[4 + k] = arg;
registers.pcSet = codeAddress;
thread.run();
retval = registers.R[2];
});

return retval;
}

@property int numberOfScheduledCallbacks() {
return 0;
}

/**
* Adds a callback to be executed on a Thread waiting for CB.
*
* @TODO: Args only supports integer values (not float or longs)
*
* @param codeAddress - Pointer to the function to execute.
* @param args - Args to pass to the function
*/
public void scheduleCallback(uint codeAddress, uint[] args) {

}

/**
* Executes all scheduled callbacks.
*/
public void executeScheduledCallbacks() {

}
}
45 changes: 35 additions & 10 deletions src/pspemu/hle/HleModuleHost.d
@@ -1,8 +1,18 @@
module pspemu.hle.HleModuleHost;

import std.string;
import std.conv;
import pspemu.hle.HleModule;
import pspemu.utils.TraitsUtils;

static struct HleFunction {
import pspemu.hle.HleModuleMethodBridgeGenerator;

public import pspemu.hle.HleFunctionAttribute;

public import pspemu.hle.kd.Types;
public import pspemu.hle.kd.SceKernelErrors;

static class HleFunction {
HleModuleHost pspModule;
uint nid;
string name;
Expand All @@ -15,21 +25,29 @@ abstract class HleModuleHost : HleModule {
string name;
alias uint Nid;

protected alias HleFunctionAttribute HLE_FA;

HleFunction[Nid ] hleFunctionsByNid;
HleFunction[string] hleFunctionsByName;

__gshared ClassInfo[] registeredModules;

protected void __addHleFunction(HleFunction hleFunction) {
hleFunctionsByNid[hleFunction.nid] = hleFunction;
hleFunctionsByName[hleFunction.name] = hleFunction;
}

static string registerFunction(uint id, alias func, uint requiredFirmwareVersion)() {
return (""
~ "hleFunctionsByName[\"" ~ FunctionName!(func) ~ "\"] = "
~ "hleFunctionsByNid[" ~ to!string(id) ~ "] = "
~ "HleFunction("
//~ "writefln(1);"
/*
~ "__addHleFunction(HleFunction("
~ "this, "
~ to!string(id) ~ ", "
~ "\"" ~ FunctionName!(func) ~ "\", "
~ HleModuleMethodBridgeGenerator.getDelegate!(func, id)
~ ");"
~ "));"
*/
);
}

Expand All @@ -39,17 +57,24 @@ abstract class HleModuleHost : HleModule {
static string registerModule(string moduleName) {
return "HleModuleHost.registeredModules ~= " ~ moduleName ~ ".classinfo;";
}

public SceModule* getSceModulePointer() {
return null;
}

/*
static string registerModule(TypeInfo_Class moduleClass) {
//writefln("%s", moduleClass);
assert(0);
return "";
}

/// deprecated
static alias registerFunction register;
/// deprecated
static alias registerFunction registerd;
*/

template TRegisterModule() {
static this() {
registerModule(typeof(this).stringof);
}
}
}

/+
Expand Down
2 changes: 1 addition & 1 deletion src/pspemu/hle/HleModuleLoader.d
Expand Up @@ -252,7 +252,7 @@ class HleModuleLoader {
logInfo(" %s // %s:", moduleName, DPspLibdoc.singleton.getPrxInfo(moduleName));
foreach (nid; nids) {
if (auto symbol = DPspLibdoc.singleton.locate(nid, moduleName)) {
logInfo(" mixin(registerd!(0x%08X, %s));", nid, symbol.name);
logInfo(" mixin(registerFunction!(0x%08X, %s));", nid, symbol.name);
} else {
logInfo(" 0x%08X:<Not found!>", nid);
}
Expand Down
1 change: 1 addition & 0 deletions src/pspemu/hle/HleModuleMethodBridgeGenerator.d
Expand Up @@ -28,6 +28,7 @@ class HleModuleMethodBridgeGenerator {

static public string getCallWithDebug(alias nativeFunction, uint nid = 0)() {
string r = "";
string functionName = FunctionName!nativeFunction;
{
r ~= "currentExecutingNid = " ~ to!string(nid) ~ ";";
r ~= "Logger.log(Logger.Level.TRACE, \"Module\", std.string.format(\"%s\", \"" ~ functionName ~ "\"));";
Expand Down
2 changes: 1 addition & 1 deletion src/pspemu/hle/HleModuleMethodParamParsing.d
Expand Up @@ -47,7 +47,7 @@ struct HleModuleMethodParamParsing {
// An integral value.
return *cast(T *)getParameterPointer(n);
}

/**
* Obtains the size of a parameter.
*/
Expand Down
1 change: 1 addition & 0 deletions src/pspemu/hle/HleThread.d
Expand Up @@ -17,6 +17,7 @@ class HleThread : HleThreadBase {
public Registers registers;
protected ICpu cpu;
protected Fiber fiber;
protected bool delegate() isSleeping;

this(ICpu cpu) {
this(cpu, new Registers);
Expand Down
15 changes: 5 additions & 10 deletions src/pspemu/hle/elf/Elf.d
Expand Up @@ -128,21 +128,16 @@ class Elf {
Stream SectionStream(ElfSectionHeader sectionHeader) {
logTrace("SectionStream(Address=%08X, Offset=%08X, Size=%08X, Type=%08X)", sectionHeader.address, sectionHeader.offset, sectionHeader.size, sectionHeader.type);

return new SliceStream(stream, sectionHeader.offset, sectionHeader.offset + sectionHeader.size);

/*
switch (sectionHeader.type) {
case ElfSectionHeader.Type.PROGBITS:
case ElfSectionHeader.Type.STRTAB:
//writefln("sectionHeader.offset:%08X", sectionHeader.offset);
case ElfSectionHeader.Type.PROGBITS, ElfSectionHeader.Type.STRTAB:
{
return new SliceStream(stream, sectionHeader.offset, sectionHeader.offset + sectionHeader.size);
break;
}
default:
//return new SliceStream(stream, sectionHeader.offset, sectionHeader.offset + sectionHeader.size);
{
return new SliceStream(stream, sectionHeader.address, sectionHeader.address + sectionHeader.size);
break;
}
}
*/
}

Stream SectionStream(string name) {
Expand Down
52 changes: 25 additions & 27 deletions src/pspemu/hle/kd/audio/sceAudio.d
Expand Up @@ -14,7 +14,9 @@ import pspemu.hle.kd.audio.Types;

import pspemu.utils.Logger;

class sceAudio_driver : ModuleNative {
class sceAudio_driver : HleModuleHost {
mixin TRegisterModule;

struct Channel {
int index;
bool reserved = false;
Expand All @@ -33,28 +35,28 @@ class sceAudio_driver : ModuleNative {
Audio audio;

void initNids() {
mixin(registerd!(0x13F592BC, sceAudioOutputPannedBlocking));
mixin(registerd!(0x5EC81C55, sceAudioChReserve));
mixin(registerd!(0x6FC46853, sceAudioChRelease));
mixin(registerd!(0x8C1009B2, sceAudioOutput));
mixin(registerd!(0x136CAF51, sceAudioOutputBlocking));
mixin(registerd!(0xE2D56B2D, sceAudioOutputPanned));
mixin(registerd!(0xE9D97901, sceAudioGetChannelRestLen));
mixin(registerd!(0xCB2E439E, sceAudioSetChannelDataLen));
mixin(registerd!(0x95FD0C2D, sceAudioChangeChannelConfig));
mixin(registerd!(0xB7E1D8E7, sceAudioChangeChannelVolume));

mixin(registerd!(0x01562BA3, sceAudioOutput2Reserve));
mixin(registerd!(0x2D53F36E, sceAudioOutput2OutputBlocking));
mixin(registerd!(0x43196845, sceAudioOutput2Release));
mixin(registerd!(0xB011922F, sceAudioGetChannelRestLength));

mixin(registerd!(0x086E5895, sceAudioInputBlocking));
mixin(registerd!(0x7DE61688, sceAudioInputInit));
mixin(registerFunction!(0x13F592BC, sceAudioOutputPannedBlocking));
mixin(registerFunction!(0x5EC81C55, sceAudioChReserve));
mixin(registerFunction!(0x6FC46853, sceAudioChRelease));
mixin(registerFunction!(0x8C1009B2, sceAudioOutput));
mixin(registerFunction!(0x136CAF51, sceAudioOutputBlocking));
mixin(registerFunction!(0xE2D56B2D, sceAudioOutputPanned));
mixin(registerFunction!(0xE9D97901, sceAudioGetChannelRestLen));
mixin(registerFunction!(0xCB2E439E, sceAudioSetChannelDataLen));
mixin(registerFunction!(0x95FD0C2D, sceAudioChangeChannelConfig));
mixin(registerFunction!(0xB7E1D8E7, sceAudioChangeChannelVolume));

mixin(registerFunction!(0x01562BA3, sceAudioOutput2Reserve));
mixin(registerFunction!(0x2D53F36E, sceAudioOutput2OutputBlocking));
mixin(registerFunction!(0x43196845, sceAudioOutput2Release));
mixin(registerFunction!(0xB011922F, sceAudioGetChannelRestLength));

mixin(registerFunction!(0x086E5895, sceAudioInputBlocking));
mixin(registerFunction!(0x7DE61688, sceAudioInputInit));

mixin(registerd!(0x38553111, sceAudioSRCChReserve));
mixin(registerd!(0x5C37C0AE, sceAudioSRCChRelease));
mixin(registerd!(0xE0727056, sceAudioSRCOutputBlocking));
mixin(registerFunction!(0x38553111, sceAudioSRCChReserve));
mixin(registerFunction!(0x5C37C0AE, sceAudioSRCChRelease));
mixin(registerFunction!(0xE0727056, sceAudioSRCOutputBlocking));
}

void initModule() {
Expand Down Expand Up @@ -431,9 +433,5 @@ class sceAudio_driver : ModuleNative {
}

class sceAudio : sceAudio_driver {
}

static this() {
mixin(ModuleNative.registerModule("sceAudio"));
mixin(ModuleNative.registerModule("sceAudio_driver"));
mixin TRegisterModule;
}

0 comments on commit 4842cc3

Please sign in to comment.