+ switch (a) {
+ // division unit:
+ case 0x104: // DVDNT: divident L, starts divide
+ elprintf(EL_32X, "%csh2 divide %08x / %08x", id ? 's' : 'm', d, r[0x100 / 4]);
+ if (r[0x100 / 4]) {
+ r[0x118 / 4] = r[0x110 / 4] = d % r[0x100 / 4];
+ r[0x11c / 4] = r[0x114 / 4] = d / r[0x100 / 4];
+ }
+ break;
+ case 0x114:
+ elprintf(EL_32X, "%csh2 divide %08x%08x / %08x @%08x",
+ id ? 's' : 'm', r[0x110 / 4], d, r[0x100 / 4], sh2_pc(id));
+ if (r[0x100 / 4]) {
+ long long divident = (long long)r[0x110 / 4] << 32 | d;
+ // XXX: undocumented mirroring to 0x118,0x11c?
+ r[0x118 / 4] = r[0x110 / 4] = divident % r[0x100 / 4];
+ r[0x11c / 4] = r[0x114 / 4] = divident / r[0x100 / 4];
+ }
+ break;
+ }
+