147 lines
3.1 KiB
JavaScript
147 lines
3.1 KiB
JavaScript
// Metro module 512 (f513).
|
|
export const read = function(a0, a1, a2, a3, a4) {
|
|
let r50, r51;
|
|
const r10 = 8 * a4 - a3;
|
|
const r1 = a2 ? a4 - 1 : 0;
|
|
let r22 = 1;
|
|
const r3 = a2 ? -1 : 1;
|
|
const r9 = r10 - 1;
|
|
const r24 = a0[a1 + r1];
|
|
let r0 = r1 + r3;
|
|
const r6 = r24 & 127;
|
|
const r27 = r24 >> 7;
|
|
let r29 = -7 + r9;
|
|
let r30 = r6;
|
|
let r2 = r0;
|
|
let r31 = r30;
|
|
let r8 = r29;
|
|
while (0 < r8) {
|
|
r30 = 256 * r30 + a0[a1 + r0];
|
|
r0 = r0 + r3;
|
|
r29 = r29 - 8;
|
|
r2 = r0;
|
|
r31 = r30;
|
|
r8 = r29;
|
|
}
|
|
const r34 = -r8;
|
|
let r37 = r31 & (1 << r34) - 1;
|
|
let r17 = r8 + a3;
|
|
let r38 = r37;
|
|
if (r17 > 0) {
|
|
do {
|
|
r37 = 256 * r37 + a0[a1 + r2];
|
|
r2 = r2 + r3;
|
|
r17 = r17 - 8;
|
|
r38 = r37;
|
|
} while (0 < r17);
|
|
}
|
|
const r42 = (1 << r9) - 1;
|
|
const r43 = r42 >> 1;
|
|
const r44 = r31 >> r34;
|
|
if (r44 === 0) {
|
|
r51 = 1 - r43;
|
|
r50 = r38;
|
|
} else {
|
|
if (r44 === r42) {
|
|
return r38 ? NaN : Infinity * (r27 ? -1 : 1);
|
|
}
|
|
r50 = r38 + Math.pow(2, a3);
|
|
r51 = r44 - r43;
|
|
}
|
|
if (r27) {
|
|
r22 = -1;
|
|
}
|
|
return r22 * r50 * Math.pow(2, r51 - a3);
|
|
};
|
|
export const write = function(a0, a1, a2, a3, a4, a5) {
|
|
let r8, r37, r70, r71;
|
|
const r1 = 8 * a5 - a4;
|
|
const r19 = a4 === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;
|
|
const r32 = a3 ? 0 : a5 - 1;
|
|
const r34 = a3 ? 1 : -1;
|
|
L10: {
|
|
if (!(a1 < 0)) {
|
|
r8 = 0;
|
|
if (a1 !== 0) {
|
|
break L10;
|
|
}
|
|
r8 = 1 / a1 < 0 ? 1 : 0;
|
|
} else {
|
|
r8 = 1;
|
|
}
|
|
}
|
|
L26: {
|
|
r37 = r1 - 1;
|
|
const r39 = (1 << r37) - 1;
|
|
const r43 = Math.abs(a1);
|
|
if (!isNaN(r43) && r43 !== Infinity) {
|
|
const r52 = Math.floor(Math.log(r43) / Math.LN2);
|
|
const r56 = Math.pow(2, -r52);
|
|
const r21 = r43 * r56;
|
|
let r57 = r56;
|
|
let r58 = r52;
|
|
if (r21 < 1) {
|
|
r58 = r52 - 1;
|
|
r57 = r56 * 2;
|
|
}
|
|
const r6 = r39 >> 1;
|
|
const r65 = r43 + (r58 + r6 >= 1 ? r19 / r57 : r19 * Math.pow(2, 1 - r6));
|
|
const r66 = r65 * r57;
|
|
let r67 = r57;
|
|
let r68 = r58;
|
|
if (r66 >= 2) {
|
|
r68 = r58 + 1;
|
|
r67 = r57 / 2;
|
|
}
|
|
const r69 = r68 + r6;
|
|
r70 = 0;
|
|
r71 = r39;
|
|
if (r69 >= r71) {
|
|
break L26;
|
|
}
|
|
if (r68 + r6 >= 1) {
|
|
r70 = (r65 * r67 - 1) * Math.pow(2, a4);
|
|
r71 = r68 + r6;
|
|
break L26;
|
|
}
|
|
r70 = r65 * Math.pow(2, r6 - 1) * Math.pow(2, a4);
|
|
r71 = 0;
|
|
} else {
|
|
r70 = isNaN(r43) ? 1 : 0;
|
|
r71 = r39;
|
|
}
|
|
}
|
|
let r91 = r70;
|
|
let r92 = r32;
|
|
let r93 = a4;
|
|
let r94 = r92;
|
|
let r95 = r91;
|
|
let r96 = a4;
|
|
if (a4 >= 8) {
|
|
do {
|
|
a0[a2 + r92] = 255 & r91;
|
|
r92 = r92 + r34;
|
|
r91 = r91 / 256;
|
|
r93 = r93 - 8;
|
|
r94 = r92;
|
|
r95 = r91;
|
|
r96 = r93;
|
|
} while (8 <= r96);
|
|
}
|
|
let r100 = r71 << r96 | r95;
|
|
let r101 = r37 + r96;
|
|
let r102 = r94;
|
|
let r103 = r102;
|
|
if (r101 > 0) {
|
|
do {
|
|
a0[a2 + r102] = 255 & r100;
|
|
r102 = r102 + r34;
|
|
r100 = r100 / 256;
|
|
r101 = r101 - 8;
|
|
r103 = r102;
|
|
} while (0 < r101);
|
|
}
|
|
const r107 = a2 + r103 - r34;
|
|
a0[r107] = a0[r107] | 128 * r8;
|
|
};
|