mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-06 05:28:31 +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/*
|
||||
|
||||
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.
|
||||
|
||||
**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.
|
||||
|
||||
@@ -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
|
||||
|
||||
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 = {
|
||||
A:"Set tick speed",
|
||||
A:"Tick speed",
|
||||
B:"Jump to order",
|
||||
C:"Break pattern",
|
||||
D:"Volume slide",
|
||||
@@ -89,8 +89,8 @@ R:"Tremolo",
|
||||
T:"Tempo",
|
||||
V:"Global volume",
|
||||
S:"Special",
|
||||
S1:"Glissando ctrl",
|
||||
S2:"Sample finetune",
|
||||
S1:"Gliss. ctrl",
|
||||
S2:"Sample tune",
|
||||
S3:"Vibrato LFO",
|
||||
S4:"Tremolo LFO",
|
||||
S8:"Channel pan",
|
||||
@@ -629,18 +629,20 @@ function drawVoiceDetail() {
|
||||
const effop = ptnDat[5]
|
||||
const effarg = ptnDat[6] | (ptnDat[7] << 8)
|
||||
|
||||
// TODO draw cumulative internal status in the very time play cursor is on
|
||||
|
||||
con.move(6,1)
|
||||
print(`Pitch $${note.hex04()}\tInst $${inst.hex02()}\tVolEff ${voleffop}.$${voleffarg.hex02()}\t`+
|
||||
`PanEff ${paneffop}.$${paneffarg.hex02()}`)
|
||||
con.move(7,1)
|
||||
let fx = effop.toString(36).toUpperCase()
|
||||
if (fx == '0') {
|
||||
print(`Fx`+' '.repeat(32))
|
||||
print(`\u00F8`+' '.repeat(32))
|
||||
}
|
||||
else {
|
||||
if (fx == 'S') fx += (effarg >>> 12).hex1()
|
||||
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