furnace/extern/vgsound_emu-modified/vgsound_emu/src/scc
2022-10-22 10:10:02 +09:00
..
README.md Take 2 2022-09-17 00:16:20 +09:00
scc.cpp Take 2 2022-09-17 00:16:20 +09:00
scc.hpp Revert "Temporarily revert "Sync vgsound_emu with master"" 2022-10-22 10:10:02 +09:00

Konami SCC

Summary

  • 5 voice wavetable
    • 8 bit signed, 32 width long for each voice
    • each voice has separated waveform space
    • 4th and 5th voice shares waveform (K051649)
  • MegaROM mapper (K051649) or MegaRAM mapper (K052539)

Source code

  • scc.hpp: Base header
    • scc.cpp: Source emulation core

Description

Konami SCC means "Sound Creative Chip", it's actually MSX MegaROM/RAM Mapper with 5 channel Wavetable sound generator.

It was first appeared at 1987, F-1 Spirit and Nemesis 2/Gradius 2 for MSX. then several MSX cartridges used that until 1990, Metal Gear 2: Solid Snake. Even after MSX is discontinued, it was still used at some low-end arcade and amusement hardwares. and some Third-party MSX utilities still support this due to its market shares.

There's 2 SCC types:

  • K051649 (or simply known as SCC) This chip is used for MSX MegaROM Mapper, some arcade machines. Channel 4 and 5 must be share waveform, other channels has its own waveforms.

  • K052539 (also known as SCC+) This chip is used for MSX MegaRAM Mapper (Konami Sound Cartridges for Snatcher/SD Snatcher). All channels can be has its own waveforms, and also has backward compatibility mode with K051649.

Register layout

K051649

  • 4000-bfff MegaROM Mapper
Address   Bit       R/W Description
          7654 3210

4000-5fff xxxx xxxx R   Bank page 0
c000-dfff mirror of 4000-5fff

6000-7fff xxxx xxxx R   Bank page 1
e000-ffff mirror of 6000-7fff

8000-9fff xxxx xxxx R   Bank page 2
0000-1fff mirror of 8000-9fff

a000-bfff xxxx xxxx R   Bank page 3
2000-3fff mirror of a000-bfff
  • 5000-57ff, 7000-77ff, 9000-97ff, b000-b7ff Bank select
Address   Bit       R/W Description
          7654 3210

5000      --xx xxxx   W Bank select, Page 0
5001-57ff Mirror of 5000

7000      --xx xxxx   W Bank select, Page 1
7001-77ff Mirror of 7000

9000      --xx xxxx   W Bank select, Page 2
          --11 1111   W SCC Enable
9001-97ff Mirror of 9000

b000      --xx xxxx   W Bank select, Page 3
b001-b7ff Mirror of b000
  • 9800-9fff SCC register
9800-987f Waveform

Address   Bit       R/W Description
          7654 3210

9800-981f xxxx xxxx R/W Channel 0 Waveform (32 byte, 8 bit signed)
9820-983f xxxx xxxx R/W Channel 1 ""
9840-985f xxxx xxxx R/W Channel 2 ""
9860-987f xxxx xxxx R/W Channel 3/4 ""

9880-9889 Pitch

9880      xxxx xxxx   W Channel 0 Pitch LSB
9881      ---- xxxx   W Channel 0 Pitch MSB
9882      xxxx xxxx   W Channel 1 Pitch LSB
9883      ---- xxxx   W Channel 1 Pitch MSB
9884      xxxx xxxx   W Channel 2 Pitch LSB
9885      ---- xxxx   W Channel 2 Pitch MSB
9886      xxxx xxxx   W Channel 3 Pitch LSB
9887      ---- xxxx   W Channel 3 Pitch MSB
9888      xxxx xxxx   W Channel 4 Pitch LSB
9889      ---- xxxx   W Channel 4 Pitch MSB

9888-988e Volume

988a      ---- xxxx   W Channel 0 Volume
988b      ---- xxxx   W Channel 1 Volume
988c      ---- xxxx   W Channel 2 Volume
988d      ---- xxxx   W Channel 3 Volume
988e      ---- xxxx   W Channel 4 Volume

988f      ---x ----   W Channel 4 Output enable/disable flag
          ---- x---   W Channel 3 Output enable/disable flag
          ---- -x--   W Channel 2 Output enable/disable flag
          ---- --x-   W Channel 1 Output enable/disable flag
          ---- ---x   W Channel 0 Output enable/disable flag

9890-989f Mirror of 9880-988f

98a0-98bf xxxx xxxx R   Channel 4 Waveform

98e0      x--- ----   W Waveform rotate flag for channel 4
          -x-- ----   W Waveform rotate flag for all channels
          --x- ----   W Reset waveform position after pitch writes
          ---- --x-   W 8 bit frequency
          ---- --0x   W 4 bit frequency

98e1-98ff Mirror of 98e0

9900-9fff Mirror of 9800-98ff

K052539

  • 4000-bfff MegaRAM Mapper
Address   Bit       R/W Description
          7654 3210

4000-5fff xxxx xxxx R/W Bank page 0
c000-dfff xxxx xxxx R/W ""

6000-7fff xxxx xxxx R/W Bank page 1
e000-ffff xxxx xxxx R/W ""

8000-9fff xxxx xxxx R/W Bank page 2
0000-1fff xxxx xxxx R/W ""

a000-bfff xxxx xxxx R/W Bank page 3
2000-3fff xxxx xxxx R/W ""
  • 5000-57ff, 7000-77ff, 9000-97ff, b000-b7ff Bank select
Address   Bit       R/W Description
          7654 3210

5000      xxxx xxxx   W Bank select, Page 0
5001-57ff Mirror of 5000

7000      xxxx xxxx   W Bank select, Page 1
7001-77ff Mirror of 7000

9000      xxxx xxxx   W Bank select, Page 2
          --11 1111   W SCC Enable (SCC Compatible mode)
9001-97ff Mirror of 9000

b000      xxxx xxxx   W Bank select, Page 3
          1--- ----   W SCC+ Enable (SCC+ mode)
b001-b7ff Mirror of b000
  • bffe-bfff Mapper configuration
Address   Bit       R/W Description
          7654 3210

bffe      --x- ----   W SCC operation mode
          --0- ----   W SCC Compatible mode
          --1- ----   W SCC+ mode
          ---x ----   W RAM write/Bank select toggle for all Bank pages
          ---0 ----   W Bank select enable
          ---1 ----   W RAM write enable
          ---0 -x--   W RAM write/Bank select toggle for Bank page 2
          ---0 --x-   W RAM write/Bank select toggle for Bank page 1
          ---0 ---x   W RAM write/Bank select toggle for Bank page 0

bfff Mirror of bffe
  • 9800-9fff SCC Compatible mode register
9800-987f Waveform

Address   Bit       R/W Description
          7654 3210

9800-981f xxxx xxxx R/W Channel 0 Waveform (32 byte, 8 bit signed)
9820-983f xxxx xxxx R/W Channel 1 ""
9840-985f xxxx xxxx R/W Channel 2 ""
9860-987f xxxx xxxx R/W Channel 3/4 ""

9880-9889 Pitch

9880      xxxx xxxx   W Channel 0 Pitch LSB
9881      ---- xxxx   W Channel 0 Pitch MSB
9882      xxxx xxxx   W Channel 1 Pitch LSB
9883      ---- xxxx   W Channel 1 Pitch MSB
9884      xxxx xxxx   W Channel 2 Pitch LSB
9885      ---- xxxx   W Channel 2 Pitch MSB
9886      xxxx xxxx   W Channel 3 Pitch LSB
9887      ---- xxxx   W Channel 3 Pitch MSB
9888      xxxx xxxx   W Channel 4 Pitch LSB
9889      ---- xxxx   W Channel 4 Pitch MSB

9888-988e Volume

988a      ---- xxxx   W Channel 0 Volume
988b      ---- xxxx   W Channel 1 Volume
988c      ---- xxxx   W Channel 2 Volume
988d      ---- xxxx   W Channel 3 Volume
988e      ---- xxxx   W Channel 4 Volume

988f      ---x ----   W Channel 4 Output enable/disable flag
          ---- x---   W Channel 3 Output enable/disable flag
          ---- -x--   W Channel 2 Output enable/disable flag
          ---- --x-   W Channel 1 Output enable/disable flag
          ---- ---x   W Channel 0 Output enable/disable flag

9890-989f Mirror of 9880-988f

98a0-98bf xxxx xxxx R   Channel 4 Waveform

98c0      -x-- ----   W Waveform rotate flag for all channels
          --x- ----   W Reset waveform position after pitch writes
          ---- --x-   W 8 bit frequency
          ---- --0x   W 4 bit frequency

98c1-98df Mirror of 98c0

 9900-9fff Mirror of 9800-98ff
  • b800-bfff SCC+ mode register
b800-b89f Waveform

Address   Bit       R/W Description
          7654 3210

b800-b81f xxxx xxxx R/W Channel 0 Waveform (32 byte, 8 bit signed)
b820-b83f xxxx xxxx R/W Channel 1 ""
b840-b85f xxxx xxxx R/W Channel 2 ""
b860-b87f xxxx xxxx R/W Channel 3 ""
b880-b89f xxxx xxxx R/W Channel 3 ""

b8a0-b8a9 Pitch

b8a0      xxxx xxxx   W Channel 0 Pitch LSB
b8a1      ---- xxxx   W Channel 0 Pitch MSB
b8a2      xxxx xxxx   W Channel 1 Pitch LSB
b8a3      ---- xxxx   W Channel 1 Pitch MSB
b8a4      xxxx xxxx   W Channel 2 Pitch LSB
b8a5      ---- xxxx   W Channel 2 Pitch MSB
b8a6      xxxx xxxx   W Channel 3 Pitch LSB
b8a7      ---- xxxx   W Channel 3 Pitch MSB
b8a8      xxxx xxxx   W Channel 4 Pitch LSB
b8a9      ---- xxxx   W Channel 4 Pitch MSB

b8a8-b8ae Volume

b8aa      ---- xxxx   W Channel 0 Volume
b8ab      ---- xxxx   W Channel 1 Volume
b8ac      ---- xxxx   W Channel 2 Volume
b8ad      ---- xxxx   W Channel 3 Volume
b8ae      ---- xxxx   W Channel 4 Volume

b8af      ---x ----   W Channel 4 Output enable/disable flag
          ---- x---   W Channel 3 Output enable/disable flag
          ---- -x--   W Channel 2 Output enable/disable flag
          ---- --x-   W Channel 1 Output enable/disable flag
          ---- ---x   W Channel 0 Output enable/disable flag

b8b0-b8bf Mirror of b8a0-b8af

b8c0      -x-- ----   W Waveform rotate flag for all channels
          --x- ----   W Reset waveform position after pitch writes
          ---- --x-   W 8 bit frequency
          ---- --0x   W 4 bit frequency

b8c1-b8df Mirror of b8c0

b900-bfff Mirror of b800-b8ff

Frequency calculation

 if 8 bit frequency then
  Frequency = Input clock / ((bit 0 to 7 of Pitch input) + 1)
 else if 4 bit frequency then
  Frequency = Input clock / ((bit 8 to 11 of Pitch input) + 1)
 else
  Frequency = Input clock / (Pitch input + 1)

Reference

https://www.msx.org/wiki/MegaROM_Mappers https://www.msx.org/wiki/Konami_051649 https://www.msx.org/wiki/Konami_052539 http://bifi.msxnet.org/msxnet/tech/scc http://bifi.msxnet.org/msxnet/tech/soundcartridge