Future Composer JS

User Manual — Atari 8-bit FC Music Editor & Player

1. Overview

Future Composer JS is a browser-based editor and player for Atari 8-bit Future Composer music files. It supports loading, playing, and editing .FC, .BIN, and .SAP files, and can export edited songs back to the uncompressed .FC format.

The player is an accurate JavaScript port of the original 6502 Future Composer player, using MAME-accurate POKEY chip emulation. No installation is required — open fc_app.html in any modern browser.

Supported FormatsDescription
.FCUncompressed Future Composer file (editor native format)
.BINCompiled FC binary (player + music data)
.SAPAtari SAP archive (TYPE B — extracts BIN block automatically)

2. Screen Layout

┌──────────────────────────────────────────────────────────────┐ │ FUTURE COMPOSER JS [PLAY] [STOP] [REW] Oct:2 Ins:00 │ │ Vol:[████░░] Dur:01 Focus: TRACK │ ├─────────────────────────────┬────────────────────────────────┤ │ ── TRACK ── │ ── PATTERN 0C ── │ │ Row CH1 CH2 CH3 │ 00: INS 00 │ │ 00: 83 88 88 │ 01: DUR 07 │ │ 01: 0C 0D 0D ◄─ cur │ 02: C-3 ◄─ cursor │ │ 02: 05 0D 03 │ 03: C-3 │ │ ... ... ... ... │ 04: D-3 │ │ │ ... │ ├─────────────────────────────┼────────────────────────────────┤ │ ── INSTRUMENT 00 ── │ ── ENVELOPE 00 ── │ │ Envelope: 00 │ 00: 0C │ │ Distort: C0 │ 01: 09 │ │ Arpeggio: 00 │ 02: 08 │ │ Effect: 00 │ 03: FF (END) │ ├─────────────────────────────┴────────────────────────────────┤ │ Drop .FC / .BIN / .SAP file here — or click to browse │ └──────────────────────────────────────────────────────────────┘

The screen is divided into four panels. The active panel is highlighted with a bright border. Press Tab to cycle between panels.

PanelDescription
Track Editor (top-left)Song sequence — which patterns play on each channel
Pattern Editor (top-right)Note, instrument, and duration data for one pattern
Instrument Editor (bottom-left)4 parameters per instrument (envelope, distortion, arp, effect)
Envelope Editor (bottom-right)Volume/timbre envelope bytes for one envelope

3. Loading Files

Drag and drop a .FC, .BIN, or .SAP file onto the drop zone at the bottom of the screen, or click it to open a file browser.

After loading, the editor populates all four panels with the song data and begins playback automatically.

TIP: Multiple songs can share one BIN file (subsong support). The subsong start position is stored in the first byte of the BIN.

4. Transport Controls

ButtonAction
PLAYStart playback from beginning
STOPStop playback
REWRewind to beginning (without stopping)
NEWCreate a blank new song
SAVEExport current song as .FC file
Volume sliderMaster output volume

5. Global Keyboard Shortcuts

KeyAction
TabCycle focus: Track → Pattern → Instrument → Envelope → Track
SpaceToggle play / stop
EscStop playback
F1Set octave 1
F2Set octave 2
F3Set octave 3
F4Set octave 4

The current octave, instrument number, and duration index are always shown in the status bar at the top.

6. Track Editor

The Track Editor shows the song sequence across 3 channels. Each row contains pattern numbers (hex) for channels 1, 2, and 3. Special markers control looping, ending, transposition, and AUDCTL.

Track Byte Values

ValueMeaning
00–3FPlay pattern number (hex)
80–8FSet transposition (raw 0–15; default 8 = no shift; 88 = default)
40 xxSet AUDCTL to xx (2-byte command)
FEEnd of song
FFLoop: reset to beginning

Track Editor Keys

KeyAction
/ Move cursor up / down
/ Move cursor left / right (between channels 1–3)
09, AFEnter hex pattern number (two keystrokes: first digit then second)
Shift+0FEnter transpose byte (808F)
LInsert loop marker (FF) at cursor
EInsert end marker (FE) at cursor
EnterJump to Pattern Editor for the pattern number under cursor
InsertInsert empty row at cursor position
DeleteDelete row at cursor position
+ / -Increment / decrement pattern number at cursor
TIP: Each channel has its own independent song pointer. You can have different channels at different positions in the track sequence — this is normal and how FC songs are structured.

7. Pattern Editor

The Pattern Editor shows the contents of one pattern (0–63). A pattern is a sequence of commands: instrument selects, duration sets, and notes, terminated by FF (end of pattern).

Pattern Byte Values

RangeMeaning
00–3FNote (index into frequency table; see note names below)
40–7FSet duration: byte & 0x1F = index into duration table
80–9FSelect instrument: byte & 0x1F = instrument number (0–31)
FFEnd of pattern

Pattern Editor Keys

KeyAction
/ Move cursor up / down
Piano keys (see below)Enter note at current octave using current instrument & duration
Ctrl+09Set duration index 0–9
Shift+0VSelect instrument 0–31 (hex: 0–9, then A–V)
+ / -Next / previous pattern number
InsertInsert empty byte at cursor
DeleteDelete byte at cursor
BackspaceSet FF (end of pattern) at cursor
09, AFDirect hex value entry for current byte

7.1 Note Entry — Piano Keyboard Layout

Notes are entered using the PC keyboard as a piano. Two rows cover two octaves at a time (controlled by the current octave setting F1F4).

  Lower row (current octave):          Upper row (octave+1):

  Black keys:  S  D     G  H  J        2  3     5  6  7
  White keys: Z  X  C  V  B  N  M     Q  W  E  R  T  Y  U

  Z=C  S=C#  X=D  D=D#  C=E  V=F  G=F#  B=G  H=G#  N=A  J=A#  M=B
  Q=C  2=C#  W=D  3=D#  E=E  R=F  5=F#  T=G  6=G#  Y=A  7=A#  U=B
  (one octave higher)

The current octave is shown in the status bar. Each note press inserts the note byte and advances the cursor. The current instrument and duration are automatically prepended if they differ from the previous values in the pattern.

TIP: Press F1F4 at any time to change octave without leaving the pattern editor.

Note Name Reference

Note IndexNameNote IndexName
00–07N00–N07 (sub-audible range)20E-3
08C-121F-3
09C#122F#3
0AD-123G-3
0BD#124G#3
0CE-125A-3
0DF-126A#3
0EF#127B-3
0FG-128C-4
10G#129C#4
11A-12AD-4
12A#12BD#4
13B-12CE-4
14C-22DF-4
15C#22EF#4
16D-22FG-4
17D#230G#4
18E-231A-4
19F-232A#4
1AF#233B-4
1BG-234–3FC-5 and above
1CG#2
1DA-2
1EA#2
1FB-2

8. Instrument Editor

The Instrument Editor shows 4 parameters for the currently selected instrument (0–31).

FieldRangeDescription
Envelope00–1FIndex of the volume/timbre envelope to use
Distort00–FFPOKEY distortion value — ORed with each envelope byte for AUDCx. Common values: A0=pure tone, C0=white noise, E0=gritty buzz
Arpeggio00–FFArpeggio depth in semitones. 0=none. Alternates between base note and base+depth each frame.
Effect00–FFPitch effect. 00=none. 01–7F=table vibrato (±1 semitone wave). 80–FF=continuous slide up (+2 AUDF per frame).

Instrument Editor Keys

KeyAction
/ Move between fields (Envelope → Distort → Arpeggio → Effect)
/ Decrement / increment current field value by 1
09, AFHex entry for current field (two keystrokes)
+ / -Next / previous instrument number
TIP: The Distort field controls the POKEY AUDCx register bits 4–7. Bits 0–3 come from the envelope. Most FC songs use distortion A0 (pure square wave) for melody channels and C0 (white noise) for percussion.

9. Envelope Editor

The Envelope Editor shows the byte sequence for the currently selected envelope (0–31). Each byte controls the POKEY AUDCx register for one frame.

Envelope Byte Values

RangeMeaning
00–7FVolume/timbre byte — ORed with instrument Distort → AUDCx. Lower nibble = volume (0=silent, F=loudest). Higher nibble contributes to distortion.
80–FEDirect AUDC write — written as-is to AUDCx, and AUDFx is forced to 0 (mutes pitch). Used for percussive clicks.
FFEnd of envelope — hold last AUDC value indefinitely (sustain)

Envelope Editor Keys

KeyAction
/ Move cursor up / down
/ Decrement / increment byte value at cursor
09, AFHex entry for byte at cursor (two keystrokes)
+ / -Next / previous envelope number
InsertInsert 00 byte at cursor
DeleteDelete byte at cursor
BackspaceSet FF (end of envelope) at cursor
TIP: A typical attack-decay envelope looks like: 0F 0E 0D 0C 0B 0A 09 08 07 FF — the volume decays from 0F to 07 then holds. The FF at the end causes the last value (08) to be held indefinitely.

10. Export & Save

Click the SAVE button (or press Ctrl+S) to export the current song as an uncompressed .FC file. The file will be downloaded to your browser's download folder.

The exported .FC file can be loaded back into the editor, played in any FC-compatible player, or compiled with the original Future Composer tool on the Atari.

WARNING: The editor does not save automatically. Export your work before closing the browser or loading a different file.

FC File Structure (Exported)

OffsetSizeContent
$00002Identifier: 26 23
$00021Tempo (frames per beat unit)
$0003256Track 1 data
$0103256Track 2 data
$0203256Track 3 data
$030312832 instruments × 4 bytes
$0383...64 patterns (FF-terminated each)
......32 envelopes (FF-terminated each)

11. FC Format Reference

Duration Table

The duration table has 32 entries. Entry 0 holds the tempo value. Entry n = (n+1) × tempo frames. A tempo of 6 gives durations: 6, 12, 18, 24, ... frames per note.

In patterns, duration bytes are 40–7F: the index is byte & 0x1F (0–31).

Transposition

Transposition is stored as a raw unsigned value 0–15. The default is 8 (written as track byte 88). The note frequency is looked up at index note + transpose. Because the frequency table has 8 unused entries at the start, transpose=8 means "no transposition" into the musical range.

Transpose values: 80=transpose 0 (shift down 8), 88=transpose 8 (default/no shift), 8F=transpose 15 (shift up 7).

Instrument Effect (byte 3)

ValueEffect
00None
01–7FTable vibrato: ±1 semitone wave using fixed 8-frame pattern [0,0,+1,+1,0,0,−1,−1]. Phase is NOT reset on new notes.
80–FFContinuous slide: AUDF increments by 2 each frame (pitch slides upward). Stops at $FF.

12. POKEY Channel Mapping

Future Composer uses 3 logical channels mapped to 4 POKEY hardware channels:

FC ChannelPOKEY ChannelsClockFrequency Formula
Ch 0 (bass)CHAN1 + CHAN2 joined (16-bit)1.79 MHz1,773,447 / (2 × (AUDF1×256 + AUDF0 + 7))
Ch 1 (melody)CHAN364 kHz63,337 / (AUDF2 + 1)
Ch 2 (melody)CHAN464 kHz63,337 / (AUDF3 + 1)

Default AUDCTL = $50 (CH1_HICLK + CH12_JOINED). Channel 0 (bass) always uses the 16-bit joined mode for extended low-frequency range. The bass AUDC output is on AUDC1 (CHAN2), not AUDC0.

TIP: The bass channel (Ch 0) can produce very low frequencies down to ~10 Hz because it uses 16-bit mode with the 1.79 MHz clock. Melody channels (Ch 1/2) use the 64 kHz clock for the standard musical range.

13. Tips & Tricks

Starting a New Song

  1. Click NEW to create a blank song with default settings.
  2. Go to the Envelope editor (Tab × 3) and create an attack-decay envelope for instrument 0. Try: 0F 0E 0C 0A 08 06 04 02 FF.
  3. Go to the Pattern editor (Tab). Press F2 to set octave 2.
  4. Type notes with the piano keys (Z=C, X=D, C=E, V=F, B=G, N=A, M=B).
  5. Press Space to hear playback.

Copying Patterns

To reuse a pattern on multiple channels: in the Track Editor, simply enter the same pattern number on different channels at the desired rows.

Percussion

For a percussion hit on a melody channel (Ch 1 or Ch 2): create an instrument with Distort C0 (white noise). In the envelope, use direct bytes (80–FE) for the initial click, then volume bytes for decay. Example: AF 8F 0C 09 06 03 01 FF.

Bass Lines

Channel 0 is always the bass channel (16-bit POKEY mode). Use it for low, sustained notes. Notes N00–N07 (indices below 8) are in the sub-audible range and are shown as N00N07 in the pattern display.

Speed Control

The tempo is set in the duration table. Shorter duration values = faster notes. Duration index 0 = 1×tempo frames, index 1 = 2×tempo frames, etc. A typical FC song uses tempo 6, giving durations of 6, 12, 18 frames per note.

Vibrato vs. Slide


Keyboard Quick Reference Card

GLOBAL
  Tab         Cycle panel focus (Track → Pattern → Inst → Env)
  Space       Play / Stop
  Esc         Stop
  F1–F4       Set octave 1–4

TRACK EDITOR
  ↑↓←→        Navigate rows / channels
  0–F         Enter pattern number (2 hex digits)
  Shift+0–F   Enter transpose byte (80–8F)
  L           Insert loop (FF)
  E           Insert end (FE)
  Enter       Jump to pattern under cursor
  Ins/Del     Insert / delete row
  +/-         Increment / decrement pattern number

PATTERN EDITOR
  ↑↓          Navigate rows
  Z S X D C V G B H N J M   Notes (lower octave)
  Q 2 W 3 E R 5 T 6 Y 7 U   Notes (upper octave)
  Ctrl+0–9    Set duration index
  Shift+0–V   Select instrument (0–31)
  +/-         Next / previous pattern
  Ins/Del     Insert / delete byte
  Backspace   Set FF (end)
  0–F         Direct hex entry

INSTRUMENT EDITOR
  ↑↓          Select field
  ←→          Decrement / increment value
  0–F         Hex entry (2 digits)
  +/-         Next / previous instrument

ENVELOPE EDITOR
  ↑↓          Navigate rows
  ←→          Decrement / increment byte
  0–F         Hex entry (2 digits)
  +/-         Next / previous envelope
  Ins/Del     Insert / delete byte
  Backspace   Set FF (end)