PSP emulator written in D

bearophile bearophileHUGS at lycos.com
Tue Aug 9 14:15:31 PDT 2011


Lars T. Kyllingstad:

> http://code.google.com/p/pspemu/

Thank you for the link.

I think there is enough evidence that it is possible to use D (V.1) to write some video games. It's one of the very few niches where D has shown some more appreciation. So to blow on this tiny fire, do you know ways to improve the D2 language and D2 Phobos to help game development?

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

Some comments on the source code:

The author seems to believe that the right way to name D modules is with a starting uppercase, like "Event.d".


In the modules I see a large amount of array appends (~=), the author maybe thinks those are efficient operations, as in C++ vectors.


To simulate a CPU computed gotos help performance. Interpreters are common, computed gotos are useful to run finite state machines too (and in computational biology I have had to build such machines. I have used computed gotos of GNU-C to speed up code).


This again shows that some common basic exceptions are needed in Phobos:
http://code.google.com/p/pspemu/source/browse/trunk/src/pspemu/Exceptions.d

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

With the idea recently discussed this code:
http://code.google.com/p/pspemu/source/browse/trunk/src/pspemu/core/EmulatorState.d

this(Interrupts interrupts, Memory memory, IBattery battery,
     IDisplay display, Controller controller, Gpu gpu, Cpu cpu) {
    this.interrupts    = interrupts; 
    this.memory        = memory;
    this.battery       = battery;
    this.display       = display;
    this.controller    = controller;
    this.runningState  = runningState;
    this.gpu           = gpu;
    this.cpu           = cpu;

    resetVariables();
}


Becomes:

this(this.interrupts, this.memory, this.battery,
     this.display, this.controller, this.gpu, this.cpu) {
    this.runningState  = runningState;
    resetVariables();
}


This is not just shorter, it's more DRY and less bug-prone.

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

This page:
http://code.google.com/p/pspemu/source/browse/trunk/src/pspemu/core/Memory.d

Contains code like:

class InvalidAddressException : public MemoryException {


I think that "public" needs to become a syntax error.

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

This is bad code, I didn't even know D supports empty catch:


http://pspemu.googlecode.com/svn/trunk/src/pspemu/utils/Expression.d

static long parseString(string s, long default_value = 0) {
    if (s.length > 0) {
        try {
            ...
        } catch {
        }
    }
    return default_value;
}

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

That asm code for the float[4] vectors are cute, unfortunately they kill inlining with DMD, so they often produce slower code:
http://pspemu.googlecode.com/svn/trunk/src/pspemu/utils/MathUtils.d

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

This seems at home in Phobos too:
http://code.google.com/p/pspemu/source/browse/trunk/src/pspemu/utils/Types.d

Bye,
bearophile


More information about the Digitalmars-d mailing list