Impl Taud L/K xy00; IT Mxx Nxx Pxx

This commit is contained in:
minjaesong
2026-05-08 14:27:31 +09:00
parent e49140902b
commit d706f27e18
9 changed files with 296 additions and 45 deletions

View File

@@ -37,7 +37,7 @@ from taud_common import (
PATTERN_ROWS, PATTERN_BYTES, NUM_PATTERNS_MAX, NUM_CUES, CUE_SIZE, NUM_VOICES,
NOTE_NOP, NOTE_KEYOFF, NOTE_CUT, TAUD_C4,
TOP_NONE, TOP_A, TOP_B, TOP_C, TOP_D, TOP_E, TOP_F, TOP_G, TOP_H, TOP_I,
TOP_J, TOP_K, TOP_L, TOP_O, TOP_Q, TOP_R, TOP_S, TOP_T, TOP_U, TOP_V, TOP_W, TOP_Y,
TOP_J, TOP_K, TOP_L, TOP_M, TOP_N, TOP_O, TOP_P, TOP_Q, TOP_R, TOP_S, TOP_T, TOP_U, TOP_V, TOP_W, TOP_Y,
SEL_SET, SEL_UP, SEL_DOWN, SEL_FINE,
EFF_A, EFF_B, EFF_C, EFF_D, EFF_E, EFF_F, EFF_G, EFF_H, EFF_I, EFF_J,
EFF_K, EFF_L, EFF_M, EFF_N, EFF_O, EFF_P, EFF_Q, EFF_R, EFF_S, EFF_T,
@@ -305,25 +305,28 @@ def encode_effect(cmd: int, arg: int, ch: int = 0, row: int = 0,
None, None)
if cmd == EFF_K:
# K = vibrato continuation + vol slide; engine treats K as no-op.
# Split into: H $0000 (recall vibrato from HU memory) + vol-col slide.
return (TOP_H, 0x0000, d_arg_to_col(arg), None)
# K = vibrato continuation + vol slide; emitted verbatim. ST3's shared
# memory cohort is already resolved upstream by resolve_st3_recalls.
return (TOP_K, (arg & 0xFF) << 8, None, None)
if cmd == EFF_L:
# L = tone-porta continuation + vol slide; split similarly.
return (TOP_G, 0x0000, d_arg_to_col(arg), None)
# L = tone-porta continuation + vol slide; emitted verbatim.
return (TOP_L, (arg & 0xFF) << 8, None, None)
if cmd == EFF_M:
return (TOP_NONE, 0, (SEL_SET, min(arg, 0x3F)), None)
# M = set channel volume; literal byte (no recall). Clamp ST3/IT $40 → $3F.
return (TOP_M, (min(arg, 0x3F) & 0xFF) << 8, None, None)
if cmd == EFF_N:
return (TOP_NONE, 0, d_arg_to_col(arg), None)
# N = channel volume slide; D-style encoding.
return (TOP_N, (arg & 0xFF) << 8, None, None)
if cmd == EFF_O:
return (TOP_O, (arg & 0xFF) << 8, None, None)
if cmd == EFF_P:
return (TOP_NONE, 0, None, d_arg_to_col(arg))
# P = channel panning slide; D-style encoding (low nib = right, high nib = left).
return (TOP_P, (arg & 0xFF) << 8, None, None)
if cmd == EFF_Q:
return (TOP_Q, (arg & 0xFF) << 8, None, None)