sorry, it uses GDC @attribute("forceinline") feature, so you need latest GDC to build it. it's not strictly necessary though (speed optimizations?

Have you performed a benchmark with and without that attribute?

In this kind of code computed gotos could help performance.

struct { ubyte c, b; };

Struct definitions in D don't end with the semicolon.

@property final void iff1 (int v) nothrow { riff1 = (v != 0); } /** set interrupt flip-flop 1 */

I suggest to omit the space between the function name and its arguments. And if you want you can also add an "in":

... iff1(in int v) nothrow ...

{ rregR = ((rregR&0x7f)+1)|(rregR&0x80); }

Better to add spaces around those operators. And perhaps it's better to use enum values instead of magic constants.

  final void exec () {
    ubyte opcode;
    bool gotDD, trueCC;
    int disp;
    ubyte tmpB, tmpC, rsrc, rdst;
ushort tmpW = 0; /* shut up the compiler; it's wrong but stubborn */
    /* main loop */
    while (rtstates < rnext_event_tstate) {
      if (rCallPager) pager();
      if (rCheckBPs && checkBP()) return;
      rprevpc = rorgpc;
      rorgpc = rpc;
      /* read opcode -- OCR(4) */
      opcode = fetchOpcode();
      rprev_was_EIDDR = 0;
      disp = gotDD = false;
      rdd = &rhl;
      if (rhalted) { --rpc; continue; }
      /* check for I[XY] prefix */
      if (opcode == 0xdd || opcode == 0xfd) {

I suggest to add an empty line before the line of comment.
And I suggest to use 4 spaces as indent unit.

static __gshared ubyte parity_tbl[256];

Better to use the D syntax:

static __gshared ubyte[256] parity_tbl;


Reply via email to