Skip to content

Commit

Permalink
various refactorings/code cleans and fixed audio trancetro
Browse files Browse the repository at this point in the history
  • Loading branch information
kootstra-rene committed Feb 5, 2024
1 parent f450b19 commit 940021e
Show file tree
Hide file tree
Showing 9 changed files with 134 additions and 180 deletions.
43 changes: 5 additions & 38 deletions code/enge-webgl.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ mdlr('enge:webgl', m => {
flushes: 0,

dump: () => {
// if ($stats.flushes) console.log(`flushes: ${$stats.flushes}`); else console.log('.');
$stats.flushes = 0;
}
}
Expand Down Expand Up @@ -434,7 +433,7 @@ mdlr('enge:webgl', m => {
gl.linkProgram(this.programDraw);

if (!gl.getProgramParameter(this.programDraw, gl.LINK_STATUS)) {
console.log("Unable to initialize the shader program.");
abort();
}

gl.useProgram(this.programDraw);
Expand All @@ -448,7 +447,7 @@ mdlr('enge:webgl', m => {
gl.linkProgram(this.programDisplay);

if (!gl.getProgramParameter(this.programDisplay, gl.LINK_STATUS)) {
console.log("Unable to initialize the shader program.");
abort();
}

gl.useProgram(this.programDisplay);
Expand All @@ -463,7 +462,7 @@ mdlr('enge:webgl', m => {
gl.linkProgram(this.program24bit);

if (!gl.getProgramParameter(this.program24bit, gl.LINK_STATUS)) {
console.log("Unable to initialize the shader program.");
abort();
}

gl.useProgram(this.program24bit);
Expand All @@ -478,15 +477,15 @@ mdlr('enge:webgl', m => {
gl.linkProgram(this.programTexture);

if (!gl.getProgramParameter(this.programTexture, gl.LINK_STATUS)) {
console.log("Unable to initialize the shader program.");
abort();
}

gl.useProgram(this.programTexture);
this.programTexture.vram = gl.getUniformLocation(this.programTexture, "uVRAM");
gl.uniform1i(this.programTexture.vram, 0);
}
catch (e) {
console.log("Failed to init shaders:\n\n" + e.stack);
abort();
}
}
initTextures() {
Expand Down Expand Up @@ -603,31 +602,11 @@ mdlr('enge:webgl', m => {
this.storeImageInTexture({ x: img.x, y: 0, w: img.w, h: h2, buffer: new Uint16Array(img.buffer.buffer, h1 * img.w), pixelCount: h2 * img.w });
return;
}
/*
var buffer = new Uint32Array(img.pixelCount);
const buf8 = new Uint8Array(buffer.buffer, 0, img.pixelCount << 2);
for (let i = 0; i < img.pixelCount; ++i) {
const data = img.buffer[i] >>> 0;
const val32 = ((data & 0x8000) >> 15) ? 0xff000000 : 0x00000000;
const r = ((data & 0x001f) >> 0) << 3;
const g = ((data & 0x03e0) >> 5) << 11;
const b = ((data & 0x7c00) >> 10) << 19;
buffer[i] = val32 | r | g | b;
}
gl.bindTexture(gl.TEXTURE_2D, this.tex16draw);
gl.texSubImage2D(gl.TEXTURE_2D, 0, img.x, img.y, img.w, img.h, gl.RGBA, gl.UNSIGNED_BYTE, buf8);
gl.bindTexture(gl.TEXTURE_2D, this.vramP2);
gl.texSubImage2D(gl.TEXTURE_2D, 0, img.x, img.y, img.w, img.h, gl.RGBA, gl.UNSIGNED_BYTE, buf8);
*/
// console.log(img.x, img.y, img.w, img.h)
// copy image to GPU
const view = new Uint8Array(img.buffer.buffer, 0, img.pixelCount << 1);
gl.bindTexture(gl.TEXTURE_2D, this.tex8vram);
gl.texSubImage2D(gl.TEXTURE_2D, 0, img.x << 1, img.y, img.w << 1, img.h, gl.ALPHA, gl.UNSIGNED_BYTE, view);

// return;
// needed for 16bit video
var x1 = img.x; var x2 = img.x + img.w;
var y1 = img.y; var y2 = img.y + img.h;
Expand Down Expand Up @@ -931,8 +910,6 @@ mdlr('enge:webgl', m => {
return;
}

if (gpu.txflip || gpu.tyflip) console.warn('texture flip with triangles');

var u1 = (data[uv1] >>> 0) & 255;
var v1 = (data[uv1] >>> 8) & 255;
var u2 = (data[uv2] >>> 0) & 255;
Expand Down Expand Up @@ -1116,16 +1093,6 @@ mdlr('enge:webgl', m => {
h = (h & 0x1ff);
if (!w || !h) return;

if ((x + w) > 1024) {
// unsupport
console.log('fillRectangle does not support x-wrap', x, w);
return;
}
if ((y + h) > 512) {
// unsupport
console.log('fillRectangle does not support y-wrap', h, y);
return;
}
this.flushVertexBuffer(true);
this.clearVRAM(x, y, w, h, c, false);

Expand Down
2 changes: 0 additions & 2 deletions code/enge-webgl2.js
Original file line number Diff line number Diff line change
Expand Up @@ -440,7 +440,6 @@ mdlr('enge:webgl2', m => {
}

onVBlankBegin() {
// console.log('onVBlankBegin')
}

onVBlankEnd() {
Expand All @@ -449,7 +448,6 @@ mdlr('enge:webgl2', m => {
flushVertexBuffer();
flushDepth();
copyVramToShadowVram(this, false, true);
// console.log('onVBlankEnd')

++this.fpsRenderCounter;
this.seenRender = false;
Expand Down
117 changes: 60 additions & 57 deletions code/psx/cdr.js
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ mdlr('enge:psx:cdr', m => {
const readCycles = PSX_SPEED / ((mode & 0x80) ? 150 : 75);
const loc = currLoc - 150;

var currentCommand = ncmdctrl;
let currentCommand = ncmdctrl;
ncmdctrl = 0;
switch (currentCommand) {
case 0x00: break;
Expand Down Expand Up @@ -531,12 +531,12 @@ mdlr('enge:psx:cdr', m => {
}
// todo: implement next two
// switch ((nfo >>> 4) & 3) {
// case 0: var bs = '4bit'; break;
// case 1: var bs = '8bit'; break;
// case 0: bs = '4bit'; break;
// case 1: bs = '8bit'; break;
// }
// switch ((nfo >>> 6) & 1) {
// case 0: var em = 'normal'; break;
// case 1: var em = 'emphasis'; break;
// case 0: em = 'normal'; break;
// case 1: em = 'emphasis'; break;
// }
pcmidx = 0;
xa.fill(0);
Expand All @@ -563,76 +563,79 @@ mdlr('enge:psx:cdr', m => {
};

const decodeMono = () => {
var ix = 0;
for (var sg = 0; sg < 18; ++sg) {
var decodeOffset = sectorOffset + 24 + (sg * 128);

for (var su = 0; su < 8; ++su) {
var shiftFilter = sectorData8[decodeOffset + 4 + su];
var shift = (shiftFilter & 0x0f) >>> 0;
var filter = (shiftFilter & 0xf0) >>> 3;
var k0 = xa2flt[filter + 0]
var k1 = xa2flt[filter + 1]

for (var sd = 0; sd < 28; ++sd) {
let ix = 0;
for (let sg = 0; sg < 18; ++sg) {
const decodeOffset = sectorOffset + 24 + (sg * 128);

for (let su = 0; su < 8; ++su) {
const shiftFilter = sectorData8[decodeOffset + 4 + su];
const shift = (shiftFilter & 0x0f) >>> 0;
const filter = (shiftFilter & 0xf0) >>> 3;
const k0 = xa2flt[filter + 0];
const k1 = xa2flt[filter + 1];

for (let sd = 0; sd < 28; ++sd) {
const offset = (decodeOffset + 16 + (sd * 4) + (su / 2)) >>> 0;
var data = sectorData8[offset] & 0xff;
const data = sectorData8[offset] & 0xff;
const index = (shift * 256 + data) * 2;

var index = (shift * 256 + data) * 2;

var s = (sl[1] * k0) + (sl[0] * k1) + xa2pcm[index + (su & 1)];
let s = (sl[1] * k0) + (sl[0] * k1) + xa2pcm[index + (su & 1)];
sl[0] = sl[1];
sl[1] = s;

xa[ix++] = s;
xa[ix++] = s;
xa[ix + sd * 2 + 0] = s;
xa[ix + sd * 2 + 1] = s;
}
ix += 2 * 28;
}
}
return ix;
}

const decodeStereo = () => {
var ix = 0;
let ix = 0;

for (var sg = 0; sg < 18; ++sg) {
var decodeOffset = sectorOffset + 24 + (sg * 128);
for (let sg = 0; sg < 18; ++sg) {
const decodeOffset = sectorOffset + 24 + (sg * 128);

for (var su = 0; su < 8; su += 2) {
var shiftFilter = sectorData8[decodeOffset + 4 + su];
var shift = (shiftFilter & 0x0f) >>> 0;
var filter = (shiftFilter & 0xf0) >>> 3;
var k0 = xa2flt[filter + 0]
var k1 = xa2flt[filter + 1]
for (let su = 0; su < 8; su += 2) {
{
const shiftFilter = sectorData8[decodeOffset + 4 + su];
const shift = (shiftFilter & 0x0f) >>> 0;
const filter = (shiftFilter & 0xf0) >>> 3;
const k0 = xa2flt[filter + 0];
const k1 = xa2flt[filter + 1];

for (var sd = 0; sd < 28; ++sd) {
const offset = (decodeOffset + 16 + (sd * 4) + (su / 2)) >>> 0;
var data = sectorData8[offset] & 0xff;
var index = (shift * 256 + data) * 2;
for (let sd = 0; sd < 28; ++sd) {
const offset = (decodeOffset + 16 + (sd * 4) + (su / 2)) >>> 0;
const data = sectorData8[offset] & 0xff;
const index = (shift * 256 + data) * 2;

var s = (sl[1] * k0) + (sl[0] * k1) + xa2pcm[index + 0];
sl[0] = sl[1];
sl[1] = s;
let s = (sl[1] * k0) + (sl[0] * k1) + xa2pcm[index + 0];
sl[0] = sl[1];
sl[1] = s;

xa[ix + sd * 2 + 0] = s;
xa[ix + sd * 2 + 0] = s;
}
}

var shiftFilter = sectorData8[decodeOffset + 5 + su];
var shift = (shiftFilter & 0x0f) >>> 0;
var filter = (shiftFilter & 0xf0) >>> 3;
var k0 = xa2flt[filter + 0]
var k1 = xa2flt[filter + 1]

for (var sd = 0; sd < 28; ++sd) {
const offset = (decodeOffset + 16 + (sd * 4) + (su / 2)) >>> 0;
var data = sectorData8[offset] & 0xff;
var index = (shift * 256 + data) * 2;

var s = (sr[1] * k0) + (sr[0] * k1) + xa2pcm[index + 1];
sr[0] = sr[1];
sr[1] = s;

xa[ix + sd * 2 + 1] = s;
{
const shiftFilter = sectorData8[decodeOffset + 5 + su];
const shift = (shiftFilter & 0x0f) >>> 0;
const filter = (shiftFilter & 0xf0) >>> 3;
const k0 = xa2flt[filter + 0];
const k1 = xa2flt[filter + 1];

for (let sd = 0; sd < 28; ++sd) {
const offset = (decodeOffset + 16 + (sd * 4) + (su / 2)) >>> 0;
const data = sectorData8[offset] & 0xff;
const index = (shift * 256 + data) * 2;

let s = (sr[1] * k0) + (sr[0] * k1) + xa2pcm[index + 1];
sr[0] = sr[1];
sr[1] = s;

xa[ix + sd * 2 + 1] = s;
}
}
ix += 2 * 28;
}
Expand Down
4 changes: 1 addition & 3 deletions code/psx/cpu.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,8 @@ mdlr('enge:psx:cpu', m => {
case 13: return cpu.cause >> 0;
case 14: return cpu.epc >> 0;
case 15: return 2 >> 0;
default: console.warn('getCtrl:' + reg);
return cop[reg];
}
return cop[reg];
},

setCtrl: (reg, value) => {
Expand All @@ -44,7 +43,6 @@ mdlr('enge:psx:cpu', m => {
case 13: cpu.cause = cpu.cause & 0xfffffcff;
cpu.cause |= (value & 0x00000300);
break;
default: cons1ole.warn('setCtrl:' + reg);
}
},

Expand Down
2 changes: 0 additions & 2 deletions code/psx/gamepad.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,12 +100,10 @@ mdlr('enge:psx:gamepad', m => {

window.addEventListener("gamepadconnected", (e) => {
joypad = e.gamepad;
// console.log(`~~ Gamepad '${joypad.id}' connected ~~`);
document.getElementById('gamepad').classList.add('connected')
});

window.addEventListener("gamepaddisconnected", (e) => {
// console.log(`~~ Gamepad '${joypad.id}' disconnected ~~`);
document.getElementById('gamepad').classList.remove('connected')
joypad = null;
});
Expand Down
53 changes: 26 additions & 27 deletions code/psx/gte.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,31 @@ mdlr('enge:psx:gte', m => {
const $vec = [v0, v1, v2, ir];
const $add = [tr, bk, fc, zr];

const $cycles = new Map([
[0x01, 15],
[0x06, 8],
[0x0c, 6],
[0x10, 8],
[0x11, 8],
[0x12, 8],
[0x13, 19],
[0x14, 13],
[0x16, 44],
[0x1b, 17],
[0x1c, 11],
[0x1e, 14],
[0x20, 30],
// [0x28, 5],
[0x29, 8],
[0x2a, 17],
// [0x2d, 5],
[0x2e, 6],
[0x30, 23],
// [0x3d, 5],
// [0x3e, 5],
[0x3f, 39],
]);

const lim = (value, lowerBound, lowerBit, upperBound, upperBit) => {
if (value < lowerBound) { regs[0x3f] |= flag[lowerBit]; return lowerBound; }
if (value > upperBound) { regs[0x3f] |= flag[upperBit]; return upperBound; }
Expand Down Expand Up @@ -571,33 +596,7 @@ mdlr('enge:psx:gte', m => {
}
},

cycles: (commandId) => {
switch (commandId & 0x3f) {
case 0x01: return 15;
case 0x06: return 8;
case 0x0C: return 6;
case 0x10: return 8;
case 0x11: return 8;
case 0x12: return 8;
case 0x13: return 19;
case 0x14: return 13;
case 0x16: return 44;
case 0x1b: return 17;
case 0x1c: return 11;
case 0x1e: return 14;
case 0x20: return 30;
case 0x28: return 5;
case 0x29: return 8;
case 0x2a: return 17;
case 0x2d: return 5;
case 0x2e: return 6;
case 0x30: return 23;
case 0x3d: return 5;
case 0x3e: return 5;
case 0x3f: return 39;
default: abort(hex(commandId, 5));
}
}
cycles: (commandId) => $cycles.get(commandId & 0x3f) || 5
};

// flag bits
Expand Down
Loading

0 comments on commit 940021e

Please sign in to comment.