Go backward to Transmitted by the S950
Go up to Top

Detailed specification of S900/S950 messages

  • Sample Dump Format
  • Sample Dump
  • System Common Messages
  • Handshakes
  • Request Sample Dump
  • Akai Exclusive Messages
  • Request Settings
  • Machine Code
  • Request for Machine Code
  • Execute Function
  • Name Catalog
  • Drum Settings
  • Overall Settings
  • Program
  • Sample Parameters

  • Sample Dump Format

    Sample Dump

    Byte # Range Description
    0 F0h System exclusive code
    1 7Eh Common non-realtime identifier
    2 1 SD sample dump code
    3 0..31 Sample number LS
    4 0 Sample number HS. Always 0 since we can have only 32 samples.
    5 8..16 Bits per word. S950 transmits 12, but can accept 9 to 14.
    6..8 0..127 Sampling period in nsec. S950 accepts 15259 to 500000.
    9..11 0..127 Total words in sample. S950 accepts 200 to 475020.
    12..14 0..127 Loop start point. If >= total-5, assume non looping.
    15..17 0..127 Loop end. S950 takes this as end point.
    18 0..1 0=looping, 1=alternating (one shot if loop length < 5).

    Next follows a variable number of sample blocks. Each has the same format:

    Byte # Range Description
    0 0..127 Block number LSbyte (block number MSbyte is not sent).
    1 0..127 MS of data word: 0 d11 d10 d9 d8 d7 d6 d5
    2 0..127 LS of data word: 0 d4 d3 d2 d1 d0 0 0
    3..120 0..127 as 1, 2 above.
    121 0..127 Checksum, being the exclusive OR of the preceding 120 bytes.

    A final byte follows the last block:

    Byte # Range Description
    ?? F7h End of exclusive code




    System Common Messages

    Handshakes

    Byte # Range Description
    0 F0h System exclusive code
    1 7Eh Common non-realtime identifier
    2 ff Function code:
        ACKS=7Fh Acknowledge sample block or header
        ASD =7Dh Abort sample dump
        NAKS=7Eh Not acknowledge
        (request retransmission of block)
    3 F7h End of exclusive code



    Request Sample Dump

    Byte # Range Description
    0 F0h System exclusive code
    1 7Eh Common non-realtime identifier
    2 0 RSD Request sample dump code
    3 0..31 Sample number, according to order in S950 RAM (see General Notes)
    4 0 Undefined
    5 F7h End of exclusive code




    Akai Exclusive Messages

    Request Settings

    Byte # Range Description
    0 F0h System exclusive code
    1 47h Akai identifier
    2 0..15 MIDI channel number
    3 gg Function code:
        RDRS =0 Request for drum settings
        ROVS =1 Request for overall settings
        RPRGM=2 Request for program
        RCAT =3 Request for name catalog
        RSPRM=4 Request for sample parameters
        SECRE=5 Sysex common reception enable
        SECRD=6 Ditto disable
    4 64 S950 identifier
    5 0..31 Program/sample number, where applicable
    6 0 Reserved
    7 F7h End of exclusive code



    Machine Code

    Byte # Range Description
    0 F0h System exclusive code
    1 47h Akai identifier
    2 0..15 MIDI channel number
    3 14 CODE Function code for machine code or data
    4 64 S950 identifier
    5 X Undefined
    6 0 Reserved (must be 0)
    7..10 DW Absolute address in S950 memory where first machine code will be placed; this must be in segment 0. In ROMs 1.0 and 1.1, addresses from 7BBAh to 92BAh are available, but 7BBAh to 7F7Fh may be overlaid by other internal operations. In ROM 1.2 with SVN-2, addresses from 7BB4h to 9193h are available, but 7BB4h to 8383h may be overlaid.
    11..14 DW Number of data bytes to follow
    15..?? DB Variable length executable machine code or data. The S950 uses a NEC 71016 processor which is compatible with the Intel 8086.
    ?? 0..127 Checksum, exclusive OR of preceding bytes without 0 to 6. The S950 does not check the checksum on incoming code as it is stored as it arrives if bytes 1..6 are valid.
    16 F7h End of exclusive code



    Request for Machine Code

    Byte # Range Description
    0 F0h System exclusive code
    1 47h Akai identifier
    2 0..15 MIDI channel number
    3 14 RCODE Request for S950 machine code or data
    4 64 S950 identifier
    5 X Undefined
    6 0 Reserved (must be 0)
    7..10 DW Absolute address in S950 memory of first machine code data requested. A special address, 00FDh has the ROM's revision number in ASCII as it appears on the screen at power switch on, e.g., 1.0. Another address, 00FCh has a sub version number which is changed when absolute addresses are altered.
    11..14 DW Number of bytes of machine code requested
    15 0..127 Checksum, exclusive OR of bytes 7-14
    16 F7h End of exclusive code



    Execute Function

    Byte # Range Description
    0 F0h System exclusive code
    1 47h Akai identifier
    2 0..15 MIDI channel number
    3 13 EXEC Function code for execute
    4 64 S950 identifier
    5 X Undefined
    6 0 Reserved
    7..10 DW Absolute address of subroutine to which near call will be made on receipt of EOX following valid checksum
    11 0..127 Checksum
    12 F7h End of exclusive code



    Name Catalog

    Byte # Range Description
    0 F0h System exclusive code
    1 47h Akai identifier
    2 0..15 MIDI channel number
    3 11 CAT Function code for name catalog
    4 64 S950 identifier
    5 X Undefined
    6 0 Reserved

    Each catalog entry is a block of 12 bytes:

    Byte # Range Description
    n P or S Type, either program (P) or sample (S)
    n+1 0..31 Program/sample number, the order it appears in S950 memory.
    n+2..n+11 0..127 ASCII characters of name

    These bytes follow the last block:

    Byte # Range Description
    ?? 0..127 Checksum, exclusive OR of preceding bytes without 0 to 6
    ?? F7h End of exclusive code



    Drum Settings

    Byte # Range Description
    0 F0h System exclusive code
    1 47h Akai identifier
    2 0..15 MIDI channel number
    3 7 DRS Function code for drum settings
    4 64 S950 identifier
    5 X Undefined
    6 0 Reserved
    7,8 DB DRUMON 0/255 for drum inputs on/off
    8,9 DB DRUMSENS 0/1 for low/high sensitivity; affects all inputs
    10..49 0 Reserved

    Here follow eight blocks of 60 MIDI bytes, one for each drum input. Each block is as follows:

    Name Type Normal Description
    DINP DB 0 0..7 (constant) According to drum input number
    DRMDCH DB 0 0..15 MIDI channel that drum input simulates
    DPITCH DB 60 24..127 MIDI coded pitch
    DSENS99 DB 50 1..99 User's input sensitivity
    DTT40 DB 20 1..40 Trigger threshold
    DTTFS DB 68 Must be 8 + DTT40*3
      DW X Undefined
      DD 0 Reserved
    DATTIME DW 12 Attack capture time in units of .25 msec. Take biggest value during this period after threshold to make velocity.
    DONTIME DW 120 On time duration in units of .25 msec
    DRCTIME DW 80 Recovery time in units of .25 msec
    DSENSES DW 33 Must be DSENS99*171/256
      DW X Undefined
      DW X Undefined
    DENVHOLD DW 1040h Must be 1040h + DINP*512 (constant)
    DADCMUX DW 3040h Must be 3040h + DINP*256 (constant)

    Byte # Range Description
    531 0..127 Checksum, exclusive OR of preceding 480 bytes
    532 F7h End of exclusive code



    Overall Settings

    Byte # Range Description
    0 F0h System exclusive code
    1 47h Akai identifier
    2 0..15 MIDI channel number
    3 8 OVS Function code for overall settings
    4 64 S950 identifier
    5 X Undefined
    6 0 Reserved

    Next follows a block of 80 MIDI bytes giving the overall settings data:

    Name Type Normal Description
    PRONAME DB `DEFAULT PR' Name of current program. (This element consists of 10 data bytes which are sent as 20 MIDI bytes - see General Notes)
      DD x Undefined
      DW x Undefined
    MDXTCH DB 0 0..15 MIDI transmit channel for AKAI exclusive
      DB 0 Reserved
      DW x Undefined
    RSCHNL DW 1 0..16 Reception simulator channel
    RSKEY DW 60 24..127 Reception simulator MIDI key
    RSVEL DW 64 0..127 Reception simulator velocity
      DB x Undefined
    BASMCH DB 128 0..15 S950 basic MIDI reception channel; MSB is set if S950 is set of OMNI ON
    MLEN DB 0 0 to disable reception of loudness on continuous controller #7, any other value to enable
    M1RS2 DB 1 1..2 Select controller MIDI/RS232
    MPEN DB 60 0 to disable MIDI program change reception, any other value to enable
      DW 20727 Reserved
      DW 7238 Reserved
    PWRANGE DB 7 Pitch wheel range (semitones up or down)
    RSBAUD DW 960 Nominal RS232 baud rate in Hz*10 (e.g., 960 means 9600 baud)
    MDCLOK DB 0 MIDI clock control:
          0= 31250 Hz
          -8= 62500 Hz
          -20=125000 Hz
      DB 0 Reserved

    These final bytes follow:

    Byte # Range Description
    87 0..127 Checksum, exclusive OR of preceding 80 bytes
    88 F7h End of exclusive code



    Program

    Byte # Range Description
    0 F0h System exclusive code
    1 47h Akai identifier
    2 0..15 MIDI channel number
    3 9 PRGM Function code for program & keygroups
    4 64 S950 identifier
    5 0..31 Program number. When the S950 is sending a program this will be the same number as requested. When the S950 is receiving this will replace the program of the same number.
    6 0 Reserved

    Next follows a block of 76 MIDI bytes giving the program parameters:

    Name Type Normal Description
    PRNAME DB `??????????' Name of current program. (This element consists of 10 data bytes which are sent as 20 MIDI bytes - see General Notes)
      DD x Undefined
      DW x Undefined
    KTILT DW 0 -50..+50 Keyboard tilt (key versus loudness)
      DW x Undefined
      DB x Undefined
    POSXEN DB 0 0/1 Positional crossfade disable/enable
      DB 255 Reserved
    NOKG DB 1 1..31 Number of keygroups in this program
      DW x Undefined
    MDPGNM DB 0 0..127 Program number for MIDI program change command
    MPVLD DB 255 0 means MDPGNM invalid (old S900 format)
      DW 0 Reserved
      DD 0 Reserved
      DD 0 Reserved

    Here follow one or more blocks defining the keygroups. Each block uses 140 MIDI bytes and is defined as follows:

    Name Type Normal Description
    UMK DB 127 Upper MIDI key (limit of keyrange in this keygroup)
    LMK DB 24 Lower MIDI key (may be the same as UMK)
    VST DB 128 Velocity switch threshold
    ATK DB 0 0..99 Attack time (logarithmic coding)
    DCY DB 80 0..99 Decay time
    SSTN DB 99 0..99 Sustain level (.375 dB/step; 0=-96 dB)
    RLSE DB 30 0..99 Release time
    FVI DB 10 0..99 Filter/velocity interaction
    FKI DB 50 0..99 Filter key tracking (50 gives 1 octave/octave)
    AVI DB 0 0..99 Attack/velocity interaction
    RVI DB 0 -50..+50 Velocity/release interaction
    LVI DB 30 0..99 Loudness/velocity interaction (0=no dynamics)
    PVI DB 0 0..99 Pitch-warp/velocity interaction
    PAO DB 0 -50..+50 Pitch warp initial offset
    PST DB 99 0..99 Pitch warp recovery time
    VBDLY DB 64 0..99 LFO buildup time
    VBRATE DB 64 0..99 LFO rate
    VBDPTH DB 0 0..99 LFO depth
    KBITS DB 4 Odd control bits. Coding is as follows:
      TRD bit 0 0/1 Transpose enable/disable
      VCXF bit 1 0/1 Velocity crossfade disable/enable
      VBDSYN bit 2 0/1 Vibrato desync off/on
      OST bit 3 0/1 One shot trigger mode off/on
      ONRV bit 4 0/1 Velocity release from note off/note on
      ENVTHX bit 5 0/1 Enable/disable velocity release crossfade curve modification (see VTHX)
    OPVOICE DB 255 Output: 0..7=MONO, 8=LEFT, 9=RIGHT, 255=ANY
    KMDCHN DB 0 0..15 Keygroup MIDI channel offset; this will be added to BASMCH (see Overall Settings) to match incoming MIDI data
    AFDI DB 0 Aftertouch LFO depth modulation
    MWDI DB 50 Modulation wheel LFO depth modulation

    Note: LFO depth modulation is the sum of VBDPTH + (aftertouch*AFDI) + (modwheel*MWDI), with a maximum of +/- three semitones

    VCFAMNT DB 0 0..50 Amount of filter's ADSR applied to filter frequency
    NAMEFS DB `TONE ' Name of first sample
    VCFAK DB 20 0..99 Filter ADSR attack time
    VCFDY DB 20 0..99 Filter ADSR decay time
    VCFST DB 20 0..99 Filter ADSR sustain level
    VCFRL DB 20 0..99 Filter ADSR release time
    VTHX DB 64 0..127 Velocity value at which loud/soft mix is 50% in velocity crossfade type sample. This value will be ignored if bit ENVTHX in KBITS is 0
      DB x Undefined
      DW x Undefined
    TROFFS DW 0 Signed transpose offset, units of 1/16 semitone
    FLTFS DB 99 0..99 Filter
    LORDFS DB 0 -50..+50 Signed loudness, units of .375 dB
    NAMESS DB `TONE ' Name of second sample
      DD x Undefined
      DD x Undefined
    TROFSS DW 0 Signed transpose offset, units of 1/16 semitone
    FLTSS DB 99 0..99 Filter
    LORDSS DB 0 -50..+50 Signed loudness, units of .375 dB
      DW x Undefined

    These final bytes follow the last keygroup:

    Byte # Range Description
    ?? 0..127 Checksum, exclusive OR of preceding bytes without 0 to 6
    ?? F7h End of exclusive code



    Sample Parameters

    Byte # Range Description
    0 F0h System exclusive code
    1 47h Akai identifier
    2 0..15 MIDI channel number
    3 10 SPRM Function code for sample parameters
    4 64 S950 identifier
    5 0..31 Sample number
    6 0 Reserved

    Next follows a block of 120 MIDI bytes giving the sample parameters:

    Name Type Normal Description
    SNAME DB `TONE ' Name of sample
      DD x Undefined
      DW x Undefined
    SLNGTH DD 1800 Total number of words in sample. Note that for velocity-crossfade type this will be the sum of soft and loud parts
    SMRATE DW 11773 Original sample rate in Hz (=2.5*bandwidth)
    SNOMP DW 960 Nominal pitch, unsigned in 1/16 semitones (960=C3)
    SDFLDO DW 0 Signed loudness offset
    SRPLMD DB `L' Replay mode: `O/L/A'=one shot/looping/alternating
      DB 0 Reserved
    SEND DD 1800 End point relative to start of sample
    SSTART DD 0 First replay point relative to start of sample
    SLOOP DD 45 Length of loop or alternative part
      DW x Reserved
    VC DB 0 0/255 Velocity crossfade/normal type sample
    NOREV DB `N' `R/N' Sample waveform has/has not been reversed
      DD x Undefined
      DD x Undefined
      DD x Undefined
      DD x Undefined

    These final bytes follow:

    Byte # Range Description
    127 0..127 Checksum, exclusive OR of preceding bytes without 0 to 6
    128 F7h End of exclusive code