mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-10 06:54:04 +09:00
better tracker font, IT eff for Taud
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -68,3 +68,5 @@ assets/disk0/*.mov
|
|||||||
assets/diskMediabin/*
|
assets/diskMediabin/*
|
||||||
|
|
||||||
video_encoder/*
|
video_encoder/*
|
||||||
|
|
||||||
|
assets/disk0/tvdos/bin/tautfont.png
|
||||||
|
|||||||
@@ -487,7 +487,7 @@ A tempo slide's memory slot is separate from the set-tempo path and is private t
|
|||||||
|
|
||||||
**Plain.** Sets the global mix bus volume (0..$FF). $00 is silence; $FF is full. The default is $80.
|
**Plain.** Sets the global mix bus volume (0..$FF). $00 is silence; $FF is full. The default is $80.
|
||||||
|
|
||||||
**Compatibility.** ST3's global volume is 0..$40; convert with `taud_v = st3_v × 4`, clamped at $FF. On export, `st3_v = taud_v >> 2`, clamped at $40.
|
**Compatibility.** ST3's global volume is 0..$40; convert with `taud_v = st3_v × 4`, clamped at $FF. On export, `st3_v = taud_v >> 2`, clamped at $40. IT's global volume is 0..$80; convert with `taud_v = it_v × 2`, clamped at $FF.
|
||||||
|
|
||||||
**Implementation.** Write the high byte to `global_volume` on the row the command appears. The low byte is reserved. ST3's `kST3NoMutedChannels` rule applies: V on a muted channel is ignored by ST3; for strict-compatible playback Taud follows suit, but new Taud compositions should avoid muting channels that carry global effects.
|
**Implementation.** Write the high byte to `global_volume` on the row the command appears. The low byte is reserved. ST3's `kST3NoMutedChannels` rule applies: V on a muted channel is ignored by ST3; for strict-compatible playback Taud follows suit, but new Taud compositions should avoid muting channels that carry global effects.
|
||||||
|
|
||||||
@@ -517,6 +517,16 @@ Peak at maximum settings: $7F × $FF >> 9 = $3F — the full panning range. Retr
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## X $xx00 — Set Panning
|
||||||
|
|
||||||
|
**Plain.** **Unimplemented**. On IT, sets the panning position of the current channel, $00 being full-left and $FF being full-right.
|
||||||
|
|
||||||
|
**Compatibility.** Convert directly into panning effect `0.$xx`, rounded down to nearest 6-bit value.
|
||||||
|
|
||||||
|
**Implementation.** Not applicable.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
# The S subcommand family
|
# The S subcommand family
|
||||||
|
|
||||||
S is a multiplexing opcode; the **high nibble of the high byte** selects the sub-effect, and the remainder is the sub-argument.
|
S is a multiplexing opcode; the **high nibble of the high byte** selects the sub-effect, and the remainder is the sub-argument.
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ middot:MIDDOT
|
|||||||
}
|
}
|
||||||
|
|
||||||
const fxNames = {
|
const fxNames = {
|
||||||
A:"Set tick speed",
|
A:"Tick speed",
|
||||||
B:"Jump to order",
|
B:"Jump to order",
|
||||||
C:"Break pattern",
|
C:"Break pattern",
|
||||||
D:"Volume slide",
|
D:"Volume slide",
|
||||||
@@ -89,8 +89,8 @@ R:"Tremolo",
|
|||||||
T:"Tempo",
|
T:"Tempo",
|
||||||
V:"Global volume",
|
V:"Global volume",
|
||||||
S:"Special",
|
S:"Special",
|
||||||
S1:"Glissando ctrl",
|
S1:"Gliss. ctrl",
|
||||||
S2:"Sample finetune",
|
S2:"Sample tune",
|
||||||
S3:"Vibrato LFO",
|
S3:"Vibrato LFO",
|
||||||
S4:"Tremolo LFO",
|
S4:"Tremolo LFO",
|
||||||
S8:"Channel pan",
|
S8:"Channel pan",
|
||||||
@@ -629,18 +629,20 @@ function drawVoiceDetail() {
|
|||||||
const effop = ptnDat[5]
|
const effop = ptnDat[5]
|
||||||
const effarg = ptnDat[6] | (ptnDat[7] << 8)
|
const effarg = ptnDat[6] | (ptnDat[7] << 8)
|
||||||
|
|
||||||
|
// TODO draw cumulative internal status in the very time play cursor is on
|
||||||
|
|
||||||
con.move(6,1)
|
con.move(6,1)
|
||||||
print(`Pitch $${note.hex04()}\tInst $${inst.hex02()}\tVolEff ${voleffop}.$${voleffarg.hex02()}\t`+
|
print(`Pitch $${note.hex04()}\tInst $${inst.hex02()}\tVolEff ${voleffop}.$${voleffarg.hex02()}\t`+
|
||||||
`PanEff ${paneffop}.$${paneffarg.hex02()}`)
|
`PanEff ${paneffop}.$${paneffarg.hex02()}`)
|
||||||
con.move(7,1)
|
con.move(7,1)
|
||||||
let fx = effop.toString(36).toUpperCase()
|
let fx = effop.toString(36).toUpperCase()
|
||||||
if (fx == '0') {
|
if (fx == '0') {
|
||||||
print(`Fx`+' '.repeat(32))
|
print(`\u00F8`+' '.repeat(32))
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (fx == 'S') fx += (effarg >>> 12).hex1()
|
if (fx == 'S') fx += (effarg >>> 12).hex1()
|
||||||
let fxName = fxNames[fx]
|
let fxName = fxNames[fx]
|
||||||
print(`Fx ${fxName} $${effarg.hex04()} `)
|
print(`\u00F8 ${fxName}\t$${effarg.hex04()} `)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.2 KiB |
Reference in New Issue
Block a user