The program

Konami's Synthesizer is not a game: it is a synthesizer. The cartridge carries an 8-bit digital-to-analogue converter that sounds with every byte the Z80 writes to 0x4000, and the program is a subtractive synthesizer (oscillator, filter, amplifier, three envelopes and an LFO) that computes the note sample by sample in the computer's RAM and then plays it through that converter. Everything that sounds, the Z80 does.

The title

At power-on the Konami logo is uncovered line by line, the 新世SIZER is painted in seven passes, one byte in every eight on each, and the title waits for SPACE. If it does not come, the intro shows one of the program's four screens for 512 frames (0xBE5E) and starts again.

The screens

Five function keys, and four more with SHIFT (0x4877):

keyscreen
F1TONE EDIT: the 29 fields of the tone
F2WAVE EDIT: draw a wave by hand
F3SYN: synthesize the tone
F4PLAY: play
F5FILE: the tape
SHIFT F1copy a tone, with its wave, onto another
SHIFT F2the list of the sixteen tones
SHIFT F3the printer
SHIFT F4LAYOUT: which note each key gives

TONE EDIT with tone 1

TONE EDIT (0xA5AA) edits the tone's 25 parameters and its name. The oscillator (DCO) picks one of the fourteen waves in the ROM, the user's one or noise, and its pitch in feet; the filter (DCF) has cutoff, resonance from 0 to 8 and three outputs, high-pass, band-pass and low-pass; the amplifier (DCA) has its envelope, and each of the three envelopes is ADSR. The LFO can move the oscillator, the filter and the amplifier, with its own wave and, with S/H, with sampled noise. The cursor keys move from field to field, INS and DEL go up and down, and the digits type the value.

WAVE EDIT

WAVE EDIT (0xADF7) draws wave 15, the user's, by hand: 256 signed samples, one dot per sample. The sixteen user waves (one per tone) start out as wave 1, a sine (0x55CF). Left and right move the cursor step by step (MODE, which SELECT changes), up and down change the sample, and the stretch between the cursor and its previous step is filled in a straight line (0xB236). A key of the music keyboard plays it; CTRL and HOME zero it.

SYN

SYN (0x55F0) is the synthesizer: it computes the whole note, sample by sample, in the 16 KB from 0x8000 to 0xBFFF, with the screen stopped and interrupts disabled. How long it lasts is computed from the envelopes (0x5613), and while it works a cursor moves across the screen and, every 16 ticks, two tiles of the drawing change (0x4BD9). When it finishes it jumps to PLAY; F1, F2, F4 and F5 cut it short (0x5767).

PLAY

PLAY (0x5D3A) plays with the MSX keyboard as if it were a piano: the four rows of letters and digits are 48 keys, white and black, with each key's note written above it according to the LAYOUT; the factory one gives a note to 40 (0x4B71). One key sounds at a time: the program reads the sample and sends it to the DAC byte by byte, and the pitch is set by how long it waits between bytes (Findings). With the tone's EG TYP on DEC, the note is sustained while the key is held by repeating one page of the sample, and on release it goes on to the end; on DUR it plays through in one go.

FILE MODE

FILE (0xB5DB) saves to and loads from tape three kinds of file: TONE (the sixteen tones with their sixteen waves, 4,608 bytes), LAYOUT (176 bytes) and SAMP (the synthesized sample, up to 16 KB, with its loop page). The format is in The code. The tape that came with the cartridge carries seven SAMPs on its two sides: PIANO, BRASS and ORCHE of 16,384 bytes, TRUMPET of 12,288, SAMISEN of 7,792, DOG of 3,072 and CRASH of 16,384.

The sixteen factory tones

They are in the ROM, at 0xA3AA, 32 bytes each: 25 parameters and the name. This is how TONE EDIT shows them (the ADSRs as attack/decay/sustain/release, the filter with its output, - if the filter's envelope subtracts and i if the oscillator's is inverted):

nnamewaveFEETLFO DCOENV DCOCUTRESLFO DCFENV DCFLFO DCAADSR DCOADSR DCFADSR DCAS/HLFO waveLFO FEETfilterEG
1EBASS1216'0000012800/0/0/00/4/32/960/0/255/120164.00'LPFDEC
2EBASS21432'0000012800/0/0/00/4/32/960/0/255/120164.00'LPFDEC
3BRASS28'00200012800/0/0/01/6/64/40/0/255/150164.00'LPFDEC
4TRUMPET128'00200012800/0/0/01/6/64/40/0/255/150164.00'LPFDEC
5STRINGS24'00180007500/0/0/00/4/100/103/4/220/60164.00'LPFDEC
6EORGAN98'0025500000/0/0/00/0/0/00/0/255/10164.00'LPFDEC
7PORGAN68'0025500000/0/0/00/0/0/00/0/255/10164.00'LPFDEC
8EPIANO88'0025500000/0/0/00/0/0/00/0/255/200164.00'LPFDUR
9GLOCKEN716'001000010000/0/0/00/4/0/00/0/255/200164.00'LPFDUR
10KOTO118'2000012800/0/0/00/4/48/1280/4/224/3201512.00'LPFDUR
11CONGA116'012825500000/1/0/00/0/0/00/1/239/80164.00'LPFDUR
12SYNDRUM18'025525500000/1/192/200/0/0/00/1/192/200164.00'LPFDUR
13IMAGE18'255255255000032/0/255/320/0/0/02/0/255/64018.00'LPFDUR
14PARC142'96025500000/0/0/00/0/0/00/4/224/324S/H64.00'LPFDUR
15PARC214'255025500000/0/0/00/0/0/00/4/240/32018.00'LPFDUR
16(no name)18'0025500000/0/0/00/0/0/00/0/255/00164.00'LPFDEC

The sixteen TONE EDITs

And this is how they sound, synthesized with tools/motor.py and played with tools/sonido.py at A3 with the key held for a second. They are the bytes the cartridge sends to the DAC: tone 1 is checked against openMSX, 22,273 bytes and 0 different (In the emulator).

tonetone
1 EBASS1timbre-01.wav9 GLOCKENtimbre-09.wav
2 EBASS2timbre-02.wav10 KOTOtimbre-10.wav
3 BRASStimbre-03.wav11 CONGAtimbre-11.wav
4 TRUMPETtimbre-04.wav12 SYNDRUMtimbre-12.wav
5 STRINGStimbre-05.wav13 IMAGEtimbre-13.wav
6 EORGANtimbre-06.wav14 PARC1timbre-14.wav
7 PORGANtimbre-07.wav15 PARC2timbre-15.wav
8 EPIANOtimbre-08.wav16 (no name)timbre-16.wav

The fourteen waves

The oscillator reads one of the fourteen waves at 0x7200, 256 signed samples each, in page 0x72 + wave (0x56FF). Wave 1 is the sine the user waves start out as; 15 is the user's, and 16 is noise, which is not a table: it comes from reading the BIOS (Findings).

The fourteen oscillator waves