Konami SCC

Uit Wikipedia, de vrije encyclopedie
Ga naar: navigatie, zoeken
Een Konami SCC-geluidschip

De Konami SCC (SCC is een acroniem voor Sound Custom Chip of Sound Creative Chip) is een geluidschip voor de MSX-computerstandaard die gezamenlijk werd ontwikkeld door de Japanse ondernemingen Konami en Yamaha. Konami was ontevreden met de beperkte specificaties van de standaard geïntegreerde geluidschip in MSX-computers. Dit geldt voor zowel MSX1- als MSX2-computersystemen. De SCC-geluidschip wordt zowel simultaan als naast de bestaande geluidschip ingezet. De SCC-chip is ook bekend onder de naam K051649. De chip wordt geëmuleerd door vrijwel elke MSX-emulator maar ook door MAME.

Elke Konami-spelcartridge die gebruikmaakt van SCC-geluid is uitgerust met een geïntegreerde SCC-geluidschip en beschikt tevens over een ingebouwde memory mapper. Vrijwel elke Konami MSX-speltitel vanaf 1987 maakt gebruik van deze chip, waaronder Nemesis II en Metal Gear 2: Solid Snake. De chip werd door Konami tevens gebruikt in diverse computerspellen in de speelhal waaronder: Haunted Castle, City Bomber, Hexion en Nyan Nyan Panic.

Een doorontwikkelde versie, de Konami Sound Cartridge bevat slechts enkele en relatief kleine verbeteringen (waaronder 64 kB RAM-geheugen) en wordt gebruikt in combinatie met de spellen Snatcher en SD Snatcher. Elke SCC is bevat de volgende opdruk: KONAMI 051649 2212P003 JAPAN, gevolgd door een locatie of productie(batch)code en datumcode, bijvoorbeeld: 8750AAA. De eerste twee cijfers geven het jaartal aan, het derde en vierde cijfer het weeknummer en de cijfercombinatie geeft een productiecode weer.

De SCC is een primitieve wavetable geluidschip en beschikt over 5 geluidskanalen. Elk kanaal kan worden bestuurd door een aan/uit-bit, volume, frequentie en 32 bytes wavegeluid. De kanalen 4 en 5 delen 32 kB wavegeluid. In totaliteit is 128 kB geheugen ingebouwd.

Programmeren van de SCC[bewerken]

Hier onder volgt een technische verhandeling over de werking van de geluidschip. Er is, voor zover bekend, nooit officieel informatie over vrijgegeven. Alle hieronder vermelde informatie is verkregen middels reverse engineering.

Toegang tot de SCC wordt verkregen via memory mapped I/O. Als eerste moet 3Fh (de twee hoge bits zijn onbelangrijk, zodat FFh ook gebruikt kan worden) weggeschreven worden naar een geheugenadres tussen 9000h en 97FFh. Nu is de SCC geactiveerd zodat gegevens nu zowel kunnen worden uitgelezen als weggeschreven naar de geheugenadressen tussen 9800h en 9FFFh.

Adres lezen/schrijven Functie
9800h - 981Fh rw waveform kanaal 1
9820h - 983Fh rw waveform kanaal 2
9840h - 985Fh rw waveform kanaal 3
9860h - 987Fh rw waveform kanaal 4 and 5
9880h - 9881h w frequentie kanaal 1
9882h - 9883h w frequentie kanaal 2
9884h - 9885h w frequentie kanaal 3
9886h - 9887h w frequentie kanaal 4
9888h - 9889h w frequentie kanaal 5
988Ah w volume kanaal 1
988Bh w volume kanaal 2
988Ch w volume kanaal 3
988Dh w volume kanaal 4
988Eh w volume kanaal 5
988Fh w aan/uitschakelaar kanaal 1 tot 5
9890h - 989Fh identiek aan 9880h tot 988Fh
98A0h - 98DFh geen functie
98E0h - 98FFh rw deformatieregister

De golfvorm (waveform) bestaat uit 32, signed (two's complement) bytes. De golfvorm representeert de actuele vorm van de klank die de geluidschip produceert. Het wordt afgespeeld van byte 0 tot 31 en begint vervolgens weer van voren af aan.

De frequentie wordt op dezelfde manier opgeslagen als de PSG-geluidschip en kent een 12-bitswaarde. De eerste byte bevat bits 0 tot 7 van de frequentie en bits 0 tot 3 van de tweede byte bevatten de bits 8 tot 11 van de frequentie.

Bits 4 tot 7 van de tweede byte worden genegeerd. Merk op dat de ingevoerde waarde in werkelijkheid een periode is: een hogere waarde geeft een lagere frequentie.

De formule om de frequentie van de klank te berekenen is identiek aan die van de PSG:

f_{tone} = \frac{f_{clock}}{32(P + 1)}

f_{clock} is de interne klok van de computer (deze is op een MSX altijd 3579,545Hz) en P is de in het frequentieregister vastgelegde 12-bits periode.

Het volume wordt op identieke wijze opgeslagen als bij de PSG, hoewel deze geen envelopes ondersteund. Bits 0 tot 3 bevatten een volume van 0 tot 15, en de bits bits 7 tot 4 worden genegeerd. Een volume van 0 betekent geen geluidsweergave (stilte) en een volume van 15 is het maximale volume.

Het aan/uitschakelregister schakelt de verschillende kanalen in of uit. Het instellen van bit 0 activeert kanaal 1, bit 1 kanaal 2, bit 2 kanaal 3, bit 3 kanaal 4 en bit 4 activeert kanaal 5. De bits 5 tot en met 7 worden genegeerd.

Deformatieregister (98E0h)[bewerken]

Dit register wordt door geen enkel Konamispel gebruikt. Elk adres in het geheugengebied (98E0h - 98FFh) verwijzen naar hetzelfde register. Het herstarten (reset) van de SCC zet dit register op 0.

De twee lage bits beïnvloeden de frequentie en indien ingesteld op 01b, dan worden alle frequenties vermenigvuldigd met 256. Indien ingesteld op 11b of 10b, dan worden alle frequenties vermenigvuldigd met 16.

Als bit 5 wordt ingesteld dan wordt de waveform afgespeeld vanaf het begin wanneer een frequentieregister wordt beschreven.

Als bit 6 wordt ingesteld dan worden alle waveformgegevens geroteerd met de volgende snelheden:

f = \frac{f_{clock}}{P + 1}

Waardoor het niet verder mogelijk is om naar de waveform te schrijven.

Indien bit 7 en 6 zijn ingesteld, dan vinden de waveformgevens enkel plaats in de kanalen 4 en 5. Het lezen van dit register geeft FFh als resultaat maar stelt in werkelijkheid bit 6 van het register in. Aangezien de rotatie van de wavevormen nu gestart worden, wijzigen de waarden in 9800h tot 987Fh iedere keer deze worden uitgelezen.

Meer over het geheugen[bewerken]

Het geheugengebied van 9800h tot 987Fh gedraagt zich als RAM-geheugen, net zolang het deformatieregister is gereset. Naar het geheugengebied van 9880h tot 98FFh kan enkel worden beschreven. Het uitgelezen geeft altijd de waarde FFh. Pas op met het uitlezen van het deformatieregister, omdat deze bit 6 instelt. Het geheugengebied van 9900h tot 99FFh heeft dezelfde functie als het gebied van 9800h tot 98FFh, 9900h tot 99FFh enzovoort tot 9F00h tot 9FFFh. Dit vindt plaats omdat de SCC-chip niet is verbonden met de adresregels A8 tot A10, zodat het geen onderscheid kan maken tussen deze geheugenreeksen.