diff --git a/assets/bios/tsvmbios.js b/assets/bios/tsvmbios.js index 0ee4ea0..c2072e3 100644 --- a/assets/bios/tsvmbios.js +++ b/assets/bios/tsvmbios.js @@ -1,5 +1,5 @@ con.reset_graphics();con.curs_set(0);con.clear(); -graphics.resetPalette();graphics.setBackground(0,0,0); +graphics.resetPalette();graphics.setPalette(0, 0, 0, 0, 0);graphics.setBackground(0,0,0); let logo = gzip.decomp(base64.atob("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")); @@ -77,7 +77,7 @@ tmr = sys.nanoTime(); while (sys.nanoTime() - tmr < 2147483648) sys.spin(); // clear screen graphics.clearPixels(255);con.color_pair(239,255); -con.clear();con.move(1,1); +con.clear();con.move(1,1);graphics.resetPalette(); /////////////////////////////////////////////////////////////////////////////// diff --git a/assets/disk0/tvdos/bin/playtav.js b/assets/disk0/tvdos/bin/playtav.js index f5cb007..a689f62 100644 --- a/assets/disk0/tvdos/bin/playtav.js +++ b/assets/disk0/tvdos/bin/playtav.js @@ -158,9 +158,6 @@ audio.purgeQueue(AUDIO_DEVICE) audio.setPcmMode(AUDIO_DEVICE) audio.setMasterVolume(AUDIO_DEVICE, 255) -// set colour zero as half-opaque black -graphics.setPalette(0, 0, 0, 0, 7) - // Parse SSF-TC subtitle packet and add to event buffer (0x31) function parseSubtitlePacketTC(packetSize) { // Read subtitle index (24-bit, little-endian) @@ -2463,6 +2460,6 @@ finally { audio.purgeQueue(AUDIO_DEVICE) } -graphics.setPalette(0, 0, 0, 0, 0) +graphics.resetPalette() con.move(cy, cx) // restore cursor return errorlevel \ No newline at end of file diff --git a/assets/disk0/tvdos/bin/taut.js b/assets/disk0/tvdos/bin/taut.js index e35661d..63e10eb 100644 --- a/assets/disk0/tvdos/bin/taut.js +++ b/assets/disk0/tvdos/bin/taut.js @@ -566,7 +566,7 @@ const colHighlight = 41 const colColumnSep = 6 const colRowNum = 250 const colRowNumEmph1 = 225 -const colRowNumEmph2 = 217 +const colRowNumEmph2 = 155 const colStatus = 253 const colVoiceHdr = 230 const colSep = 252 @@ -697,7 +697,7 @@ function drawStatusBar() { con.color_pair(235, 255); print(`${sSpd}`) // app title - gl.drawTexImageOver(logoTexture, (SCRPW-logoTexture.width) >>> 1, 8) + gl.drawTexImageOver(logoTexture, (SCRPW-logoTexture.width) >>> 1, 7) } @@ -1186,7 +1186,7 @@ if (fullPathObj === undefined) { const logofile = files.open("A:/tvdos/bin/tauthdr.r8") const logoBytes = logofile.bread(); logofile.close() -const logoTexture = new gl.Texture(88, 12, logoBytes) +const logoTexture = new gl.Texture(90, 14, logoBytes) const buttonfile = files.open("A:/tvdos/bin/tautbtn.r8") const buttonBytes = buttonfile.bread(); buttonfile.close() const buttonTexture = new gl.Texture(2, 28, buttonBytes) diff --git a/assets/disk0/tvdos/bin/tauthdr.png b/assets/disk0/tvdos/bin/tauthdr.png index 8faddfa..6024a48 100644 Binary files a/assets/disk0/tvdos/bin/tauthdr.png and b/assets/disk0/tvdos/bin/tauthdr.png differ diff --git a/assets/disk0/tvdos/bin/tauthdr.r8 b/assets/disk0/tvdos/bin/tauthdr.r8 index a2e7a17..a8e1715 100644 Binary files a/assets/disk0/tvdos/bin/tauthdr.r8 and b/assets/disk0/tvdos/bin/tauthdr.r8 differ diff --git a/doc/implementation.tex b/doc/implementation.tex index b7c6a22..542cf94 100644 --- a/doc/implementation.tex +++ b/doc/implementation.tex @@ -662,7 +662,7 @@ TODO \endlastfoot \centering \begin{tabulary}{\textwidth}{rl} -{\ttfamily 0} & {\ttfamily \#0008} \\ +{\ttfamily 0} & {\ttfamily \#0007} \\ {\ttfamily 1} & {\ttfamily \#004F} \\ {\ttfamily 2} & {\ttfamily \#008F} \\ {\ttfamily 3} & {\ttfamily \#00BF} \\ diff --git a/tsvm_core/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt b/tsvm_core/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt index 906dbcd..44262f7 100644 --- a/tsvm_core/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt +++ b/tsvm_core/src/net/torvald/tsvm/peripheral/GraphicsAdapter.kt @@ -1439,7 +1439,7 @@ in vec2 v_texCoords; uniform sampler2D u_texture; uniform vec4 pal[256]; -float intensitySteps = 4.0; +float intensitySteps = 32.0; uniform vec4 lcdBaseCol; void main(void) { @@ -1961,7 +1961,7 @@ void main() { val DEFAULT_PALETTE = intArrayOf( // 0b rrrrrrrr gggggggg bbbbbbbb aaaaaaaa - 136, + 119, 17663, 35071, 48127, diff --git a/tsvm_core/src/net/torvald/tsvm/shader_crt_post.frag b/tsvm_core/src/net/torvald/tsvm/shader_crt_post.frag index 293eac2..ee9b0a8 100644 --- a/tsvm_core/src/net/torvald/tsvm/shader_crt_post.frag +++ b/tsvm_core/src/net/torvald/tsvm/shader_crt_post.frag @@ -20,9 +20,9 @@ uniform sampler2D u_texture; // Input texture uniform vec2 flip = vec2(0.0, 0.0); // UV flip control (0,1 = flip Y) uniform float noiseMagnitude = 0.0; -// Signal mode: 0 = S-Video, 1 = Composite, 2 = CGA Composite +// Signal mode: -1 = disable, 0 = S-Video, 1 = Composite, 2 = CGA Composite // Can be changed at runtime without recompilation -uniform int signalMode = 0; // Default should be 1 for composite +uniform int signalMode = 0; // CGA-specific settings uniform float cgaHue; // Hue adjustment for CGA (default: 0.0, range: -PI to PI) @@ -268,6 +268,11 @@ vec3 decodeCGAComposite(vec2 uv, vec2 texelSize, float pixelX, float pixelY) { return rgb; } +vec3 decodePassthru(vec2 uv, vec2 texelSize) { + vec3 srcRGB = sampleTexture(uv); + return srcRGB; +} + // === TRINITRON PHOSPHOR MASK === vec3 trinitronMask(vec2 screenPos) { float strength = getPhosphorStrength(); @@ -324,6 +329,8 @@ void main() { rgb = decodeCGAComposite(uv, texelSize, pixelX, pixelY); } else if (signalMode == 1) { rgb = decodeComposite(uv, texelSize, basePhase); + } else if (signalMode == -1) { + rgb = decodePassthru(uv, texelSize); } else { rgb = decodeSVideo(uv, texelSize, basePhase); }