Ticket #9071: sid_player.patch

File sid_player.patch, 215.4 KB (added by SF/tobigun, 15 years ago)

Patch for ScummVM (update 3)

  • engines/scumm/player_sid.cpp

     
     1/* ScummVM - Graphic Adventure Engine
     2 *
     3 * ScummVM is the legal property of its developers, whose names
     4 * are too numerous to list here. Please refer to the COPYRIGHT
     5 * file distributed with this source distribution.
     6 *
     7 * This program is free software; you can redistribute it and/or
     8 * modify it under the terms of the GNU General Public License
     9 * as published by the Free Software Foundation; either version 2
     10 * of the License, or (at your option) any later version.
     11
     12 * This program is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16
     17 * You should have received a copy of the GNU General Public License
     18 * along with this program; if not, write to the Free Software
     19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     20 *
     21 * $URL: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk/engines/scumm/actor.cpp $
     22 * $Id: actor.cpp 45438 2009-10-27 12:08:19Z Kirben $
     23 *
     24 */
     25
     26#include <algorithm>
     27#include "engines/engine.h"
     28#include "scumm/player_sid.h"
     29#include "scumm/scumm.h"
     30#include "sound/mixer.h"
     31
     32namespace Scumm {
     33
     34/*
     35 * The player's update() routine is called once per (NTSC/PAL) frame as it is
     36 * called by the VIC Rasterline interrupt handler which is in turn called
     37 * approx. 50 (PAL) or 60 (NTSC) times per second.
     38 * The SCUMM V0/V1 music playback routines or sound data have not been adjusted
     39 * to PAL systems. As a consequence, music is played audibly (-16%) slower
     40 * on PAL systems.
     41 * In addition, the SID oscillator frequency depends on the video clock too.
     42 * As SCUMM games use an NTSC frequency table for both NTSC and PAL versions
     43 * all tone frequencies on PAL systems are slightly (-4%) lower than on NTSC ones.
     44 *
     45 * For more info on the SID chip see:
     46 * - http://www.dopeconnection.net/C64_SID.htm (German)
     47 * For more info on the VIC chip see:
     48 * - http://www.htu.tugraz.at/~herwig/c64/man-vic.php (German)
     49 * - http://www.c64-wiki.de/index.php/VIC (German)
     50 */
     51
     52struct TimingProps {
     53        double clockFreq;
     54        int cyclesPerFrame;
     55};
     56
     57static const TimingProps timingProps[2] = {
     58        { 17734472.0 / 18, 312 * 63 }, // PAL:  312*63 cycles/frame @  985248 Hz (~50Hz)
     59        { 14318180.0 / 14, 263 * 65 }  // NTSC: 263*65 cycles/frame @ 1022727 Hz (~60Hz)
     60};
     61
     62static const uint8 BITMASK[7] = {
     63        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40
     64};
     65static const uint8 BITMASK_INV[7] = {
     66        0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF
     67};
     68
     69static const int SID_REG_OFFSET[7] = {
     70        0, 7, 14, 21, 2, 9, 16
     71};
     72
     73// NTSC frequency table (also used for PAL versions).
     74// FREQ_TBL[i] = tone_freq[i] * 2^24 / clockFreq
     75static const uint16 FREQ_TBL[97] = {
     76  0x0000, 0x010C, 0x011C, 0x012D, 0x013E, 0x0151, 0x0166, 0x017B,
     77  0x0191, 0x01A9, 0x01C3, 0x01DD, 0x01FA, 0x0218, 0x0238, 0x025A,
     78  0x027D, 0x02A3, 0x02CC, 0x02F6, 0x0323, 0x0353, 0x0386, 0x03BB,
     79  0x03F4, 0x0430, 0x0470, 0x04B4, 0x04FB, 0x0547, 0x0598, 0x05ED,
     80  0x0647, 0x06A7, 0x070C, 0x0777, 0x07E9, 0x0861, 0x08E1, 0x0968,
     81  0x09F7, 0x0A8F, 0x0B30, 0x0BDA, 0x0C8F, 0x0D4E, 0x0E18, 0x0EEF,
     82  0x0FD2, 0x10C3, 0x11C3, 0x12D1, 0x13EF, 0x151F, 0x1660, 0x17B5,
     83  0x191E, 0x1A9C, 0x1C31, 0x1DDF, 0x1FA5, 0x2187, 0x2386, 0x25A2,
     84  0x27DF, 0x2A3E, 0x2CC1, 0x2F6B, 0x323C, 0x3539, 0x3863, 0x3BBE,
     85  0x3F4B, 0x430F, 0x470C, 0x4B45, 0x4FBF, 0x547D, 0x5983, 0x5ED6,
     86  0x6479, 0x6A73, 0x70C7, 0x777C, 0x7E97, 0x861E, 0x8E18, 0x968B,
     87  0x9F7E, 0xA8FA, 0xB306, 0xBDAC, 0xC8F3, 0xD4E6, 0xE18F, 0xEEF8,
     88  0xFD2E
     89};
     90
     91static const int SONG_CHANNEL_OFFSET[3] = { 6, 8, 10 };
     92static const int RES_ID_CHANNEL[3] = { 3, 4, 5 };
     93
     94#define LOBYTE(a) ((a) & 0xFF)
     95#define HIBYTE(a) (((a) >> 8) & 0xFF)
     96
     97#define GETBIT(var, pos) ((var) & (1<<(pos)))
     98
     99void Player_SID::handleMusicBuffer() { // $33cd
     100        int channel = 2;
     101        while (channel >= 0) {
     102                if ((statusBits1A & BITMASK[channel]) == 0 ||
     103                    (busyChannelBits & BITMASK[channel]) != 0)
     104                {                       
     105                        --channel;
     106                        continue;
     107                }
     108
     109                if (setupSongFileData() == 1)
     110                        return;
     111               
     112                uint8* l_chanFileDataPtr = chanFileData[channel];
     113               
     114                uint16 l_freq = 0;
     115                bool l_keepFreq = false;
     116
     117                int y = 0;
     118                uint8 curByte = l_chanFileDataPtr[y++];
     119
     120                // freq or 0/0xFF
     121                if (curByte == 0) {
     122                        func_3674(channel);
     123                        if (!isMusicPlaying)
     124                                return;         
     125                        continue;
     126                } else if (curByte == 0xFF) {
     127                        l_keepFreq = true;
     128                } else {
     129                        l_freq = FREQ_TBL[curByte];
     130                }
     131
     132                uint8 local1 = 0;
     133                curByte = l_chanFileDataPtr[y++];
     134                bool isLastCmdByte = (curByte & 0x80) != 0;
     135                uint16 curStepSum = stepTbl[curByte & 0x7f];
     136               
     137                for (int i = 0; !isLastCmdByte && (i < 2); ++i) {
     138                        curByte = l_chanFileDataPtr[y++];
     139                        isLastCmdByte = (curByte & 0x80) != 0;
     140                        if (curByte & 0x40) {
     141                                // note: bit used in zak theme (95) only (not used/handled in MM)
     142                                _music_timer = curByte & 0x3f;
     143                        } else {
     144                                local1 = curByte & 0x3f;
     145                        }
     146                }
     147               
     148                chanFileData[channel] += y;
     149                chanDataOffset[channel] += y;
     150
     151                uint8 *l_chanBuf = getResource(RES_ID_CHANNEL[channel]);
     152
     153                if (local1 != 0) {
     154                        // TODO: signed or unsigned?
     155                        uint16 offset = READ_LE_UINT16(&actSongFileData[local1*2 + 12]);
     156                        l_chanFileDataPtr = actSongFileData + offset;
     157                       
     158                        // next five bytes: freqDelta, attack, sustain and phase bit
     159                        for (int i = 0; i < 5; ++i) {
     160                                l_chanBuf[15 + i] = l_chanFileDataPtr[i];
     161                        }
     162                        phaseBit[channel] = l_chanFileDataPtr[4];
     163
     164                        for (int i = 0; i < 17; ++i) {         
     165                                l_chanBuf[25 + i] = l_chanFileDataPtr[5 + i];
     166                        }               
     167                }
     168               
     169                if (l_keepFreq) {
     170                        if (!releasePhase[channel]) {
     171                                l_chanBuf[10] &= 0xfe; // release phase
     172                        }
     173                        releasePhase[channel] = true;
     174                } else {
     175                        if (releasePhase[channel]) {
     176                                l_chanBuf[19] = phaseBit[channel];
     177                                l_chanBuf[10] |= 0x01; // attack phase
     178                        }
     179                        l_chanBuf[11] = LOBYTE(l_freq);
     180                        l_chanBuf[12] = HIBYTE(l_freq);
     181                        releasePhase[channel] = false;
     182                }
     183               
     184                // set counter value for frequency update (freqDeltaCounter)
     185                l_chanBuf[13] = LOBYTE(curStepSum);
     186                l_chanBuf[14] = HIBYTE(curStepSum);
     187
     188                _soundQueue[channel] = RES_ID_CHANNEL[channel];
     189                processSongData(channel);
     190                _soundQueue[channel+4] = RES_ID_CHANNEL[channel];
     191                processSongData(channel+4);
     192                --channel;
     193        }
     194}
     195
     196int Player_SID::setupSongFileData() { // $36cb
     197        // no song playing
     198        // TODO: remove (never NULL)
     199        if (_music == NULL) {
     200                for (int i = 2; i >= 0; --i) {
     201                        if (songChannelBits & BITMASK[i]) {
     202                                func_3674(i);
     203                        }
     204                }
     205                return 1;
     206        }
     207       
     208        // no new song
     209        songFileOrChanBufData = _music;
     210        if (_music == actSongFileData) {
     211                return 0;
     212        }
     213       
     214        // new song selected
     215        actSongFileData = _music;
     216        for (int i = 0; i < 3; ++i) {
     217                chanFileData[i] = _music + chanDataOffset[i];
     218        }
     219       
     220        return -1;
     221}
     222
     223//x:0..2
     224void Player_SID::func_3674(int channel) { // $3674
     225        statusBits1B &= BITMASK_INV[channel];
     226        if (statusBits1B == 0) {
     227                isMusicPlaying = false;
     228                unlockCodeLocation();
     229                safeUnlockResource(resID_song);
     230                for (int i = 0; i < 3; ++i) {
     231                        safeUnlockResource(RES_ID_CHANNEL[i]);
     232                }       
     233        }
     234       
     235        chanPrio[channel] = 2;
     236       
     237        statusBits1A &= BITMASK_INV[channel];
     238        phaseBit[channel] = 0;
     239       
     240        func_4F45(channel);
     241}
     242
     243void Player_SID::resetPlayerState() { // $48f7
     244        for (int i = 6; i >= 0; --i)
     245                releaseChannel(i);
     246       
     247        isMusicPlaying = false;
     248        unlockCodeLocation(); // does nothing
     249        statusBits1B = 0;
     250        statusBits1A = 0;
     251        freeChannelCount = 3;
     252        swapPrepared = false;
     253        filterSwapped = false;
     254        pulseWidthSwapped = false;
     255        //var5163 = 0;
     256}
     257
     258void Player_SID::resetSID() { // $48D8
     259        SIDReg24 = 0x0f;
     260
     261        SID_Write( 4, 0);
     262        SID_Write(11, 0);
     263        SID_Write(18, 0);
     264        SID_Write(23, 0);
     265        SID_Write(21, 0);
     266        SID_Write(22, 0);
     267        SID_Write(24, SIDReg24);
     268       
     269        resetPlayerState();
     270}
     271
     272void Player_SID::update() { // $481B
     273        if (initializing)
     274                return;
     275
     276        if (_soundInQueue) {
     277                for (int i = 6; i >= 0; --i) {
     278                        if (_soundQueue[i] != -1)
     279                                processSongData(i);
     280                }
     281                _soundInQueue = false;
     282        }
     283       
     284        // no sound
     285        if (busyChannelBits == 0)
     286                return;
     287
     288        for (int i = 6; i >= 0; --i) {
     289                if (busyChannelBits & BITMASK[i]) {
     290                        updateFreq(i);
     291                }
     292        }
     293       
     294        // seems to be used for background (prio=1?) sounds.
     295        // If a bg sound cannot be played because all SID
     296        // voices are used by higher priority sounds, the
     297        // bg sound's state is updated here so it will be at
     298        // the correct state when a voice is available again.
     299        if (swapPrepared) {
     300                swapVars(0, 0);
     301                swapVarLoaded = true;
     302                updateFreq(0);
     303                swapVars(0, 0);
     304                if (pulseWidthSwapped) {
     305                        swapVars(4, 1);
     306                        updateFreq(4);
     307                        swapVars(4, 1);
     308                }
     309                swapVarLoaded = false;
     310        }
     311       
     312        for (int i = 6; i >= 0; --i) {
     313                if (busyChannelBits & BITMASK[i])
     314                        setSIDWaveCtrlReg(i);
     315        };
     316       
     317        if (isMusicPlaying) {
     318                handleMusicBuffer();
     319        }
     320
     321        return;
     322}
     323
     324// channel: 0..6
     325void Player_SID::processSongData(int channel) { // $4939
     326        // always: _soundQueue[channel] != -1
     327        // -> channelMap[channel] != -1
     328        channelMap[channel] = _soundQueue[channel];
     329        _soundQueue[channel] = -1;
     330        songPosUpdateCounter[channel] = 0;
     331       
     332        isVoiceChannel = (channel < 3);
     333               
     334        songFileOrChanBufOffset[channel] = vec6[channel];
     335       
     336        setupSongPtr(channel);
     337
     338        //vec5[channel] = songFileOrChanBufData; // not used
     339
     340        if (songFileOrChanBufData == NULL) { // chanBuf (4C1C)
     341                /*
     342                // TODO: do we need this?
     343                LOBYTE(vec20[channel]) = 0;
     344                LOBYTE(songPosPtr[channel]) = LOBYTE(songFileOrChanBufOffset[channel]);
     345                */
     346                releaseResourceUnk(channel);
     347                return;
     348        }
     349       
     350        vec20[channel] = songFileOrChanBufData; // chanBuf (4C1C)
     351        songPosPtr[channel] = songFileOrChanBufData + songFileOrChanBufOffset[channel]; // chanBuf (4C1C)
     352        uint8* ptr1 = songPosPtr[channel];
     353               
     354        int y = -1;
     355        if (channel < 4) {
     356                ++y;
     357                if (channel == 3) {
     358                        readSetSIDFilterAndProps(&y, ptr1);
     359                } else if (statusBits1A & BITMASK[channel]) {
     360                        ++y;
     361                } else { // channel = 0/1/2
     362                        waveCtrlReg[channel] = ptr1[y];
     363                       
     364                        ++y;
     365                        if (ptr1[y] & 0x0f) {
     366                                // filter on for voice channel
     367                                SIDReg23 |= BITMASK[channel];
     368                        } else {
     369                                // filter off for voice channel
     370                                SIDReg23 &= BITMASK_INV[channel];
     371                        }
     372                        SID_Write(23, SIDReg23);
     373                }
     374        }
     375       
     376        saveSongPos(y, channel);
     377        busyChannelBits |= BITMASK[channel];
     378        readSongChunk(channel);
     379}
     380
     381void Player_SID::readSetSIDFilterAndProps(int *offset, uint8* dataPtr) {  // $49e7
     382        SIDReg23 |= dataPtr[*offset];
     383        SID_Write(23, SIDReg23);
     384        ++*offset;
     385        SIDReg24 = dataPtr[*offset];
     386        SID_Write(24, SIDReg24);
     387}
     388
     389void Player_SID::saveSongPos(int y, int channel) {
     390        ++y;
     391        songPosPtr[channel] += y;
     392        songFileOrChanBufOffset[channel] += y;
     393}
     394
     395// channel: 0..6
     396void Player_SID::updateFreq(int channel) {
     397        isVoiceChannel = (channel < 3);
     398
     399        --freqDeltaCounter[channel];
     400        if (freqDeltaCounter[channel] < 0) {
     401                readSongChunk(channel);
     402        } else {
     403                freqReg[channel] += freqDelta[channel];
     404        }
     405        setSIDFreqAS(channel);
     406}
     407
     408void Player_SID::resetFreqDelta(int channel) {
     409        freqDeltaCounter[channel] = 0;
     410        freqDelta[channel] = 0;
     411}
     412
     413void Player_SID::readSongChunk(int channel) { // $4a6b
     414        while (true) {
     415                if (setupSongPtr(channel) == 1) {
     416                        // do something with code resource
     417                        releaseResourceUnk(1);
     418                        return;
     419                }
     420               
     421                uint8* ptr1 = songPosPtr[channel];
     422               
     423                //curChannelActive = true;     
     424               
     425                uint8 l_cmdByte = ptr1[0];
     426                if (l_cmdByte == 0) {
     427                        //curChannelActive = false;
     428                        songPosUpdateCounter[channel] = 0;
     429
     430                        var481A = -1;
     431                        releaseChannel(channel);
     432                        return;
     433                }
     434               
     435                //vec19[channel] = l_cmdByte;
     436               
     437                // attack (1) / release (0) phase
     438                if (isVoiceChannel) {
     439                        if (GETBIT(l_cmdByte, 0))
     440                                waveCtrlReg[channel] |= 0x01; // start attack phase
     441                        else
     442                                waveCtrlReg[channel] &= 0xfe; // start release phase
     443                }
     444               
     445                // channel finished bit
     446                if (GETBIT(l_cmdByte, 1)) {
     447                        var481A = -1;
     448                        releaseChannel(channel);
     449                        return;
     450                }
     451
     452                int y = 0;
     453
     454                // frequency
     455                if (GETBIT(l_cmdByte, 2)) {
     456                        y += 2;
     457                        freqReg[channel] = READ_LE_UINT16(&ptr1[y-1]);
     458                        if (!GETBIT(l_cmdByte, 6)) {
     459                                y += 2;
     460                                freqDeltaCounter[channel] = READ_LE_UINT16(&ptr1[y-1]);
     461                                y += 2;
     462                                freqDelta[channel] = READ_LE_UINT16(&ptr1[y-1]);
     463                        } else {
     464                                resetFreqDelta(channel);
     465                        }
     466                } else {
     467                        resetFreqDelta(channel);
     468                }
     469               
     470                // attack / release
     471                if (isVoiceChannel && GETBIT(l_cmdByte, 3)) {
     472                        // start release phase
     473                        waveCtrlReg[channel] &= 0xfe;
     474                        setSIDWaveCtrlReg(channel);
     475
     476                        ++y;
     477                        attackReg[channel] = ptr1[y];
     478                        ++y;
     479                        sustainReg[channel] = ptr1[y];
     480                       
     481                        // set attack (1) or release (0) phase
     482                        waveCtrlReg[channel]  |= (l_cmdByte & 0x01);
     483                }
     484               
     485                if (GETBIT(l_cmdByte, 4)) {
     486                        ++y;
     487                        uint8 curByte = ptr1[y];
     488                       
     489                        // pulse width
     490                        if (isVoiceChannel && GETBIT(curByte, 0)) {
     491                                int reg = SID_REG_OFFSET[channel+4];
     492
     493                                y += 2;
     494                                SID_Write(reg, ptr1[y-1]);
     495                                SID_Write(reg+1, ptr1[y]);
     496                        }
     497                       
     498                        if (GETBIT(curByte, 1)) {
     499                                ++y;
     500                                readSetSIDFilterAndProps(&y, ptr1);
     501                               
     502                                y += 2;
     503                                SID_Write(21, ptr1[y-1]);
     504                                SID_Write(22, ptr1[y]);
     505                        }
     506                       
     507                        if (GETBIT(curByte, 2)) {
     508                                resetFreqDelta(channel);
     509                               
     510                                y += 2;
     511                                freqDeltaCounter[channel] = READ_LE_UINT16(&ptr1[y-1]);
     512                        }
     513                }
     514               
     515                // set waveform (?)
     516                if (GETBIT(l_cmdByte, 5)) {
     517                        ++y;
     518                        waveCtrlReg[channel] = (waveCtrlReg[channel] & 0x0f) | ptr1[y];         
     519                }
     520               
     521                // song position
     522                if (GETBIT(l_cmdByte, 7)) {
     523                        if (songPosUpdateCounter[channel] == 1) {
     524                                y += 2;
     525                                --songPosUpdateCounter[channel];                       
     526                                saveSongPos(y, channel);
     527                        } else {
     528                                // looping / skipping / ...
     529                                ++y;
     530                                songPosPtr[channel] -= ptr1[y];
     531                                songFileOrChanBufOffset[channel] -= ptr1[y];
     532                                       
     533                                ++y;
     534                                if (songPosUpdateCounter[channel] == 0) {
     535                                        songPosUpdateCounter[channel] = ptr1[y];
     536                                } else {
     537                                        --songPosUpdateCounter[channel];
     538                                }
     539                        }
     540                } else {       
     541                        saveSongPos(y, channel);
     542                        return;
     543                }
     544        }
     545}
     546
     547/**
     548 * Sets frequency, attack and sustain register
     549 */
     550void Player_SID::setSIDFreqAS(int channel) { // $4be6
     551        if (swapVarLoaded)
     552                return;
     553        int reg = SID_REG_OFFSET[channel];
     554        SID_Write(reg,   LOBYTE(freqReg[channel]));   // freq/pulseWidth voice 1/2/3
     555        SID_Write(reg+1, HIBYTE(freqReg[channel]));
     556        if (channel < 3) {
     557                SID_Write(reg+5, attackReg[channel]); // attack
     558                SID_Write(reg+6, sustainReg[channel]); // sustain
     559        }
     560}
     561
     562void Player_SID::setSIDWaveCtrlReg(int channel) { // $4C0D
     563        if (channel < 3) {
     564                int reg = SID_REG_OFFSET[channel];
     565                SID_Write(reg+4, waveCtrlReg[channel]);
     566        }
     567}
     568
     569// channel: 0..6
     570int Player_SID::setupSongPtr(int channel) { // $4C1C
     571        //resID:5,4,3,songid
     572        int resID = channelMap[channel];
     573
     574        // TODO: when does this happen, only if resID == 0?
     575        if (getResource(resID) == NULL) {
     576                releaseResourceUnk(resID);
     577                if (resID == bgSoundResID) {
     578                        bgSoundResID = 0;
     579                        bgSoundActive = false;
     580                        swapPrepared = false;
     581                        pulseWidthSwapped = false;
     582                }
     583                return 1;
     584        }
     585       
     586        songFileOrChanBufData = getResource(resID); // chanBuf (4C1C)
     587        if (songFileOrChanBufData == vec20[channel]) {
     588                return 0;
     589        } else {
     590                vec20[channel] = songFileOrChanBufData;
     591                songPosPtr[channel] = songFileOrChanBufData + songFileOrChanBufOffset[channel];
     592                return -1;
     593        }
     594}
     595
     596// ignore: no effect
     597// chanResIndex: 3,4,5 or 58
     598void Player_SID::unlockResource(int chanResIndex) { // $4CDA
     599        if ((resStatus[chanResIndex] & 0x7F) != 0)
     600                --resStatus[chanResIndex];
     601}
     602
     603void Player_SID::countFreeChannels() { // $4f26
     604        freeChannelCount = 0;
     605        for (int i = 0; i < 3; ++i) {
     606                if (GETBIT(usedChannelBits, i) == 0)
     607                        ++freeChannelCount;
     608        }
     609}
     610
     611void Player_SID::func_4F45(int channel) { // $4F45
     612        if (swapVarLoaded) {
     613                if (channel == 0) {
     614                        swapPrepared = false;
     615                        resetSwapVars();
     616                }
     617                pulseWidthSwapped = false;
     618        } else {
     619                if (channel == 3) {
     620                        filterUsed = false;
     621                }
     622               
     623                if (chanPrio[channel] == 1) {
     624                        if (var481A == 1)
     625                                prepareSwapVars(channel);
     626                        else if (channel < 3)
     627                                clearSIDWaveform(channel);
     628                } else if (channel < 3 && bgSoundActive && swapPrepared &&
     629                    !(filterSwapped && filterUsed))
     630                {
     631                        busyChannelBits |= BITMASK[channel];
     632                        useSwapVars(channel);
     633                        waveCtrlReg[channel] |= 0x01;
     634                        setSIDWaveCtrlReg(channel);
     635                       
     636                        safeUnlockResource(channelMap[channel]);
     637                        return;
     638                }
     639               
     640                chanPrio[channel] = 0;
     641                usedChannelBits &= BITMASK_INV[channel];
     642                countFreeChannels();
     643        }
     644       
     645        int resIndex = channelMap[channel];
     646        channelMap[channel] = 0;
     647        safeUnlockResource(resIndex);
     648}
     649
     650// chanResIndex: 3,4,5 or 58
     651void Player_SID::safeUnlockResource(int resIndex) { // $4FEA
     652        if (!isMusicPlaying) {
     653                unlockResource(resIndex);
     654        }
     655}
     656
     657void Player_SID::releaseResource(int resIndex) { // $5031
     658        releaseResChannels(resIndex);
     659        if (resIndex == bgSoundResID && var481A == -1) {
     660                safeUnlockResource(resIndex);
     661               
     662                bgSoundResID = 0;
     663                bgSoundActive = false;
     664                swapPrepared = false;
     665                pulseWidthSwapped = false;
     666               
     667                resetSwapVars();
     668        }
     669}
     670
     671void Player_SID::releaseResChannels(int resIndex) { // $5070
     672        for (int i = 3; i >= 0; --i) {
     673                if (resIndex == channelMap[i]) {
     674                        releaseChannel(i);
     675                }
     676        }
     677}
     678
     679void Player_SID::stopSound_intern(int soundResID) { // $5093
     680        for (int i = 0; i < 7; ++i) {
     681                if (soundResID == _soundQueue[i]) {
     682                        _soundQueue[i] = -1;
     683                }
     684        }
     685        var481A = -1;
     686        releaseResource(soundResID);
     687}
     688
     689void Player_SID::stopAllSounds_intern() { // $4CAA
     690        statusBits1B = 0;
     691        isMusicPlaying = false;
     692
     693        if (resID_song != 0) {
     694                unlockResource(resID_song);
     695        }
     696
     697        chanPrio[0] = 2;
     698        chanPrio[1] = 2;
     699        chanPrio[2] = 2;
     700
     701        statusBits1A = 0;
     702        phaseBit[0] = 0;
     703        phaseBit[1] = 0;
     704        phaseBit[2] = 0;
     705}
     706
     707void Player_SID::releaseResourceUnk(int resIndex) { // $50A4
     708        var481A = -1;
     709        releaseResource(resIndex);
     710}
     711
     712// a: 0..6
     713void Player_SID::releaseChannel(int channel) {
     714        stopChannel(channel);
     715        if (channel >= 4) {
     716                return;
     717        }
     718        if (channel < 3) {
     719                SIDReg23Stuff = SIDReg23;
     720                clearSIDWaveform(channel);     
     721        }
     722        func_4F45(channel);
     723        if (channel >= 3) {
     724                return;         
     725        }
     726        if ((SIDReg23 != SIDReg23Stuff) &&
     727            (SIDReg23 & 0x07) == 0)
     728        {
     729                if (filterUsed) {
     730                        func_4F45(3);
     731                        stopChannel(3);
     732                }
     733        }
     734       
     735        stopChannel(channel + 4);
     736}
     737
     738void Player_SID::clearSIDWaveform(int channel) {
     739        if (!isMusicPlaying && var481A == -1) {
     740                waveCtrlReg[channel] &= 0x0e;
     741                setSIDWaveCtrlReg(channel);
     742        }
     743}
     744
     745void Player_SID::stopChannel(int channel) {
     746        songPosUpdateCounter[channel] = 0;
     747        // clear "channel" bit
     748        busyChannelBits &= BITMASK_INV[channel];
     749        if (channel >= 4) {
     750                // pulsewidth = 0
     751                channelMap[channel] = 0;
     752        }
     753}
     754
     755// channel: 0..6, swapIndex: 0..2
     756void Player_SID::swapVars(int channel, int swapIndex) { // $51a5
     757        if (channel < 3) {
     758                std::swap(attackReg[channel], swapAttack[swapIndex]);
     759                std::swap(sustainReg[channel], swapSustain[swapIndex]);
     760        }
     761        //std::swap(vec5[channel],  swapVec5[swapIndex]);  // not used
     762        //std::swap(vec19[channel], swapVec19[swapIndex]); // not used
     763
     764        std::swap(chanPrio[channel], swapSongPrio[swapIndex]);
     765        std::swap(channelMap[channel], swapVec479C[swapIndex]);
     766        std::swap(songPosUpdateCounter[channel], swapSongPosUpdateCounter[swapIndex]);
     767        std::swap(waveCtrlReg[channel], swapWaveCtrlReg[swapIndex]);
     768        std::swap(songPosPtr[channel],  swapSongPosPtr[swapIndex]);
     769        std::swap(freqReg[channel],  swapFreqReg[swapIndex]);
     770        std::swap(freqDeltaCounter[channel], swapVec11[swapIndex]);
     771        std::swap(freqDelta[channel], swapVec10[swapIndex]);
     772        std::swap(vec20[channel], swapVec20[swapIndex]);
     773        std::swap(songFileOrChanBufOffset[channel],  swapVec8[swapIndex]);
     774}
     775
     776void Player_SID::resetSwapVars() { // $52d0
     777        for (int i = 0; i < 2; ++i) {
     778                swapAttack[i] = 0;
     779                swapSustain[i] = 0;
     780        }
     781        for (int i = 0; i < 3; ++i) {
     782                swapVec5[i] = 0;
     783                swapSongPrio[i] = 0;
     784                swapVec479C[i] = 0;
     785                swapVec19[i] = 0;
     786                swapSongPosUpdateCounter[i] = 0;
     787                swapWaveCtrlReg[i] = 0;
     788                swapSongPosPtr[i] = 0;
     789                swapFreqReg[i] = 0;
     790                swapVec11[i] = 0;
     791                swapVec10[i] = 0;
     792                swapVec20[i] = 0;
     793                swapVec8[i] = 0;
     794        }
     795}
     796
     797void Player_SID::prepareSwapVars(int channel) { // $52E5
     798        if (channel >= 4)
     799                return;
     800               
     801        if (channel < 3) {
     802                if (!keepSwapVars) {
     803                        resetSwapVars();
     804                }
     805                swapVars(channel, 0);
     806                if (busyChannelBits & BITMASK[channel+4]) {
     807                        swapVars(channel+4, 1);
     808                        pulseWidthSwapped = true;
     809                }
     810        } else if (channel == 3) {
     811                SIDReg24_HiNibble = SIDReg24 & 0x70;
     812                resetSwapVars();
     813                keepSwapVars = true;
     814                swapVars(3, 2);
     815                filterSwapped = true;
     816        }
     817        swapPrepared = true;
     818}
     819
     820void Player_SID::useSwapVars(int channel) { // $5342
     821        if (channel >= 3)
     822                return;
     823       
     824        swapVars(channel, 0);
     825        setSIDFreqAS(channel);
     826        if (pulseWidthSwapped) {
     827                swapVars(channel+4, 1);
     828                setSIDFreqAS(channel+4);
     829        }
     830        if (filterSwapped) {
     831                swapVars(3, 2);
     832               
     833                // resonating filter freq. or voice-to-filter mapping?
     834                SIDReg23 = (SIDReg23Stuff & 0xf0) | BITMASK[channel];
     835                SID_Write(23, SIDReg23);
     836               
     837                // filter props
     838                SIDReg24 = (SIDReg24 & 0x0f) | SIDReg24_HiNibble;
     839                SID_Write(24, SIDReg24);
     840
     841                // filter freq.
     842                SID_Write(21, LOBYTE(freqReg[3]));
     843                SID_Write(22, HIBYTE(freqReg[3]));
     844        } else {
     845                SIDReg23 = SIDReg23Stuff & BITMASK_INV[channel];
     846                SID_Write(23, SIDReg23);
     847        }
     848       
     849        swapPrepared = false;
     850        pulseWidthSwapped = false;
     851        keepSwapVars = false;
     852        SIDReg24_HiNibble = 0;
     853        filterSwapped = false;
     854}
     855
     856// ignore: no effect
     857// resIndex: 3,4,5 or 58
     858void Player_SID::lockResource(int resIndex) { // $4ff4
     859        if (!isMusicPlaying)
     860                ++resStatus[resIndex];
     861}
     862
     863void Player_SID::reserveChannel(int channel, uint8 prioValue, int chanResIndex) { // $4ffe
     864        if (channel == 3) {
     865                filterUsed = true;
     866        } else if (channel < 3) {
     867                usedChannelBits |= BITMASK[channel];
     868                countFreeChannels();
     869        }
     870       
     871        chanPrio[channel] = prioValue;
     872        lockResource(chanResIndex);
     873}
     874
     875// ignore: no effect
     876void Player_SID::unlockCodeLocation() { // $513e
     877        resStatus[1] &= 0x80;
     878        resStatus[2] &= 0x80;
     879}
     880
     881// ignore: no effect
     882void Player_SID::lockCodeLocation() { // $514f
     883        resStatus[1] |= 0x01;
     884        resStatus[2] |= 0x01;
     885}
     886
     887void Player_SID::initMusic(int songResIndex) { // $7de6
     888        unlockResource(resID_song);
     889       
     890        resID_song = songResIndex;
     891        _music = getResource(resID_song);
     892        if (_music == NULL) {
     893                return;
     894        }
     895       
     896        // song base address
     897        uint8* songFileDataPtr = _music;
     898        actSongFileData = _music;
     899
     900        initializing = true;
     901        _soundInQueue = false;
     902        isMusicPlaying = false;
     903       
     904        unlockCodeLocation();
     905        resetPlayerState();
     906       
     907        lockResource(resID_song);
     908        buildStepTbl(songFileDataPtr[5]);
     909       
     910        // fetch sound
     911        songChannelBits = songFileDataPtr[4];
     912        for (int i = 2; i >= 0; --i) {
     913                if ((songChannelBits & BITMASK[i]) != 0) {
     914                        func_7eae(i, songFileDataPtr);
     915                }
     916        }
     917
     918        isMusicPlaying = true;
     919        lockCodeLocation();
     920       
     921        SIDReg23 &= 0xf0;
     922        SID_Write(23, SIDReg23);
     923       
     924        handleMusicBuffer();
     925       
     926        initializing = false;
     927        _soundInQueue = true;
     928}
     929
     930// params:
     931//   channel: channel 0..2
     932void Player_SID::func_7eae(int channel, uint8* songFileDataPtr) {
     933        int pos = SONG_CHANNEL_OFFSET[channel];
     934        chanDataOffset[channel] = READ_LE_UINT16(&songFileDataPtr[pos]);
     935        chanFileData[channel] = songFileDataPtr + chanDataOffset[channel];
     936       
     937        //vec5[channel+4] = vec5[channel] = CHANNEL_BUFFER_ADDR[RES_ID_CHANNEL[channel]]; // not used
     938        vec6[channel+4] = 0x0019;
     939        vec6[channel]   = 0x0008;
     940       
     941        func_819b(channel);
     942       
     943        waveCtrlReg[channel] = 0;
     944}
     945
     946void Player_SID::func_819b(int channel) {
     947    reserveChannel(channel, 127, RES_ID_CHANNEL[channel]);
     948       
     949        statusBits1B |= BITMASK[channel];
     950        statusBits1A |= BITMASK[channel];
     951}
     952
     953void Player_SID::buildStepTbl(int step) { // $82B4
     954        stepTbl[0] = 0;
     955        stepTbl[1] = step - 2; 
     956        for (int i = 2; i < 33; ++i) {
     957                stepTbl[i] = stepTbl[i-1] + step;
     958        }
     959}
     960
     961int Player_SID::reserveSoundFilter(uint8 value, uint8 chanResIndex) { // $4ED0
     962        int channel = 3;
     963        reserveChannel(channel, value, chanResIndex);
     964        return channel;
     965}
     966
     967int Player_SID::reserveSoundVoice(uint8 value, uint8 chanResIndex) { // $4EB8
     968        for (int i = 2; i >= 0; --i) {
     969                if ((usedChannelBits & BITMASK[i]) == 0) {
     970                        reserveChannel(i, value, chanResIndex);
     971                        return i;
     972                }
     973        }
     974        return 0;
     975}
     976
     977void Player_SID::findLessPrioChannels(uint8 soundPrio) { // $4ED8
     978        minChanPrio = 127;
     979
     980        chansWithLowerPrioCount = 0;
     981        for (int i = 2; i >= 0; --i) {
     982                if (usedChannelBits & BITMASK[i]) {
     983                        if (chanPrio[i] < soundPrio)
     984                                ++chansWithLowerPrioCount;
     985                        if (chanPrio[i] < minChanPrio) {
     986                                minChanPrio = chanPrio[i];
     987                                minChanPrioIndex = i;
     988                        }
     989                }
     990        }
     991
     992        if (chansWithLowerPrioCount == 0)
     993                return;
     994
     995        if (soundPrio >= chanPrio[3]) {
     996                actFilterHasLowerPrio = true;
     997        } else {
     998                /* TODO: is this really a no-op?
     999                if (minChanPrioIndex < chanPrio[3])
     1000                        minChanPrioIndex = minChanPrioIndex;
     1001                */
     1002
     1003                actFilterHasLowerPrio = false;
     1004        }
     1005}
     1006
     1007void Player_SID::releaseResourceBySound(int resID) { // $5088
     1008        var481A = 1;
     1009        releaseResource(resID);
     1010}
     1011
     1012void Player_SID::readVec6Data(int x, int *offset, uint8 *songFilePtr, int chanResID) { // $4E99
     1013        //vec5[x] = songFilePtr;
     1014        vec6[x] = songFilePtr[*offset];
     1015        *offset += 2;
     1016        _soundQueue[x] = chanResID;
     1017}
     1018
     1019int Player_SID::initSound(int soundResID) { // $4D0A
     1020        initializing = true;
     1021
     1022        if (isMusicPlaying && (statusBits1A & 0x07) == 0x07) {
     1023                initializing = false;
     1024                return -2;
     1025        }
     1026       
     1027        uint8 *songFilePtr = getResource(soundResID);
     1028        if (songFilePtr == NULL) {
     1029                initializing = false;
     1030                return 1;
     1031        }
     1032
     1033        uint8 soundPrio = songFilePtr[4];
     1034        // for (mostly but not always looped) background sounds
     1035        if (soundPrio == 1) {
     1036                bgSoundResID = soundResID;
     1037                bgSoundActive = true;
     1038        }
     1039
     1040        uint8 requestedChannels = 0;
     1041        if ((songFilePtr[5] & 0x40) == 0) {
     1042                ++requestedChannels;
     1043                if (songFilePtr[5] & 0x02)
     1044                        ++requestedChannels;
     1045                if (songFilePtr[5] & 0x08)
     1046                        ++requestedChannels;
     1047        }
     1048
     1049        bool filterNeeded = (songFilePtr[5] & 0x20) != 0;
     1050        bool filterBlocked = (filterUsed && filterNeeded);
     1051        if (filterBlocked || (freeChannelCount < requestedChannels))
     1052        {
     1053                findLessPrioChannels(soundPrio);
     1054
     1055                if ((freeChannelCount + chansWithLowerPrioCount < requestedChannels) ||
     1056                    (filterBlocked && !actFilterHasLowerPrio))
     1057                {
     1058                        initializing = false;
     1059                        return -1;
     1060                }
     1061
     1062                if (filterBlocked) {
     1063                        if (soundPrio < chanPrio[3]) {
     1064                                initializing = false;
     1065                                return -1;
     1066                        }
     1067
     1068                        uint8 l_resID = channelMap[3];
     1069                        releaseResourceBySound(l_resID);
     1070                }
     1071
     1072                while ((freeChannelCount < requestedChannels) || (filterNeeded && filterUsed))
     1073                {
     1074                        findLessPrioChannels(soundPrio);
     1075                        if (minChanPrio >= soundPrio) {
     1076                                initializing = false;
     1077                                return -1;
     1078                        }
     1079
     1080                        uint8 l_resID = channelMap[minChanPrioIndex];
     1081                        releaseResourceBySound(l_resID);
     1082                }
     1083        }
     1084
     1085        int x;
     1086        uint8 soundByte5 = songFilePtr[5];
     1087        if (soundByte5 & 0x40)
     1088                x = reserveSoundFilter(soundPrio, soundResID);
     1089        else
     1090                x = reserveSoundVoice(soundPrio, soundResID);
     1091       
     1092        uint8 var4CF3 = x;
     1093        int y = 6;
     1094        if (soundByte5 & 0x01) {
     1095                x += 4;
     1096                readVec6Data(x, &y, songFilePtr, soundResID);
     1097        }
     1098        if (soundByte5 & 0x02) {
     1099                x = reserveSoundVoice(soundPrio, soundResID);
     1100                readVec6Data(x, &y, songFilePtr, soundResID);
     1101        }
     1102        if (soundByte5 & 0x04) {
     1103                x += 4;
     1104                readVec6Data(x, &y, songFilePtr, soundResID);
     1105        }
     1106        if (soundByte5 & 0x08) {
     1107                x = reserveSoundVoice(soundPrio, soundResID);
     1108                readVec6Data(x, &y, songFilePtr, soundResID);
     1109        }
     1110        if (soundByte5 & 0x10) {
     1111                x += 4;
     1112                readVec6Data(x, &y, songFilePtr, soundResID);
     1113        }
     1114        if (soundByte5 & 0x20) {
     1115                x = reserveSoundFilter(soundPrio, soundResID);
     1116                readVec6Data(x, &y, songFilePtr, soundResID);
     1117        }
     1118
     1119        //vec5[var4CF3] = songFilePtr;
     1120        vec6[var4CF3] = y;
     1121        _soundQueue[var4CF3] = soundResID;
     1122
     1123        initializing = false;
     1124        _soundInQueue = true;
     1125
     1126        return soundResID;
     1127}
     1128
     1129void Player_SID::unused1() { // $50AF
     1130        var481A = -1;
     1131        if (bgSoundResID != 0) {
     1132                releaseResourceUnk(bgSoundResID);
     1133        }
     1134}
     1135
     1136///////////////////////////
     1137///////////////////////////
     1138
     1139#define ZEROMEM(a) memset(a, 0, sizeof(a))
     1140
     1141Player_SID::Player_SID(ScummEngine *scumm, Audio::Mixer *mixer) {
     1142        /*
     1143         * clear memory
     1144         */
     1145
     1146        resID_song = 0;
     1147        statusBits1A = 0;
     1148        statusBits1B = 0;
     1149        busyChannelBits = 0;
     1150        SIDReg23 = 0;
     1151        SIDReg23Stuff = 0;
     1152        SIDReg24 = 0;
     1153        bgSoundResID = 0;
     1154        freeChannelCount = 0;
     1155        usedChannelBits = 0;
     1156        var481A = 0;
     1157        songChannelBits = 0;
     1158        //var5163 = 0;
     1159        SIDReg24_HiNibble = 0;
     1160        chansWithLowerPrioCount = 0;
     1161        minChanPrio = 0;
     1162        minChanPrioIndex = 0;
     1163
     1164        _music = NULL;
     1165        songFileOrChanBufData = NULL;
     1166        actSongFileData = NULL;
     1167
     1168        initializing = false;
     1169        _soundInQueue = false;
     1170        isVoiceChannel = false;
     1171        isMusicPlaying = false;
     1172        swapVarLoaded = false;
     1173        bgSoundActive = false;
     1174        filterUsed = false;
     1175        pulseWidthSwapped = false;
     1176        swapPrepared = false;
     1177        filterSwapped = false;
     1178        keepSwapVars = false;
     1179        actFilterHasLowerPrio = false;
     1180
     1181        ZEROMEM(chanFileData);
     1182        ZEROMEM(chanDataOffset);
     1183        ZEROMEM(songPosPtr);
     1184        ZEROMEM(freqReg);
     1185        ZEROMEM(vec6);
     1186        ZEROMEM(songFileOrChanBufOffset);
     1187        ZEROMEM(freqDelta);
     1188        ZEROMEM(freqDeltaCounter);
     1189        ZEROMEM(swapSongPosPtr);
     1190        ZEROMEM(swapVec5);
     1191        ZEROMEM(swapVec8);
     1192        ZEROMEM(swapVec10);
     1193        ZEROMEM(swapFreqReg);
     1194        ZEROMEM(swapVec11);
     1195        ZEROMEM(vec20);
     1196        ZEROMEM(swapVec20);
     1197        ZEROMEM(resStatus);
     1198        ZEROMEM(attackReg);
     1199        ZEROMEM(sustainReg);
     1200        ZEROMEM(phaseBit);
     1201        ZEROMEM(releasePhase);
     1202        ZEROMEM(_soundQueue);
     1203        ZEROMEM(channelMap);
     1204        ZEROMEM(songPosUpdateCounter);
     1205        ZEROMEM(chanPrio);
     1206        ZEROMEM(waveCtrlReg);
     1207        ZEROMEM(swapAttack);
     1208        ZEROMEM(swapSustain);
     1209        ZEROMEM(swapSongPrio);
     1210        ZEROMEM(swapVec479C);
     1211        ZEROMEM(swapVec19);
     1212        ZEROMEM(swapSongPosUpdateCounter);
     1213        ZEROMEM(swapWaveCtrlReg);
     1214        ZEROMEM(stepTbl);
     1215
     1216        /*
     1217         * initialize data
     1218         */
     1219
     1220        const uint8 chanBuffer_const[3][45] = {{
     1221                0x00,0x00,0x00,0x00,0x7f,0x01,0x19,0x00,
     1222                0x00,0x00,0x2d,0x00,0x00,0x00,0x00,0x00,
     1223                0x00,0x00,0xf0,0x40,0x10,0x04,0x00,0x00,
     1224                0x00,0x04,0x27,0x03,0xff,0xff,0x01,0x00,
     1225                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
     1226                0x00,0x00,0x00,0x00,0x00
     1227        },{             
     1228                0x00,0x00,0x00,0x00,0x7f,0x01,0x19,0x00,
     1229                0x00,0x00,0x2d,0x00,0x00,0x00,0x00,0x00,
     1230                0x00,0x00,0xf0,0x20,0x10,0x04,0x00,0x00,
     1231                0x00,0x04,0x27,0x03,0xff,0xff,0x02,0x00,
     1232                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
     1233                0x00,0x00,0x00,0x00,0x00
     1234        },{                                             
     1235                0x00,0x00,0x00,0x00,0x7f,0x01,0x19,0x00,
     1236                0x00,0x00,0x2d,0x00,0x00,0x00,0x00,0x00,
     1237                0x00,0x00,0xf0,0x20,0x10,0x04,0x00,0x00,
     1238                0x00,0x04,0x27,0x03,0xff,0xff,0x02,0x00,
     1239                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
     1240                0x00,0x00,0x00,0x00,0x00
     1241        }};
     1242        memcpy(chanBuffer, chanBuffer_const, sizeof(chanBuffer_const));
     1243
     1244        for (int i = 0; i < 7; ++i) {
     1245                _soundQueue[i] = -1;
     1246        };
     1247
     1248        _music_timer = 0;
     1249
     1250        _mixer = mixer;
     1251        _sample_rate = _mixer->getOutputRate();
     1252        _vm = scumm;
     1253
     1254        // sound speed is slightly different on NTSC and PAL machines
     1255        // as the SID clock depends on the frame rate.
     1256        // ScummVM does not distinguish between NTSC and PAL targets
     1257        // so we use the NTSC timing here as the music was composed for
     1258        // NTSC systems (music on PAL systems is slower).
     1259        _videoSystem = NTSC;
     1260        _cpuCyclesLeft = 0;
     1261
     1262        initSID();
     1263        resetSID();
     1264
     1265        _mixer->playInputStream(Audio::Mixer::kPlainSoundType, &_soundHandle, this, -1, Audio::Mixer::kMaxChannelVolume, 0, false, true);
     1266}
     1267
     1268Player_SID::~Player_SID() {
     1269        _mixer->stopHandle(_soundHandle);
     1270        delete _sid;
     1271}
     1272
     1273uint8 *Player_SID::getResource(int resID) {
     1274        switch (resID) {
     1275                case 0:
     1276                        return NULL;
     1277                case 3:
     1278                case 4:
     1279                case 5:
     1280                        return  chanBuffer[resID-3];
     1281                default:
     1282                        return _vm->getResourceAddress(rtSound, resID);
     1283        }
     1284}
     1285
     1286int Player_SID::readBuffer(int16 *buffer, const int numSamples) {
     1287        int samplesLeft = numSamples;
     1288
     1289        _mutex.lock();
     1290
     1291        while (samplesLeft > 0) {
     1292                // update SID status after each frame
     1293                if (_cpuCyclesLeft <= 0) {
     1294                        update();
     1295                        _cpuCyclesLeft = timingProps[_videoSystem].cyclesPerFrame;
     1296                }
     1297                // fetch samples
     1298                int sampleCount = _sid->clock(_cpuCyclesLeft, (short*)buffer, samplesLeft);
     1299                samplesLeft -= sampleCount;
     1300                buffer += sampleCount;
     1301        }
     1302
     1303        _mutex.unlock();
     1304
     1305        return numSamples;
     1306}
     1307
     1308void Player_SID::SID_Write(int reg, uint8 data) {
     1309        _sid->write(reg, data);
     1310}
     1311
     1312void Player_SID::initSID() {
     1313        _sid = new Resid::SID();
     1314        _sid->set_sampling_parameters(
     1315                timingProps[_videoSystem].clockFreq,
     1316                _sample_rate);
     1317        _sid->enable_filter(true);
     1318
     1319        _sid->reset();
     1320        // Synchronize the waveform generators (must occur after reset)
     1321        _sid->write( 4, 0x08);
     1322        _sid->write(11, 0x08);
     1323        _sid->write(18, 0x08);
     1324        _sid->write( 4, 0x00);
     1325        _sid->write(11, 0x00);
     1326        _sid->write(18, 0x00);
     1327}
     1328
     1329void Player_SID::startSound(int nr) {
     1330        byte *data = _vm->getResourceAddress(rtSound, nr);
     1331        assert(data);
     1332
     1333        // WORKAROUND:
     1334        // sound[4] contains either a song prio or a music channel usage byte.
     1335        // As music channel usage is always 0x07 for all music files and
     1336        // prio 7 is never used in any sound file use this byte for auto-detection.
     1337        bool isMusic = (data[4] == 0x07);
     1338
     1339        _mutex.lock();
     1340
     1341        if (isMusic) {
     1342                initMusic(nr);
     1343        } else {
     1344                stopSound_intern(nr);
     1345                initSound(nr);
     1346        }
     1347       
     1348        _mutex.unlock();
     1349}
     1350
     1351void Player_SID::stopSound(int nr) {
     1352        if (nr == -1)
     1353                return;
     1354
     1355        _mutex.lock();
     1356        stopSound_intern(nr);
     1357        _mutex.unlock();
     1358}
     1359
     1360void Player_SID::stopAllSounds() {
     1361        _mutex.lock();
     1362        stopAllSounds_intern();
     1363        _mutex.unlock();
     1364}
     1365
     1366int Player_SID::getSoundStatus(int nr) const {
     1367        int result = 0;
     1368
     1369        //_mutex.lock();
     1370
     1371        if (resID_song == nr && isMusicPlaying) {
     1372                result = 1;
     1373        }
     1374
     1375        for (int i = 0; (i < 4) && (result == 0); ++i) {
     1376                if (nr == _soundQueue[i] ||
     1377                        nr == channelMap[i])
     1378                {
     1379                        result = 1;
     1380                }
     1381        }
     1382       
     1383        //_mutex.unlock();
     1384
     1385        return result;
     1386}
     1387
     1388int Player_SID::getMusicTimer() const {
     1389        int result = _music_timer;
     1390        // WORKAROUND: very, very dirty hack
     1391        *((int*)&_music_timer) = 0;
     1392        return result;
     1393}
     1394
     1395} // End of namespace Scumm
  • engines/scumm/player_sid.h

     
     1/* ScummVM - Graphic Adventure Engine
     2 *
     3 * ScummVM is the legal property of its developers, whose names
     4 * are too numerous to list here. Please refer to the COPYRIGHT
     5 * file distributed with this source distribution.
     6 *
     7 * This program is free software; you can redistribute it and/or
     8 * modify it under the terms of the GNU General Public License
     9 * as published by the Free Software Foundation; either version 2
     10 * of the License, or (at your option) any later version.
     11
     12 * This program is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16
     17 * You should have received a copy of the GNU General Public License
     18 * along with this program; if not, write to the Free Software
     19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     20 *
     21 * $URL: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk/engines/scumm/actor.cpp $
     22 * $Id: actor.cpp 45438 2009-10-27 12:08:19Z Kirben $
     23 *
     24 */
     25
     26#ifndef SCUMM_PLAYER_SID_H
     27#define SCUMM_PLAYER_SID_H
     28
     29#include "common/scummsys.h"
     30#include "scumm/music.h"
     31#include "sound/audiostream.h"
     32#include "sound/mixer.h"
     33#include "common/mutex.h"
     34#include "sound/softsynth/sid.h"
     35
     36namespace Scumm {
     37
     38// the "channel" parameters seem to be in fact SID register
     39// offsets. Should be replaced.
     40enum sid_reg_t {
     41        FREQ_VOICE1,
     42        FREQ_VOICE2,
     43        FREQ_VOICE3,
     44        FREQ_FILTER,
     45        PULSE_VOICE1,
     46        PULSE_VOICE2,
     47        PULSE_VOICE3
     48};
     49
     50enum VideoStandard {
     51        PAL,
     52        NTSC
     53};
     54
     55class ScummEngine;
     56
     57class Player_SID : public Audio::AudioStream, public MusicEngine {
     58public:
     59        Player_SID(ScummEngine *scumm, Audio::Mixer *mixer);
     60        virtual ~Player_SID();
     61
     62        virtual void setMusicVolume(int vol) { _maxvol = vol; };
     63        void startMusic(int songResIndex);
     64        virtual void startSound(int sound);
     65        virtual void stopSound(int sound);
     66        virtual void stopAllSounds();
     67        virtual int  getSoundStatus(int sound) const;
     68        virtual int  getMusicTimer() const;
     69
     70        // AudioStream API
     71        int readBuffer(int16 *buffer, const int numSamples);
     72        bool isStereo() const { return false; }
     73        bool endOfData() const { return false; }
     74        int getRate() const { return _sample_rate; }
     75
     76private:
     77        Resid::SID *_sid;
     78        void SID_Write(int reg, uint8 data);
     79        void initSID();
     80        uint8 *getResource(int resID);
     81
     82        // number of cpu cycles until next frame update
     83        Resid::cycle_count _cpuCyclesLeft;
     84
     85        ScummEngine *_vm;
     86        Audio::Mixer *_mixer;
     87        Audio::SoundHandle _soundHandle;
     88        int _sample_rate;
     89        int _maxvol;
     90        Common::Mutex _mutex;
     91
     92        VideoStandard _videoSystem;
     93
     94        int _music_timer;
     95        uint8* _music;
     96
     97private:
     98        void initMusic(int songResIndex); // $7de6
     99        int initSound(int soundResID); // $4D0A
     100        void stopSound_intern(int soundResID); // $5093
     101        void stopAllSounds_intern(); // $4CAA
     102
     103        void resetSID(); // $48D8
     104        void update(); // $481B
     105        void handleMusicBuffer();
     106        int setupSongFileData(); // $36cb
     107        void func_3674(int channel); // $3674
     108        void resetPlayerState(); // $48f7
     109        void processSongData(int channel); // $4939
     110        void readSetSIDFilterAndProps(int *offset, uint8* dataPtr);  // $49e7
     111        void saveSongPos(int y, int channel);
     112        void updateFreq(int channel);
     113        void resetFreqDelta(int channel);
     114        void readSongChunk(int channel); // $4a6b
     115        void setSIDFreqAS(int channel); // $4be6
     116        void setSIDWaveCtrlReg(int channel); // $4C0D
     117        int setupSongPtr(int channel); // $4C1C
     118        void unlockResource(int chanResIndex); // $4CDA
     119        void countFreeChannels(); // $4f26
     120        void func_4F45(int channel); // $4F45
     121        void safeUnlockResource(int resIndex); // $4FEA
     122        void releaseResource(int resIndex); // $5031
     123        void releaseResChannels(int resIndex); // $5070
     124        void releaseResourceUnk(int resIndex); // $50A4
     125        void releaseChannel(int channel);
     126        void clearSIDWaveform(int channel);
     127        void stopChannel(int channel);
     128        void swapVars(int channel, int swapIndex); // $51a5
     129        void resetSwapVars(); // $52d0
     130        void prepareSwapVars(int channel); // $52E5
     131        void useSwapVars(int channel); // $5342
     132        void lockResource(int resIndex); // $4ff4
     133        void reserveChannel(int channel, uint8 prioValue, int chanResIndex); // $4ffe
     134        void unlockCodeLocation(); // $513e
     135        void lockCodeLocation(); // $514f
     136        void func_7eae(int channel, uint8* songFileDataPtr); // $7eae
     137        void func_819b(int channel); // $819b
     138        void buildStepTbl(int step); // $82B4
     139        int reserveSoundFilter(uint8 value, uint8 chanResIndex); // $4ED0
     140        int reserveSoundVoice(uint8 value, uint8 chanResIndex); // $4EB8
     141        void findLessPrioChannels(uint8 soundPrio); // $4ED8
     142        void releaseResourceBySound(int resID); // $5088
     143        void readVec6Data(int x, int *offset, uint8 *songFilePtr, int chanResID); // $4E99
     144
     145        void unused1(); // $50AF
     146
     147        uint8 chanBuffer[3][45];
     148
     149        int resID_song;
     150
     151        // statusBits1A/1B are always equal
     152        uint8 statusBits1A;
     153        uint8 statusBits1B;
     154
     155        uint8 busyChannelBits;
     156
     157        uint8 SIDReg23;
     158        uint8 SIDReg23Stuff;
     159        uint8 SIDReg24;
     160
     161        uint8* chanFileData[3];
     162        uint16 chanDataOffset[3];
     163        uint8* songPosPtr[7];
     164
     165        // 0..2: freq value voice1/2/3
     166        // 3:    filter freq
     167        // 4..6: pulse width
     168        uint16 freqReg[7];
     169
     170        // start offset[i] for songFileOrChanBufData to obtain songPosPtr[i]
     171        //      vec6[0..2] = 0x0008;
     172        //      vec6[4..6] = 0x0019;
     173        uint16 vec6[7];
     174
     175        // current offset[i] for songFileOrChanBufData to obtain songPosPtr[i] (starts with vec6[i], increased later)
     176        uint16 songFileOrChanBufOffset[7];
     177
     178        uint16 freqDelta[7];
     179        int freqDeltaCounter[7];
     180        uint8* swapSongPosPtr[3];
     181        uint8* swapVec5[3];
     182        uint16 swapVec8[3];
     183        uint16 swapVec10[3];
     184        uint16 swapFreqReg[3];
     185        int swapVec11[3];
     186
     187        // never read
     188        //uint8* vec5[7];
     189        // never read
     190        //uint8 vec19[7];
     191        // never read (needed by scumm engine?)
     192        //bool curChannelActive;       
     193
     194        uint8* vec20[7];
     195
     196        uint8* swapVec20[3];
     197
     198        // resource status (never read)
     199        // bit7: some flag
     200        // bit6..0: counter (use-count?), maybe just bit0 as flag (used/unused?)
     201        uint8 resStatus[70];
     202
     203        uint8* songFileOrChanBufData;
     204        uint8* actSongFileData;
     205
     206        uint16 stepTbl[33];
     207
     208        bool initializing;
     209        bool _soundInQueue;
     210        bool isVoiceChannel;
     211
     212        bool isMusicPlaying;
     213        bool swapVarLoaded;
     214        bool bgSoundActive;
     215        bool filterUsed;
     216
     217        uint8 bgSoundResID;
     218        uint8 freeChannelCount;
     219
     220        // seems to be used for managing the three voices
     221        // bit[0..2]: 0 -> unused, 1 -> already in use
     222        uint8 usedChannelBits;
     223        uint8 attackReg[3];
     224        uint8 sustainReg[3];
     225
     226        // -1/0/1
     227        int var481A;
     228
     229        // bit-array: 00000cba
     230        // a/b/c: channel1/2/3
     231        uint8 songChannelBits;
     232
     233        bool pulseWidthSwapped;
     234        bool swapPrepared;
     235       
     236        // never read
     237        //uint8 var5163;
     238       
     239        bool filterSwapped;
     240        uint8 SIDReg24_HiNibble;
     241        bool keepSwapVars;
     242
     243        uint8 phaseBit[3];
     244        bool releasePhase[3];
     245
     246        // values: a resID or -1
     247        // resIDs: 3, 4, 5 or song-number
     248        int _soundQueue[7];
     249
     250        // values: a resID or 0
     251        // resIDs: 3, 4, 5 or song-number
     252        int channelMap[7];
     253
     254        uint8 songPosUpdateCounter[7];
     255
     256        // priortity of channel contents
     257        // MM:  1: lowest .. 120: highest (1,2,A,64,6E,73,78)
     258        // Zak: -???: lowest .. 120: highest (5,32,64,65,66,6E,78, A5,A6,AF,D7)
     259        uint8 chanPrio[7];
     260
     261        // only [0..2] used?
     262        uint8 waveCtrlReg[7];
     263
     264        uint8 swapAttack[2];
     265        uint8 swapSustain[2];
     266        uint8 swapSongPrio[3];
     267        int swapVec479C[3];
     268        uint8 swapVec19[3];
     269        uint8 swapSongPosUpdateCounter[3];
     270        uint8 swapWaveCtrlReg[3];
     271
     272        bool actFilterHasLowerPrio;
     273        uint8 chansWithLowerPrioCount;
     274        uint8 minChanPrio;
     275        uint8 minChanPrioIndex;
     276};
     277
     278} // End of namespace Scumm
     279
     280#endif
  • engines/scumm/scumm.cpp

     
    5252#include "scumm/he/sound_he.h"
    5353#include "scumm/object.h"
    5454#include "scumm/player_nes.h"
     55#include "scumm/player_sid.h"
    5556#include "scumm/player_pce.h"
    5657#include "scumm/player_v1.h"
    5758#include "scumm/player_v2.h"
     
    17191720        } else if (_game.platform == Common::kPlatformApple2GS && _game.version == 0){
    17201721                // TODO: Add support for music format
    17211722        } else if (_game.platform == Common::kPlatformC64 && _game.version <= 1) {
    1722                 // TODO: Add support for music format
     1723                _musicEngine = new Player_SID(this, _mixer);
    17231724        } else if (_game.platform == Common::kPlatformNES && _game.version == 1) {
    17241725                _musicEngine = new Player_NES(this, _mixer);
    17251726        } else if (_game.platform == Common::kPlatformAmiga && _game.version == 2) {
  • sound/softsynth/sid.cpp

     
     1/* ScummVM - Graphic Adventure Engine
     2 *
     3 * ScummVM is the legal property of its developers, whose names
     4 * are too numerous to list here. Please refer to the COPYRIGHT
     5 * file distributed with this source distribution.
     6 *
     7 * This program is free software; you can redistribute it and/or
     8 * modify it under the terms of the GNU General Public License
     9 * as published by the Free Software Foundation; either version 2
     10 * of the License, or (at your option) any later version.
     11
     12 * This program is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16
     17 * You should have received a copy of the GNU General Public License
     18 * along with this program; if not, write to the Free Software
     19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     20 *
     21 * $URL: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk/engines/scumm/actor.cpp $
     22 * $Id: actor.cpp 45438 2009-10-27 12:08:19Z Kirben $
     23 *
     24 */
     25
     26/*
     27 *  This file is based on reSID, a MOS6581 SID emulator engine.
     28 *  Copyright (C) 2004  Dag Lem <resid@nimrod.no>
     29 */
     30
     31#include "sid.h"
     32#include <math.h>
     33
     34namespace Resid {
     35
     36// Fixpoint constants (16.16 bits).
     37const int SID::FIXP_SHIFT = 16;
     38const int SID::FIXP_MASK = 0xffff;
     39
     40/*
     41 * WaveformGenerator
     42 */
     43
     44WaveformGenerator::WaveformGenerator() {
     45        sync_source = this;
     46
     47        wave__ST = wave6581__ST;
     48        wave_P_T = wave6581_P_T;
     49        wave_PS_ = wave6581_PS_;
     50        wave_PST = wave6581_PST;
     51
     52        reset();
     53}
     54
     55void WaveformGenerator::set_sync_source(WaveformGenerator* source) {
     56        sync_source = source;
     57        source->sync_dest = this;
     58}
     59
     60void WaveformGenerator::writeFREQ_LO(reg8 freq_lo) {
     61        freq = freq & 0xff00 | freq_lo & 0x00ff;
     62}
     63
     64void WaveformGenerator::writeFREQ_HI(reg8 freq_hi) {
     65        freq = (freq_hi << 8) & 0xff00 | freq & 0x00ff;
     66}
     67
     68void WaveformGenerator::writePW_LO(reg8 pw_lo) {
     69        pw = pw & 0xf00 | pw_lo & 0x0ff;
     70}
     71
     72void WaveformGenerator::writePW_HI(reg8 pw_hi) {
     73        pw = (pw_hi << 8) & 0xf00 | pw & 0x0ff;
     74}
     75
     76void WaveformGenerator::writeCONTROL_REG(reg8 control) {
     77        waveform = (control >> 4) & 0x0f;
     78        ring_mod = control & 0x04;
     79        sync = control & 0x02;
     80
     81        reg8 test_next = control & 0x08;
     82
     83        // Test bit set.
     84        if (test_next) {
     85                accumulator = 0;
     86                shift_register = 0;
     87        }
     88        // Test bit cleared.
     89        else if (test) {
     90                shift_register = 0x7ffff8;
     91        }
     92
     93        test = test_next;
     94
     95        // The gate bit is handled by the EnvelopeGenerator.
     96}
     97
     98reg8 WaveformGenerator::readOSC() {
     99        return output() >> 4;
     100}
     101
     102void WaveformGenerator::reset() {
     103        accumulator = 0;
     104        shift_register = 0x7ffff8;
     105        freq = 0;
     106        pw = 0;
     107
     108        test = 0;
     109        ring_mod = 0;
     110        sync = 0;
     111
     112        msb_rising = false;
     113}
     114
     115RESID_INLINE void WaveformGenerator::clock(cycle_count delta_t) {
     116        // No operation if test bit is set.
     117        if (test) {
     118                return;
     119        }
     120
     121        reg24 accumulator_prev = accumulator;
     122
     123        // Calculate new accumulator value;
     124        reg24 delta_accumulator = delta_t*freq;
     125        accumulator += delta_accumulator;
     126        accumulator &= 0xffffff;
     127
     128        // Check whether the MSB is set high. This is used for synchronization.
     129        msb_rising = !(accumulator_prev & 0x800000) && (accumulator & 0x800000);
     130
     131        // Shift noise register once for each time accumulator bit 19 is set high.
     132        // Bit 19 is set high each time 2^20 (0x100000) is added to the accumulator.
     133        reg24 shift_period = 0x100000;
     134
     135        while (delta_accumulator) {
     136                if (delta_accumulator < shift_period) {
     137                        shift_period = delta_accumulator;
     138                        // Determine whether bit 19 is set on the last period.
     139                        // NB! Requires two's complement integer.
     140                        if (shift_period <= 0x080000) {
     141                                // Check for flip from 0 to 1.
     142                                if (((accumulator - shift_period) & 0x080000) || !(accumulator & 0x080000))
     143                                {
     144                                        break;
     145                                }
     146                        }
     147                        else {
     148                                // Check for flip from 0 (to 1 or via 1 to 0) or from 1 via 0 to 1.
     149                                if (((accumulator - shift_period) & 0x080000) && !(accumulator & 0x080000))
     150                                {
     151                                        break;
     152                                }
     153                        }
     154                }
     155
     156                // Shift the noise/random register.
     157                // NB! The shift is actually delayed 2 cycles, this is not modeled.
     158                reg24 bit0 = ((shift_register >> 22) ^ (shift_register >> 17)) & 0x1;
     159                shift_register <<= 1;
     160                shift_register &= 0x7fffff;
     161                shift_register |= bit0;
     162
     163                delta_accumulator -= shift_period;
     164        }
     165}
     166
     167
     168/**
     169 * Synchronize oscillators.
     170 * This must be done after all the oscillators have been clock()'ed since the
     171 * oscillators operate in parallel.
     172 * Note that the oscillators must be clocked exactly on the cycle when the
     173 * MSB is set high for hard sync to operate correctly. See SID::clock().
     174 */
     175RESID_INLINE void WaveformGenerator::synchronize() {
     176        // A special case occurs when a sync source is synced itself on the same
     177        // cycle as when its MSB is set high. In this case the destination will
     178        // not be synced. This has been verified by sampling OSC3.
     179        if (msb_rising && sync_dest->sync && !(sync && sync_source->msb_rising)) {
     180                sync_dest->accumulator = 0;
     181        }
     182}
     183
     184
     185/*
     186 * Output functions
     187 */
     188
     189// No waveform: Zero output.
     190RESID_INLINE reg12 WaveformGenerator::output____() {
     191        return 0x000;
     192}
     193
     194// Triangle:
     195RESID_INLINE reg12 WaveformGenerator::output___T() {
     196        reg24 msb = (ring_mod ? accumulator ^ sync_source->accumulator : accumulator)
     197                & 0x800000;
     198        return ((msb ? ~accumulator : accumulator) >> 11) & 0xfff;
     199}
     200
     201// Sawtooth:
     202RESID_INLINE reg12 WaveformGenerator::output__S_() {
     203        return accumulator >> 12;
     204}
     205
     206// Pulse:
     207RESID_INLINE reg12 WaveformGenerator::output_P__() {
     208        return (test || (accumulator >> 12) >= pw) ? 0xfff : 0x000;
     209}
     210
     211// Noise:
     212RESID_INLINE reg12 WaveformGenerator::outputN___() {
     213        return
     214                ((shift_register & 0x400000) >> 11) |
     215                ((shift_register & 0x100000) >> 10) |
     216                ((shift_register & 0x010000) >> 7) |
     217                ((shift_register & 0x002000) >> 5) |
     218                ((shift_register & 0x000800) >> 4) |
     219                ((shift_register & 0x000080) >> 1) |
     220                ((shift_register & 0x000010) << 1) |
     221                ((shift_register & 0x000004) << 2);
     222}
     223
     224// Combined waveforms:
     225
     226RESID_INLINE reg12 WaveformGenerator::output__ST() {
     227        return wave__ST[output__S_()] << 4;
     228}
     229
     230RESID_INLINE reg12 WaveformGenerator::output_P_T() {
     231        return (wave_P_T[output___T() >> 1] << 4) & output_P__();
     232}
     233
     234RESID_INLINE reg12 WaveformGenerator::output_PS_() {
     235        return (wave_PS_[output__S_()] << 4) & output_P__();
     236}
     237
     238RESID_INLINE reg12 WaveformGenerator::output_PST() {
     239        return (wave_PST[output__S_()] << 4) & output_P__();
     240}
     241
     242// Combined waveforms including noise:
     243
     244RESID_INLINE reg12 WaveformGenerator::outputN__T() {
     245        return 0;
     246}
     247
     248RESID_INLINE reg12 WaveformGenerator::outputN_S_() {
     249        return 0;
     250}
     251
     252RESID_INLINE reg12 WaveformGenerator::outputN_ST() {
     253        return 0;
     254}
     255
     256RESID_INLINE reg12 WaveformGenerator::outputNP__() {
     257        return 0;
     258}
     259
     260RESID_INLINE reg12 WaveformGenerator::outputNP_T() {
     261        return 0;
     262}
     263
     264RESID_INLINE reg12 WaveformGenerator::outputNPS_() {
     265        return 0;
     266}
     267
     268RESID_INLINE reg12 WaveformGenerator::outputNPST() {
     269        return 0;
     270}
     271
     272/**
     273 * Select one of 16 possible combinations of waveforms.
     274 */
     275RESID_INLINE reg12 WaveformGenerator::output() {
     276        // It may seem cleaner to use an array of member functions to return
     277        // waveform output; however a switch with inline functions is faster.
     278
     279        switch (waveform) {
     280        default:
     281        case 0x0:
     282                return output____();
     283        case 0x1:
     284                return output___T();
     285        case 0x2:
     286                return output__S_();
     287        case 0x3:
     288                return output__ST();
     289        case 0x4:
     290                return output_P__();
     291        case 0x5:
     292                return output_P_T();
     293        case 0x6:
     294                return output_PS_();
     295        case 0x7:
     296                return output_PST();
     297        case 0x8:
     298                return outputN___();
     299        case 0x9:
     300                return outputN__T();
     301        case 0xa:
     302                return outputN_S_();
     303        case 0xb:
     304                return outputN_ST();
     305        case 0xc:
     306                return outputNP__();
     307        case 0xd:
     308                return outputNP_T();
     309        case 0xe:
     310                return outputNPS_();
     311        case 0xf:
     312                return outputNPST();
     313        }
     314}
     315
     316/*
     317 * Our objective is to construct a smooth interpolating single-valued function
     318 * y = f(x).
     319 * Our approach is to approximate the properties of Catmull-Rom splines for
     320 * piecewice cubic polynomials.
     321 */
     322
     323/**
     324 * Calculation of coefficients.
     325 */
     326inline void cubic_coefficients(double x1, double y1, double x2, double y2,
     327                                                double k1, double k2,
     328                                                double& a, double& b, double& c, double& d)
     329{
     330        double dx = x2 - x1, dy = y2 - y1;
     331
     332        a = ((k1 + k2) - 2*dy/dx)/(dx*dx);
     333        b = ((k2 - k1)/dx - 3*(x1 + x2)*a)/2;
     334        c = k1 - (3*x1*a + 2*b)*x1;
     335        d = y1 - ((x1*a + b)*x1 + c)*x1;
     336}
     337
     338/**
     339 * Evaluation of cubic polynomial by forward differencing.
     340 */
     341template<class PointPlotter>
     342inline void interpolate_segment(double x1, double y1, double x2, double y2,
     343                                                                double k1, double k2,
     344                                                                PointPlotter plot, double res)
     345{
     346        double a, b, c, d;
     347        cubic_coefficients(x1, y1, x2, y2, k1, k2, a, b, c, d);
     348
     349        double y = ((a*x1 + b)*x1 + c)*x1 + d;
     350        double dy = (3*a*(x1 + res) + 2*b)*x1*res + ((a*res + b)*res + c)*res;
     351        double d2y = (6*a*(x1 + res) + 2*b)*res*res;
     352        double d3y = 6*a*res*res*res;
     353
     354        // Calculate each point.
     355        for (double x = x1; x <= x2; x += res) {
     356                plot(x, y);
     357                y += dy; dy += d2y; d2y += d3y;
     358        }
     359}
     360
     361template<class PointIter>
     362inline double x(PointIter p) {
     363        return (*p)[0];
     364}
     365
     366template<class PointIter>
     367inline double y(PointIter p) {
     368        return (*p)[1];
     369}
     370
     371/**
     372 * Evaluation of complete interpolating function.
     373 * Note that since each curve segment is controlled by four points, the
     374 * end points will not be interpolated. If extra control points are not
     375 * desirable, the end points can simply be repeated to ensure interpolation.
     376 * Note also that points of non-differentiability and discontinuity can be
     377 * introduced by repeating points.
     378 */
     379template<class PointIter, class PointPlotter>
     380inline void interpolate(PointIter p0, PointIter pn, PointPlotter plot, double res) {
     381        double k1, k2;
     382
     383        // Set up points for first curve segment.
     384        PointIter p1 = p0; ++p1;
     385        PointIter p2 = p1; ++p2;
     386        PointIter p3 = p2; ++p3;
     387
     388        // Draw each curve segment.
     389        for (; p2 != pn; ++p0, ++p1, ++p2, ++p3) {
     390                // p1 and p2 equal; single point.
     391                if (x(p1) == x(p2)) {
     392                        continue;
     393                }
     394                // Both end points repeated; straight line.
     395                if (x(p0) == x(p1) && x(p2) == x(p3)) {
     396                        k1 = k2 = (y(p2) - y(p1))/(x(p2) - x(p1));
     397                }
     398                // p0 and p1 equal; use f''(x1) = 0.
     399                else if (x(p0) == x(p1)) {
     400                        k2 = (y(p3) - y(p1))/(x(p3) - x(p1));
     401                        k1 = (3*(y(p2) - y(p1))/(x(p2) - x(p1)) - k2)/2;
     402                }
     403                // p2 and p3 equal; use f''(x2) = 0.
     404                else if (x(p2) == x(p3)) {
     405                        k1 = (y(p2) - y(p0))/(x(p2) - x(p0));
     406                        k2 = (3*(y(p2) - y(p1))/(x(p2) - x(p1)) - k1)/2;
     407                }
     408                // Normal curve.
     409                else {
     410                        k1 = (y(p2) - y(p0))/(x(p2) - x(p0));
     411                        k2 = (y(p3) - y(p1))/(x(p3) - x(p1));
     412                }
     413
     414                interpolate_segment(x(p1), y(p1), x(p2), y(p2), k1, k2, plot, res);
     415        }
     416}
     417
     418/**
     419 * Class for plotting integers into an array.
     420 */
     421template<class F>
     422class PointPlotter {
     423protected:
     424        F* f;
     425
     426public:
     427        PointPlotter(F* arr) : f(arr) {
     428        }
     429
     430        void operator ()(double x, double y) {
     431                // Clamp negative values to zero.
     432                if (y < 0) {
     433                        y = 0;
     434                }
     435
     436                f[F(x)] = F(y);
     437        }
     438};
     439
     440fc_point Filter::f0_points_6581[] = {
     441        //  FC      f         FCHI FCLO
     442        // ----------------------------
     443        {    0,   220 },   // 0x00      - repeated end point
     444        {    0,   220 },   // 0x00
     445        {  128,   230 },   // 0x10
     446        {  256,   250 },   // 0x20
     447        {  384,   300 },   // 0x30
     448        {  512,   420 },   // 0x40
     449        {  640,   780 },   // 0x50
     450        {  768,  1600 },   // 0x60
     451        {  832,  2300 },   // 0x68
     452        {  896,  3200 },   // 0x70
     453        {  960,  4300 },   // 0x78
     454        {  992,  5000 },   // 0x7c
     455        { 1008,  5400 },   // 0x7e
     456        { 1016,  5700 },   // 0x7f
     457        { 1023,  6000 },   // 0x7f 0x07
     458        { 1023,  6000 },   // 0x7f 0x07 - discontinuity
     459        { 1024,  4600 },   // 0x80      -
     460        { 1024,  4600 },   // 0x80
     461        { 1032,  4800 },   // 0x81
     462        { 1056,  5300 },   // 0x84
     463        { 1088,  6000 },   // 0x88
     464        { 1120,  6600 },   // 0x8c
     465        { 1152,  7200 },   // 0x90
     466        { 1280,  9500 },   // 0xa0
     467        { 1408, 12000 },   // 0xb0
     468        { 1536, 14500 },   // 0xc0
     469        { 1664, 16000 },   // 0xd0
     470        { 1792, 17100 },   // 0xe0
     471        { 1920, 17700 },   // 0xf0
     472        { 2047, 18000 },   // 0xff 0x07
     473        { 2047, 18000 }    // 0xff 0x07 - repeated end point
     474};
     475
     476
     477/*
     478 * Filter
     479 */
     480
     481Filter::Filter() {
     482        fc = 0;
     483
     484        res = 0;
     485
     486        filt = 0;
     487
     488        voice3off = 0;
     489
     490        hp_bp_lp = 0;
     491
     492        vol = 0;
     493
     494        // State of filter.
     495        Vhp = 0;
     496        Vbp = 0;
     497        Vlp = 0;
     498        Vnf = 0;
     499
     500        enable_filter(true);
     501
     502        // Create mappings from FC to cutoff frequency.
     503        interpolate(f0_points_6581, f0_points_6581
     504                + sizeof(f0_points_6581)/sizeof(*f0_points_6581) - 1,
     505                PointPlotter<sound_sample>(f0_6581), 1.0);
     506
     507        mixer_DC = -0xfff*0xff/18 >> 7;
     508
     509        f0 = f0_6581;
     510        f0_points = f0_points_6581;
     511        f0_count = sizeof(f0_points_6581)/sizeof(*f0_points_6581);
     512
     513        set_w0();
     514        set_Q();
     515}
     516
     517void Filter::enable_filter(bool enable) {
     518        enabled = enable;
     519}
     520
     521void Filter::reset(){
     522        fc = 0;
     523
     524        res = 0;
     525
     526        filt = 0;
     527
     528        voice3off = 0;
     529
     530        hp_bp_lp = 0;
     531
     532        vol = 0;
     533
     534        // State of filter.
     535        Vhp = 0;
     536        Vbp = 0;
     537        Vlp = 0;
     538        Vnf = 0;
     539
     540        set_w0();
     541        set_Q();
     542}
     543
     544void Filter::writeFC_LO(reg8 fc_lo) {
     545        fc = fc & 0x7f8 | fc_lo & 0x007;
     546        set_w0();
     547}
     548
     549void Filter::writeFC_HI(reg8 fc_hi) {
     550        fc = (fc_hi << 3) & 0x7f8 | fc & 0x007;
     551        set_w0();
     552}
     553
     554void Filter::writeRES_FILT(reg8 res_filt) {
     555        res = (res_filt >> 4) & 0x0f;
     556        set_Q();
     557
     558        filt = res_filt & 0x0f;
     559}
     560
     561void Filter::writeMODE_VOL(reg8 mode_vol) {
     562        voice3off = mode_vol & 0x80;
     563
     564        hp_bp_lp = (mode_vol >> 4) & 0x07;
     565
     566        vol = mode_vol & 0x0f;
     567}
     568
     569// Set filter cutoff frequency.
     570void Filter::set_w0() {
     571        const double pi = 3.1415926535897932385;
     572
     573        // Multiply with 1.048576 to facilitate division by 1 000 000 by right-
     574        // shifting 20 times (2 ^ 20 = 1048576).
     575        w0 = static_cast<sound_sample>(2*pi*f0[fc]*1.048576);
     576
     577        // Limit f0 to 16kHz to keep 1 cycle filter stable.
     578        const sound_sample w0_max_1 = static_cast<sound_sample>(2*pi*16000*1.048576);
     579        w0_ceil_1 = w0 <= w0_max_1 ? w0 : w0_max_1;
     580
     581        // Limit f0 to 4kHz to keep delta_t cycle filter stable.
     582        const sound_sample w0_max_dt = static_cast<sound_sample>(2*pi*4000*1.048576);
     583        w0_ceil_dt = w0 <= w0_max_dt ? w0 : w0_max_dt;
     584}
     585
     586// Set filter resonance.
     587void Filter::set_Q() {
     588        // Q is controlled linearly by res. Q has approximate range [0.707, 1.7].
     589        // As resonance is increased, the filter must be clocked more often to keep
     590        // stable.
     591
     592        // The coefficient 1024 is dispensed of later by right-shifting 10 times
     593        // (2 ^ 10 = 1024).
     594        _1024_div_Q = static_cast<sound_sample>(1024.0/(0.707 + 1.0*res/0x0f));
     595}
     596
     597RESID_INLINE void Filter::clock(cycle_count delta_t,
     598                                   sound_sample voice1,
     599                                   sound_sample voice2,
     600                                   sound_sample voice3)
     601{
     602        // Scale each voice down from 20 to 13 bits.
     603        voice1 >>= 7;
     604        voice2 >>= 7;
     605
     606        // NB! Voice 3 is not silenced by voice3off if it is routed through
     607        // the filter.
     608        if (voice3off && !(filt & 0x04)) {
     609                voice3 = 0;
     610        }
     611        else {
     612                voice3 >>= 7;
     613        }
     614
     615        // Enable filter on/off.
     616        // This is not really part of SID, but is useful for testing.
     617        // On slow CPUs it may be necessary to bypass the filter to lower the CPU
     618        // load.
     619        if (!enabled) {
     620                Vnf = voice1 + voice2 + voice3;
     621                Vhp = Vbp = Vlp = 0;
     622                return;
     623        }
     624
     625        // Route voices into or around filter.
     626        // The code below is expanded to a switch for faster execution.
     627        // (filt1 ? Vi : Vnf) += voice1;
     628        // (filt2 ? Vi : Vnf) += voice2;
     629        // (filt3 ? Vi : Vnf) += voice3;
     630
     631        sound_sample Vi;
     632
     633        switch (filt) {
     634        default:
     635        case 0x0:
     636                Vi = 0;
     637                Vnf = voice1 + voice2 + voice3;
     638                break;
     639        case 0x1:
     640                Vi = voice1;
     641                Vnf = voice2 + voice3;
     642                break;
     643        case 0x2:
     644                Vi = voice2;
     645                Vnf = voice1 + voice3;
     646                break;
     647        case 0x3:
     648                Vi = voice1 + voice2;
     649                Vnf = voice3;
     650                break;
     651        case 0x4:
     652                Vi = voice3;
     653                Vnf = voice1 + voice2;
     654                break;
     655        case 0x5:
     656                Vi = voice1 + voice3;
     657                Vnf = voice2;
     658                break;
     659        case 0x6:
     660                Vi = voice2 + voice3;
     661                Vnf = voice1;
     662                break;
     663        case 0x7:
     664                Vi = voice1 + voice2 + voice3;
     665                Vnf = 0;
     666                break;
     667        case 0x8:
     668                Vi = 0;
     669                Vnf = voice1 + voice2 + voice3;
     670                break;
     671        case 0x9:
     672                Vi = voice1;
     673                Vnf = voice2 + voice3;
     674                break;
     675        case 0xa:
     676                Vi = voice2;
     677                Vnf = voice1 + voice3;
     678                break;
     679        case 0xb:
     680                Vi = voice1 + voice2;
     681                Vnf = voice3;
     682                break;
     683        case 0xc:
     684                Vi = voice3;
     685                Vnf = voice1 + voice2;
     686                break;
     687        case 0xd:
     688                Vi = voice1 + voice3;
     689                Vnf = voice2;
     690                break;
     691        case 0xe:
     692                Vi = voice2 + voice3;
     693                Vnf = voice1;
     694                break;
     695        case 0xf:
     696                Vi = voice1 + voice2 + voice3;
     697                Vnf = 0;
     698                break;
     699        }
     700
     701        // Maximum delta cycles for the filter to work satisfactorily under current
     702        // cutoff frequency and resonance constraints is approximately 8.
     703        cycle_count delta_t_flt = 8;
     704
     705        while (delta_t) {
     706                if (delta_t < delta_t_flt) {
     707                        delta_t_flt = delta_t;
     708                }
     709
     710                // delta_t is converted to seconds given a 1MHz clock by dividing
     711                // with 1 000 000. This is done in two operations to avoid integer
     712                // multiplication overflow.
     713
     714                // Calculate filter outputs.
     715                // Vhp = Vbp/Q - Vlp - Vi;
     716                // dVbp = -w0*Vhp*dt;
     717                // dVlp = -w0*Vbp*dt;
     718                sound_sample w0_delta_t = w0_ceil_dt*delta_t_flt >> 6;
     719
     720                sound_sample dVbp = (w0_delta_t*Vhp >> 14);
     721                sound_sample dVlp = (w0_delta_t*Vbp >> 14);
     722                Vbp -= dVbp;
     723                Vlp -= dVlp;
     724                Vhp = (Vbp*_1024_div_Q >> 10) - Vlp - Vi;
     725
     726                delta_t -= delta_t_flt;
     727        }
     728}
     729
     730RESID_INLINE sound_sample Filter::output() {
     731        // This is handy for testing.
     732        if (!enabled) {
     733                return (Vnf + mixer_DC)*static_cast<sound_sample>(vol);
     734        }
     735
     736        // Mix highpass, bandpass, and lowpass outputs. The sum is not
     737        // weighted, this can be confirmed by sampling sound output for
     738        // e.g. bandpass, lowpass, and bandpass+lowpass from a SID chip.
     739
     740        // The code below is expanded to a switch for faster execution.
     741        // if (hp) Vf += Vhp;
     742        // if (bp) Vf += Vbp;
     743        // if (lp) Vf += Vlp;
     744
     745        sound_sample Vf;
     746
     747        switch (hp_bp_lp) {
     748        default:
     749        case 0x0:
     750                Vf = 0;
     751                break;
     752        case 0x1:
     753                Vf = Vlp;
     754                break;
     755        case 0x2:
     756                Vf = Vbp;
     757                break;
     758        case 0x3:
     759                Vf = Vlp + Vbp;
     760                break;
     761        case 0x4:
     762                Vf = Vhp;
     763                break;
     764        case 0x5:
     765                Vf = Vlp + Vhp;
     766                break;
     767        case 0x6:
     768                Vf = Vbp + Vhp;
     769                break;
     770        case 0x7:
     771                Vf = Vlp + Vbp + Vhp;
     772                break;
     773        }
     774
     775        // Sum non-filtered and filtered output.
     776        // Multiply the sum with volume.
     777        return (Vnf + Vf + mixer_DC)*static_cast<sound_sample>(vol);
     778}
     779
     780
     781/*
     782 * EnvelopeGenerator
     783 */
     784
     785EnvelopeGenerator::EnvelopeGenerator() {
     786        reset();
     787}
     788
     789void EnvelopeGenerator::reset() {
     790        envelope_counter = 0;
     791
     792        attack = 0;
     793        decay = 0;
     794        sustain = 0;
     795        release = 0;
     796
     797        gate = 0;
     798
     799        rate_counter = 0;
     800        exponential_counter = 0;
     801        exponential_counter_period = 1;
     802
     803        state = RELEASE;
     804        rate_period = rate_counter_period[release];
     805        hold_zero = true;
     806}
     807
     808reg16 EnvelopeGenerator::rate_counter_period[] = {
     809        9,  //   2ms*1.0MHz/256 =     7.81
     810        32,  //   8ms*1.0MHz/256 =    31.25
     811        63,  //  16ms*1.0MHz/256 =    62.50
     812        95,  //  24ms*1.0MHz/256 =    93.75
     813        149,  //  38ms*1.0MHz/256 =   148.44
     814        220,  //  56ms*1.0MHz/256 =   218.75
     815        267,  //  68ms*1.0MHz/256 =   265.63
     816        313,  //  80ms*1.0MHz/256 =   312.50
     817        392,  // 100ms*1.0MHz/256 =   390.63
     818        977,  // 250ms*1.0MHz/256 =   976.56
     819        1954,  // 500ms*1.0MHz/256 =  1953.13
     820        3126,  // 800ms*1.0MHz/256 =  3125.00
     821        3907,  //   1 s*1.0MHz/256 =  3906.25
     822        11720,  //   3 s*1.0MHz/256 = 11718.75
     823        19532,  //   5 s*1.0MHz/256 = 19531.25
     824        31251   //   8 s*1.0MHz/256 = 31250.00
     825};
     826
     827
     828reg8 EnvelopeGenerator::sustain_level[] = {
     829        0x00,
     830        0x11,
     831        0x22,
     832        0x33,
     833        0x44,
     834        0x55,
     835        0x66,
     836        0x77,
     837        0x88,
     838        0x99,
     839        0xaa,
     840        0xbb,
     841        0xcc,
     842        0xdd,
     843        0xee,
     844        0xff,
     845};
     846
     847void EnvelopeGenerator::writeCONTROL_REG(reg8 control) {
     848        reg8 gate_next = control & 0x01;
     849
     850        // The rate counter is never reset, thus there will be a delay before the
     851        // envelope counter starts counting up (attack) or down (release).
     852
     853        // Gate bit on: Start attack, decay, sustain.
     854        if (!gate && gate_next) {
     855                state = ATTACK;
     856                rate_period = rate_counter_period[attack];
     857
     858                // Switching to attack state unlocks the zero freeze.
     859                hold_zero = false;
     860        }
     861        // Gate bit off: Start release.
     862        else if (gate && !gate_next) {
     863                state = RELEASE;
     864                rate_period = rate_counter_period[release];
     865        }
     866
     867        gate = gate_next;
     868}
     869
     870void EnvelopeGenerator::writeATTACK_DECAY(reg8 attack_decay) {
     871        attack = (attack_decay >> 4) & 0x0f;
     872        decay = attack_decay & 0x0f;
     873        if (state == ATTACK) {
     874                rate_period = rate_counter_period[attack];
     875        }
     876        else if (state == DECAY_SUSTAIN) {
     877                rate_period = rate_counter_period[decay];
     878        }
     879}
     880
     881void EnvelopeGenerator::writeSUSTAIN_RELEASE(reg8 sustain_release) {
     882        sustain = (sustain_release >> 4) & 0x0f;
     883        release = sustain_release & 0x0f;
     884        if (state == RELEASE) {
     885                rate_period = rate_counter_period[release];
     886        }
     887}
     888
     889reg8 EnvelopeGenerator::readENV() {
     890        return output();
     891}
     892
     893RESID_INLINE void EnvelopeGenerator::clock(cycle_count delta_t) {
     894        // Check for ADSR delay bug.
     895        // If the rate counter comparison value is set below the current value of the
     896        // rate counter, the counter will continue counting up until it wraps around
     897        // to zero at 2^15 = 0x8000, and then count rate_period - 1 before the
     898        // envelope can finally be stepped.
     899        // This has been verified by sampling ENV3.
     900        //
     901
     902        // NB! This requires two's complement integer.
     903        int rate_step = rate_period - rate_counter;
     904        if (rate_step <= 0) {
     905                rate_step += 0x7fff;
     906        }
     907
     908        while (delta_t) {
     909                if (delta_t < rate_step) {
     910                        rate_counter += delta_t;
     911                        if (rate_counter & 0x8000) {
     912                                ++rate_counter &= 0x7fff;
     913                        }
     914                        return;
     915                }
     916
     917                rate_counter = 0;
     918                delta_t -= rate_step;
     919
     920                // The first envelope step in the attack state also resets the exponential
     921                // counter. This has been verified by sampling ENV3.
     922                //
     923                if (state == ATTACK     || ++exponential_counter == exponential_counter_period)
     924                {
     925                        exponential_counter = 0;
     926
     927                        // Check whether the envelope counter is frozen at zero.
     928                        if (hold_zero) {
     929                                rate_step = rate_period;
     930                                continue;
     931                        }
     932
     933                        switch (state) {
     934                        case ATTACK:
     935                                // The envelope counter can flip from 0xff to 0x00 by changing state to
     936                                // release, then to attack. The envelope counter is then frozen at
     937                                // zero; to unlock this situation the state must be changed to release,
     938                                // then to attack. This has been verified by sampling ENV3.
     939                                //
     940                                ++envelope_counter &= 0xff;
     941                                if (envelope_counter == 0xff) {
     942                                        state = DECAY_SUSTAIN;
     943                                        rate_period = rate_counter_period[decay];
     944                                }
     945                                break;
     946                        case DECAY_SUSTAIN:
     947                                if (envelope_counter != sustain_level[sustain]) {
     948                                        --envelope_counter;
     949                                }
     950                                break;
     951                        case RELEASE:
     952                                // The envelope counter can flip from 0x00 to 0xff by changing state to
     953                                // attack, then to release. The envelope counter will then continue
     954                                // counting down in the release state.
     955                                // This has been verified by sampling ENV3.
     956                                // NB! The operation below requires two's complement integer.
     957                                //
     958                                --envelope_counter &= 0xff;
     959                                break;
     960                        }
     961
     962                        // Check for change of exponential counter period.
     963                        switch (envelope_counter) {
     964                        case 0xff:
     965                                exponential_counter_period = 1;
     966                                break;
     967                        case 0x5d:
     968                                exponential_counter_period = 2;
     969                                break;
     970                        case 0x36:
     971                                exponential_counter_period = 4;
     972                                break;
     973                        case 0x1a:
     974                                exponential_counter_period = 8;
     975                                break;
     976                        case 0x0e:
     977                                exponential_counter_period = 16;
     978                                break;
     979                        case 0x06:
     980                                exponential_counter_period = 30;
     981                                break;
     982                        case 0x00:
     983                                exponential_counter_period = 1;
     984
     985                                // When the envelope counter is changed to zero, it is frozen at zero.
     986                                // This has been verified by sampling ENV3.
     987                                hold_zero = true;
     988                                break;
     989                        }
     990                }
     991
     992                rate_step = rate_period;
     993        }
     994}
     995
     996RESID_INLINE reg8 EnvelopeGenerator::output() {
     997        return envelope_counter;
     998}
     999
     1000
     1001/*
     1002 * ExternalFilter
     1003 */
     1004
     1005ExternalFilter::ExternalFilter() {
     1006        reset();
     1007        enable_filter(true);
     1008        set_sampling_parameter(15915.6);
     1009        mixer_DC = ((((0x800 - 0x380) + 0x800)*0xff*3 - 0xfff*0xff/18) >> 7)*0x0f;
     1010}
     1011
     1012void ExternalFilter::enable_filter(bool enable) {
     1013        enabled = enable;
     1014}
     1015
     1016void ExternalFilter::set_sampling_parameter(double pass_freq) {
     1017        static const double pi = 3.1415926535897932385;
     1018
     1019        w0hp = 105;
     1020        w0lp = (sound_sample) (pass_freq * (2.0 * pi * 1.048576));
     1021        if (w0lp > 104858)
     1022                w0lp = 104858;
     1023}
     1024
     1025void ExternalFilter::reset() {
     1026        // State of filter.
     1027        Vlp = 0;
     1028        Vhp = 0;
     1029        Vo = 0;
     1030}
     1031
     1032RESID_INLINE void ExternalFilter::clock(cycle_count delta_t, sound_sample Vi) {
     1033        // This is handy for testing.
     1034        if (!enabled) {
     1035                // Remove maximum DC level since there is no filter to do it.
     1036                Vlp = Vhp = 0;
     1037                Vo = Vi - mixer_DC;
     1038                return;
     1039        }
     1040
     1041        // Maximum delta cycles for the external filter to work satisfactorily
     1042        // is approximately 8.
     1043        cycle_count delta_t_flt = 8;
     1044
     1045        while (delta_t) {
     1046                if (delta_t < delta_t_flt) {
     1047                        delta_t_flt = delta_t;
     1048                }
     1049
     1050                // delta_t is converted to seconds given a 1MHz clock by dividing
     1051                // with 1 000 000.
     1052
     1053                // Calculate filter outputs.
     1054                // Vo  = Vlp - Vhp;
     1055                // Vlp = Vlp + w0lp*(Vi - Vlp)*delta_t;
     1056                // Vhp = Vhp + w0hp*(Vlp - Vhp)*delta_t;
     1057
     1058                sound_sample dVlp = (w0lp*delta_t_flt >> 8)*(Vi - Vlp) >> 12;
     1059                sound_sample dVhp = w0hp*delta_t_flt*(Vlp - Vhp) >> 20;
     1060                Vo = Vlp - Vhp;
     1061                Vlp += dVlp;
     1062                Vhp += dVhp;
     1063
     1064                delta_t -= delta_t_flt;
     1065        }
     1066}
     1067
     1068RESID_INLINE sound_sample ExternalFilter::output() {
     1069        return Vo;
     1070}
     1071
     1072
     1073/*
     1074 * Voice
     1075 */
     1076
     1077Voice::Voice() {
     1078        wave_zero = 0x380;
     1079        voice_DC = 0x800*0xff;
     1080}
     1081
     1082void Voice::set_sync_source(Voice* source) {
     1083        wave.set_sync_source(&source->wave);
     1084}
     1085
     1086void Voice::writeCONTROL_REG(reg8 control) {
     1087        wave.writeCONTROL_REG(control);
     1088        envelope.writeCONTROL_REG(control);
     1089}
     1090
     1091void Voice::reset() {
     1092        wave.reset();
     1093        envelope.reset();
     1094}
     1095
     1096
     1097/*
     1098 * SID
     1099 */
     1100
     1101SID::SID() {
     1102        voice[0].set_sync_source(&voice[2]);
     1103        voice[1].set_sync_source(&voice[0]);
     1104        voice[2].set_sync_source(&voice[1]);
     1105
     1106        set_sampling_parameters(985248, 44100);
     1107
     1108        bus_value = 0;
     1109        bus_value_ttl = 0;
     1110}
     1111
     1112SID::~SID() {}
     1113
     1114void SID::reset() {
     1115        for (int i = 0; i < 3; i++) {
     1116                voice[i].reset();
     1117        }
     1118        filter.reset();
     1119        extfilt.reset();
     1120
     1121        bus_value = 0;
     1122        bus_value_ttl = 0;
     1123}
     1124
     1125int SID::output() {
     1126        const int range = 1 << 16;
     1127        const int half = range >> 1;
     1128        int sample = extfilt.output()/((4095*255 >> 7)*3*15*2/range);
     1129        if (sample >= half) {
     1130                return half - 1;
     1131        }
     1132        if (sample < -half) {
     1133                return -half;
     1134        }
     1135        return sample;
     1136}
     1137
     1138
     1139/**
     1140 * Read registers.
     1141 *
     1142 * Reading a write only register returns the last byte written to any SID
     1143 * register. The individual bits in this value start to fade down towards
     1144 * zero after a few cycles. All bits reach zero within approximately
     1145 * $2000 - $4000 cycles.
     1146 * It has been claimed that this fading happens in an orderly fashion, however
     1147 * sampling of write only registers reveals that this is not the case.
     1148 * NB! This is not correctly modeled.
     1149 * The actual use of write only registers has largely been made in the belief
     1150 * that all SID registers are readable. To support this belief the read
     1151 * would have to be done immediately after a write to the same register
     1152 * (remember that an intermediate write to another register would yield that
     1153 * value instead). With this in mind we return the last value written to
     1154 * any SID register for $2000 cycles without modeling the bit fading.
     1155 */
     1156reg8 SID::read(reg8 offset) {
     1157        switch (offset) {
     1158                case 0x19:
     1159                case 0x1a:
     1160                        return 0; //readPOT();
     1161                case 0x1b:
     1162                        return voice[2].wave.readOSC();
     1163                case 0x1c:
     1164                        return voice[2].envelope.readENV();
     1165                default:
     1166                        return bus_value;
     1167        }
     1168}
     1169
     1170void SID::write(reg8 offset, reg8 value) {
     1171        bus_value = value;
     1172        bus_value_ttl = 0x2000;
     1173
     1174        switch (offset) {
     1175          case 0x00:
     1176                  voice[0].wave.writeFREQ_LO(value);
     1177                  break;
     1178          case 0x01:
     1179                  voice[0].wave.writeFREQ_HI(value);
     1180                  break;
     1181          case 0x02:
     1182                  voice[0].wave.writePW_LO(value);
     1183                  break;
     1184          case 0x03:
     1185                  voice[0].wave.writePW_HI(value);
     1186                  break;
     1187          case 0x04:
     1188                  voice[0].writeCONTROL_REG(value);
     1189                  break;
     1190          case 0x05:
     1191                  voice[0].envelope.writeATTACK_DECAY(value);
     1192                  break;
     1193          case 0x06:
     1194                  voice[0].envelope.writeSUSTAIN_RELEASE(value);
     1195                  break;
     1196          case 0x07:
     1197                  voice[1].wave.writeFREQ_LO(value);
     1198                  break;
     1199          case 0x08:
     1200                  voice[1].wave.writeFREQ_HI(value);
     1201                  break;
     1202          case 0x09:
     1203                  voice[1].wave.writePW_LO(value);
     1204                  break;
     1205          case 0x0a:
     1206                  voice[1].wave.writePW_HI(value);
     1207                  break;
     1208          case 0x0b:
     1209                  voice[1].writeCONTROL_REG(value);
     1210                  break;
     1211          case 0x0c:
     1212                  voice[1].envelope.writeATTACK_DECAY(value);
     1213                  break;
     1214          case 0x0d:
     1215                  voice[1].envelope.writeSUSTAIN_RELEASE(value);
     1216                  break;
     1217          case 0x0e:
     1218                  voice[2].wave.writeFREQ_LO(value);
     1219                  break;
     1220          case 0x0f:
     1221                  voice[2].wave.writeFREQ_HI(value);
     1222                  break;
     1223          case 0x10:
     1224                  voice[2].wave.writePW_LO(value);
     1225                  break;
     1226          case 0x11:
     1227                  voice[2].wave.writePW_HI(value);
     1228                  break;
     1229          case 0x12:
     1230                  voice[2].writeCONTROL_REG(value);
     1231                  break;
     1232          case 0x13:
     1233                  voice[2].envelope.writeATTACK_DECAY(value);
     1234                  break;
     1235          case 0x14:
     1236                  voice[2].envelope.writeSUSTAIN_RELEASE(value);
     1237                  break;
     1238          case 0x15:
     1239                  filter.writeFC_LO(value);
     1240                  break;
     1241          case 0x16:
     1242                  filter.writeFC_HI(value);
     1243                  break;
     1244          case 0x17:
     1245                  filter.writeRES_FILT(value);
     1246                  break;
     1247          case 0x18:
     1248                  filter.writeMODE_VOL(value);
     1249                  break;
     1250          default:
     1251                  break;
     1252        }
     1253}
     1254
     1255void SID::enable_filter(bool enable) {
     1256        filter.enable_filter(enable);
     1257}
     1258
     1259void SID::enable_external_filter(bool enable) {
     1260        extfilt.enable_filter(enable);
     1261}
     1262
     1263
     1264/**
     1265 * Setting of SID sampling parameters.
     1266 *
     1267 * Use a clock freqency of 985248Hz for PAL C64, 1022730Hz for NTSC C64.
     1268 * The default end of passband frequency is pass_freq = 0.9*sample_freq/2
     1269 * for sample frequencies up to ~ 44.1kHz, and 20kHz for higher sample
     1270 * frequencies.
     1271 *
     1272 * For resampling, the ratio between the clock frequency and the sample
     1273 * frequency is limited as follows:
     1274 *   125*clock_freq/sample_freq < 16384
     1275 * E.g. provided a clock frequency of ~ 1MHz, the sample frequency can not
     1276 * be set lower than ~ 8kHz. A lower sample frequency would make the
     1277 * resampling code overfill its 16k sample ring buffer.
     1278 *
     1279 * The end of passband frequency is also limited:
     1280 *   pass_freq <= 0.9*sample_freq/2
     1281 *
     1282 * E.g. for a 44.1kHz sampling rate the end of passband frequency is limited
     1283 * to slightly below 20kHz. This constraint ensures that the FIR table is
     1284 * not overfilled.
     1285 */
     1286bool SID::set_sampling_parameters(double clock_freq,
     1287                                                                  double sample_freq, double pass_freq,
     1288                                                                  double filter_scale)
     1289{
     1290        // The default passband limit is 0.9*sample_freq/2 for sample
     1291        // frequencies below ~ 44.1kHz, and 20kHz for higher sample frequencies.
     1292        if (pass_freq < 0) {
     1293                pass_freq = 20000;
     1294                if (2*pass_freq/sample_freq >= 0.9) {
     1295                        pass_freq = 0.9*sample_freq/2;
     1296                }
     1297        }
     1298        // Check whether the FIR table would overfill.
     1299        else if (pass_freq > 0.9*sample_freq/2) {
     1300                return false;
     1301        }
     1302
     1303        // The filter scaling is only included to avoid clipping, so keep
     1304        // it sane.
     1305        if (filter_scale < 0.9 || filter_scale > 1.0) {
     1306                return false;
     1307        }
     1308
     1309        // Set the external filter to the pass freq
     1310        extfilt.set_sampling_parameter (pass_freq);
     1311        clock_frequency = clock_freq;
     1312
     1313        cycles_per_sample =
     1314                cycle_count(clock_freq/sample_freq*(1 << FIXP_SHIFT) + 0.5);
     1315
     1316        sample_offset = 0;
     1317        sample_prev = 0;
     1318
     1319        return true;
     1320}
     1321
     1322void SID::clock(cycle_count delta_t) {
     1323        int i;
     1324
     1325        if (delta_t <= 0) {
     1326                return;
     1327        }
     1328
     1329        // Age bus value.
     1330        bus_value_ttl -= delta_t;
     1331        if (bus_value_ttl <= 0) {
     1332                bus_value = 0;
     1333                bus_value_ttl = 0;
     1334        }
     1335
     1336        // Clock amplitude modulators.
     1337        for (i = 0; i < 3; i++) {
     1338                voice[i].envelope.clock(delta_t);
     1339        }
     1340
     1341        // Clock and synchronize oscillators.
     1342        // Loop until we reach the current cycle.
     1343        cycle_count delta_t_osc = delta_t;
     1344        while (delta_t_osc) {
     1345                cycle_count delta_t_min = delta_t_osc;
     1346
     1347                // Find minimum number of cycles to an oscillator accumulator MSB toggle.
     1348                // We have to clock on each MSB on / MSB off for hard sync to operate
     1349                // correctly.
     1350                for (i = 0; i < 3; i++) {
     1351                        WaveformGenerator& wave = voice[i].wave;
     1352
     1353                        // It is only necessary to clock on the MSB of an oscillator that is
     1354                        // a sync source and has freq != 0.
     1355                        if (!(wave.sync_dest->sync && wave.freq)) {
     1356                                continue;
     1357                        }
     1358
     1359                        reg16 freq = wave.freq;
     1360                        reg24 accumulator = wave.accumulator;
     1361
     1362                        // Clock on MSB off if MSB is on, clock on MSB on if MSB is off.
     1363                        reg24 delta_accumulator =
     1364                                (accumulator & 0x800000 ? 0x1000000 : 0x800000) - accumulator;
     1365
     1366                        cycle_count delta_t_next = delta_accumulator/freq;
     1367                        if (delta_accumulator%freq) {
     1368                                ++delta_t_next;
     1369                        }
     1370
     1371                        if (delta_t_next < delta_t_min) {
     1372                                delta_t_min = delta_t_next;
     1373                        }
     1374                }
     1375
     1376                // Clock oscillators.
     1377                for (i = 0; i < 3; i++) {
     1378                        voice[i].wave.clock(delta_t_min);
     1379                }
     1380
     1381                // Synchronize oscillators.
     1382                for (i = 0; i < 3; i++) {
     1383                        voice[i].wave.synchronize();
     1384                }
     1385
     1386                delta_t_osc -= delta_t_min;
     1387        }
     1388
     1389        // Clock filter.
     1390        filter.clock(delta_t,
     1391                voice[0].output(), voice[1].output(), voice[2].output());
     1392
     1393        // Clock external filter.
     1394        extfilt.clock(delta_t, filter.output());
     1395}
     1396
     1397
     1398/**
     1399 * SID clocking with audio sampling.
     1400 * Fixpoint arithmetics is used.
     1401 */
     1402int SID::clock(cycle_count& delta_t, short* buf, int n, int interleave) {
     1403        int s = 0;
     1404
     1405        for (;;) {
     1406                cycle_count next_sample_offset = sample_offset + cycles_per_sample + (1 << (FIXP_SHIFT - 1));
     1407                cycle_count delta_t_sample = next_sample_offset >> FIXP_SHIFT;
     1408                if (delta_t_sample > delta_t) {
     1409                        break;
     1410                }
     1411                if (s >= n) {
     1412                        return s;
     1413                }
     1414                clock(delta_t_sample);
     1415                delta_t -= delta_t_sample;
     1416                sample_offset = (next_sample_offset & FIXP_MASK) - (1 << (FIXP_SHIFT - 1));
     1417                buf[s++*interleave] = output();
     1418        }
     1419
     1420        clock(delta_t);
     1421        sample_offset -= delta_t << FIXP_SHIFT;
     1422        delta_t = 0;
     1423        return s;
     1424}
     1425
     1426}
  • sound/softsynth/sid.h

     
     1/* ScummVM - Graphic Adventure Engine
     2 *
     3 * ScummVM is the legal property of its developers, whose names
     4 * are too numerous to list here. Please refer to the COPYRIGHT
     5 * file distributed with this source distribution.
     6 *
     7 * This program is free software; you can redistribute it and/or
     8 * modify it under the terms of the GNU General Public License
     9 * as published by the Free Software Foundation; either version 2
     10 * of the License, or (at your option) any later version.
     11
     12 * This program is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16
     17 * You should have received a copy of the GNU General Public License
     18 * along with this program; if not, write to the Free Software
     19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     20 *
     21 * $URL: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk/engines/scumm/actor.cpp $
     22 * $Id: actor.cpp 45438 2009-10-27 12:08:19Z Kirben $
     23 *
     24 */
     25
     26/*
     27 *  This file is based on reSID, a MOS6581 SID emulator engine.
     28 *  Copyright (C) 2004  Dag Lem <resid@nimrod.no>
     29 */
     30
     31#ifndef __SID_H__
     32#define __SID_H__
     33
     34#include "config.h"
     35
     36// Inlining on/off.
     37#define RESID_INLINE inline
     38
     39namespace Resid {
     40
     41// We could have used the smallest possible data type for each SID register,
     42// however this would give a slower engine because of data type conversions.
     43// An int is assumed to be at least 32 bits (necessary in the types reg24,
     44// cycle_count, and sound_sample). GNU does not support 16-bit machines
     45// (GNU Coding Standards: Portability between CPUs), so this should be
     46// a valid assumption.
     47
     48typedef unsigned int reg4;
     49typedef unsigned int reg8;
     50typedef unsigned int reg12;
     51typedef unsigned int reg16;
     52typedef unsigned int reg24;
     53
     54typedef int cycle_count;
     55typedef int sound_sample;
     56typedef sound_sample fc_point[2];
     57
     58
     59class WaveformGenerator {
     60public:
     61        WaveformGenerator();
     62
     63        void set_sync_source(WaveformGenerator*);
     64
     65        RESID_INLINE void clock(cycle_count delta_t);
     66        RESID_INLINE void synchronize();
     67        void reset();
     68
     69        void writeFREQ_LO(reg8);
     70        void writeFREQ_HI(reg8);
     71        void writePW_LO(reg8);
     72        void writePW_HI(reg8);
     73        void writeCONTROL_REG(reg8);
     74        reg8 readOSC();
     75
     76        // 12-bit waveform output.
     77        RESID_INLINE reg12 output();
     78
     79protected:
     80        const WaveformGenerator* sync_source;
     81        WaveformGenerator* sync_dest;
     82
     83        // Tell whether the accumulator MSB was set high on this cycle.
     84        bool msb_rising;
     85
     86        reg24 accumulator;
     87        reg24 shift_register;
     88
     89        // Fout  = (Fn*Fclk/16777216)Hz
     90        reg16 freq;
     91        // PWout = (PWn/40.95)%
     92        reg12 pw;
     93
     94        // The control register right-shifted 4 bits; used for output function
     95        // table lookup.
     96        reg8 waveform;
     97
     98        // The remaining control register bits.
     99        reg8 test;
     100        reg8 ring_mod;
     101        reg8 sync;
     102        // The gate bit is handled by the EnvelopeGenerator.
     103
     104        // 16 possible combinations of waveforms.
     105        RESID_INLINE reg12 output____();
     106        RESID_INLINE reg12 output___T();
     107        RESID_INLINE reg12 output__S_();
     108        RESID_INLINE reg12 output__ST();
     109        RESID_INLINE reg12 output_P__();
     110        RESID_INLINE reg12 output_P_T();
     111        RESID_INLINE reg12 output_PS_();
     112        RESID_INLINE reg12 output_PST();
     113        RESID_INLINE reg12 outputN___();
     114        RESID_INLINE reg12 outputN__T();
     115        RESID_INLINE reg12 outputN_S_();
     116        RESID_INLINE reg12 outputN_ST();
     117        RESID_INLINE reg12 outputNP__();
     118        RESID_INLINE reg12 outputNP_T();
     119        RESID_INLINE reg12 outputNPS_();
     120        RESID_INLINE reg12 outputNPST();
     121
     122        // Sample data for combinations of waveforms.
     123        static reg8 wave6581__ST[];
     124        static reg8 wave6581_P_T[];
     125        static reg8 wave6581_PS_[];
     126        static reg8 wave6581_PST[];
     127
     128        reg8* wave__ST;
     129        reg8* wave_P_T;
     130        reg8* wave_PS_;
     131        reg8* wave_PST;
     132
     133        friend class Voice;
     134        friend class SID;
     135};
     136
     137class Filter {
     138public:
     139        Filter();
     140
     141        void enable_filter(bool enable);
     142
     143        RESID_INLINE
     144                void clock(cycle_count delta_t,
     145                sound_sample voice1, sound_sample voice2, sound_sample voice3);
     146        void reset();
     147
     148        // Write registers.
     149        void writeFC_LO(reg8);
     150        void writeFC_HI(reg8);
     151        void writeRES_FILT(reg8);
     152        void writeMODE_VOL(reg8);
     153
     154        // SID audio output (16 bits).
     155        sound_sample output();
     156
     157protected:
     158        void set_w0();
     159        void set_Q();
     160
     161        // Filter enabled.
     162        bool enabled;
     163
     164        // Filter cutoff frequency.
     165        reg12 fc;
     166
     167        // Filter resonance.
     168        reg8 res;
     169
     170        // Selects which inputs to route through filter.
     171        reg8 filt;
     172
     173        // Switch voice 3 off.
     174        reg8 voice3off;
     175
     176        // Highpass, bandpass, and lowpass filter modes.
     177        reg8 hp_bp_lp;
     178
     179        // Output master volume.
     180        reg4 vol;
     181
     182        // Mixer DC offset.
     183        sound_sample mixer_DC;
     184
     185        // State of filter.
     186        sound_sample Vhp; // highpass
     187        sound_sample Vbp; // bandpass
     188        sound_sample Vlp; // lowpass
     189        sound_sample Vnf; // not filtered
     190
     191        // Cutoff frequency, resonance.
     192        sound_sample w0, w0_ceil_1, w0_ceil_dt;
     193        sound_sample _1024_div_Q;
     194
     195        // Cutoff frequency tables.
     196        // FC is an 11 bit register.
     197        sound_sample f0_6581[2048];
     198        sound_sample* f0;
     199        static fc_point f0_points_6581[];
     200        fc_point* f0_points;
     201        int f0_count;
     202
     203        friend class SID;
     204};
     205
     206class EnvelopeGenerator {
     207public:
     208        EnvelopeGenerator();
     209
     210        enum State { ATTACK, DECAY_SUSTAIN, RELEASE };
     211
     212        RESID_INLINE void clock(cycle_count delta_t);
     213        void reset();
     214
     215        void writeCONTROL_REG(reg8);
     216        void writeATTACK_DECAY(reg8);
     217        void writeSUSTAIN_RELEASE(reg8);
     218        reg8 readENV();
     219
     220        // 8-bit envelope output.
     221        RESID_INLINE reg8 output();
     222
     223protected:
     224        reg16 rate_counter;
     225        reg16 rate_period;
     226        reg8 exponential_counter;
     227        reg8 exponential_counter_period;
     228        reg8 envelope_counter;
     229        bool hold_zero;
     230
     231        reg4 attack;
     232        reg4 decay;
     233        reg4 sustain;
     234        reg4 release;
     235
     236        reg8 gate;
     237
     238        State state;
     239
     240        // Lookup table to convert from attack, decay, or release value to rate
     241        // counter period.
     242        static reg16 rate_counter_period[];
     243
     244        // The 16 selectable sustain levels.
     245        static reg8 sustain_level[];
     246
     247        friend class SID;
     248};
     249
     250class ExternalFilter {
     251public:
     252        ExternalFilter();
     253
     254        void enable_filter(bool enable);
     255        void set_sampling_parameter(double pass_freq);
     256
     257        RESID_INLINE void clock(cycle_count delta_t, sound_sample Vi);
     258        void reset();
     259
     260        // Audio output (20 bits).
     261        RESID_INLINE sound_sample output();
     262
     263protected:
     264        // Filter enabled.
     265        bool enabled;
     266
     267        // Maximum mixer DC offset.
     268        sound_sample mixer_DC;
     269
     270        // State of filters.
     271        sound_sample Vlp; // lowpass
     272        sound_sample Vhp; // highpass
     273        sound_sample Vo;
     274
     275        // Cutoff frequencies.
     276        sound_sample w0lp;
     277        sound_sample w0hp;
     278
     279        friend class SID;
     280};
     281
     282class Voice {
     283public:
     284        Voice();
     285
     286        void set_sync_source(Voice*);
     287        void reset();
     288
     289        void writeCONTROL_REG(reg8);
     290
     291        // Amplitude modulated waveform output.
     292        // Range [-2048*255, 2047*255].
     293        RESID_INLINE sound_sample output()
     294        {
     295                // Multiply oscillator output with envelope output.
     296                return (wave.output() - wave_zero)*envelope.output() + voice_DC;
     297        }
     298
     299protected:
     300        WaveformGenerator wave;
     301        EnvelopeGenerator envelope;
     302
     303        // Waveform D/A zero level.
     304        sound_sample wave_zero;
     305
     306        // Multiplying D/A DC offset.
     307        sound_sample voice_DC;
     308
     309        friend class SID;
     310};
     311
     312
     313class SID {
     314public:
     315        SID();
     316        ~SID();
     317
     318        void enable_filter(bool enable);
     319        void enable_external_filter(bool enable);
     320        bool set_sampling_parameters(double clock_freq,
     321                double sample_freq, double pass_freq = -1,
     322                double filter_scale = 0.97);
     323
     324        void clock(cycle_count delta_t);
     325        int clock(cycle_count& delta_t, short* buf, int n, int interleave = 1);
     326        void reset();
     327
     328        // Read/write registers.
     329        reg8 read(reg8 offset);
     330        void write(reg8 offset, reg8 value);
     331
     332        // 16-bit output (AUDIO OUT).
     333        int output();
     334
     335protected:
     336        Voice voice[3];
     337        Filter filter;
     338        ExternalFilter extfilt;
     339
     340        reg8 bus_value;
     341        cycle_count bus_value_ttl;
     342
     343        double clock_frequency;
     344
     345        // Fixpoint constants.
     346        static const int FIXP_SHIFT;
     347        static const int FIXP_MASK;
     348
     349        // Sampling variables.
     350        cycle_count cycles_per_sample;
     351        cycle_count sample_offset;
     352        short sample_prev;
     353};
     354
     355}
     356
     357#endif // not __SID_H__
  • sound/softsynth/wave6581.cpp

     
     1/* ScummVM - Graphic Adventure Engine
     2 *
     3 * ScummVM is the legal property of its developers, whose names
     4 * are too numerous to list here. Please refer to the COPYRIGHT
     5 * file distributed with this source distribution.
     6 *
     7 * This program is free software; you can redistribute it and/or
     8 * modify it under the terms of the GNU General Public License
     9 * as published by the Free Software Foundation; either version 2
     10 * of the License, or (at your option) any later version.
     11
     12 * This program is distributed in the hope that it will be useful,
     13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     15 * GNU General Public License for more details.
     16
     17 * You should have received a copy of the GNU General Public License
     18 * along with this program; if not, write to the Free Software
     19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
     20 *
     21 * $URL: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk/engines/scumm/actor.cpp $
     22 * $Id: actor.cpp 45438 2009-10-27 12:08:19Z Kirben $
     23 *
     24 */
     25
     26/*
     27 *  This file is based on reSID, a MOS6581 SID emulator engine.
     28 *  Copyright (C) 2004  Dag Lem <resid@nimrod.no>
     29 */
     30
     31#include "sid.h"
     32
     33namespace Resid
     34{
     35
     36reg8 WaveformGenerator::wave6581__ST[] =
     37{
     38/* 0x000: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     39/* 0x008: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     40/* 0x010: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     41/* 0x018: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     42/* 0x020: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     43/* 0x028: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     44/* 0x030: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     45/* 0x038: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     46/* 0x040: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     47/* 0x048: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     48/* 0x050: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     49/* 0x058: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     50/* 0x060: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     51/* 0x068: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     52/* 0x070: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     53/* 0x078: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
     54/* 0x080: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     55/* 0x088: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     56/* 0x090: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     57/* 0x098: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     58/* 0x0a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     59/* 0x0a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     60/* 0x0b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     61/* 0x0b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     62/* 0x0c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     63/* 0x0c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     64/* 0x0d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     65/* 0x0d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     66/* 0x0e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     67/* 0x0e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     68/* 0x0f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     69/* 0x0f8: */  0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07,
     70/* 0x100: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     71/* 0x108: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     72/* 0x110: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     73/* 0x118: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     74/* 0x120: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     75/* 0x128: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     76/* 0x130: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     77/* 0x138: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     78/* 0x140: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     79/* 0x148: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     80/* 0x150: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     81/* 0x158: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     82/* 0x160: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     83/* 0x168: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     84/* 0x170: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     85/* 0x178: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
     86/* 0x180: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     87/* 0x188: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     88/* 0x190: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     89/* 0x198: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     90/* 0x1a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     91/* 0x1a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     92/* 0x1b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     93/* 0x1b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     94/* 0x1c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     95/* 0x1c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     96/* 0x1d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     97/* 0x1d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     98/* 0x1e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     99/* 0x1e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     100/* 0x1f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     101/* 0x1f8: */  0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f,
     102/* 0x200: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     103/* 0x208: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     104/* 0x210: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     105/* 0x218: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     106/* 0x220: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     107/* 0x228: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     108/* 0x230: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     109/* 0x238: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     110/* 0x240: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     111/* 0x248: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     112/* 0x250: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     113/* 0x258: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     114/* 0x260: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     115/* 0x268: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     116/* 0x270: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     117/* 0x278: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
     118/* 0x280: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     119/* 0x288: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     120/* 0x290: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     121/* 0x298: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     122/* 0x2a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     123/* 0x2a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     124/* 0x2b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     125/* 0x2b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     126/* 0x2c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     127/* 0x2c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     128/* 0x2d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     129/* 0x2d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     130/* 0x2e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     131/* 0x2e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     132/* 0x2f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     133/* 0x2f8: */  0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07,
     134/* 0x300: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     135/* 0x308: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     136/* 0x310: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     137/* 0x318: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     138/* 0x320: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     139/* 0x328: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     140/* 0x330: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     141/* 0x338: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     142/* 0x340: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     143/* 0x348: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     144/* 0x350: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     145/* 0x358: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     146/* 0x360: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     147/* 0x368: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     148/* 0x370: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     149/* 0x378: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
     150/* 0x380: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     151/* 0x388: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     152/* 0x390: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     153/* 0x398: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     154/* 0x3a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     155/* 0x3a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     156/* 0x3b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     157/* 0x3b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     158/* 0x3c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     159/* 0x3c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     160/* 0x3d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     161/* 0x3d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     162/* 0x3e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     163/* 0x3e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     164/* 0x3f0: */  0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
     165/* 0x3f8: */  0x1e, 0x1e, 0x1e, 0x1e, 0x1f, 0x1f, 0x3f, 0x3f,
     166/* 0x400: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     167/* 0x408: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     168/* 0x410: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     169/* 0x418: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     170/* 0x420: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     171/* 0x428: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     172/* 0x430: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     173/* 0x438: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     174/* 0x440: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     175/* 0x448: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     176/* 0x450: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     177/* 0x458: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     178/* 0x460: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     179/* 0x468: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     180/* 0x470: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     181/* 0x478: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
     182/* 0x480: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     183/* 0x488: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     184/* 0x490: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     185/* 0x498: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     186/* 0x4a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     187/* 0x4a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     188/* 0x4b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     189/* 0x4b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     190/* 0x4c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     191/* 0x4c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     192/* 0x4d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     193/* 0x4d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     194/* 0x4e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     195/* 0x4e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     196/* 0x4f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     197/* 0x4f8: */  0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07,
     198/* 0x500: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     199/* 0x508: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     200/* 0x510: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     201/* 0x518: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     202/* 0x520: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     203/* 0x528: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     204/* 0x530: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     205/* 0x538: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     206/* 0x540: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     207/* 0x548: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     208/* 0x550: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     209/* 0x558: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     210/* 0x560: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     211/* 0x568: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     212/* 0x570: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     213/* 0x578: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
     214/* 0x580: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     215/* 0x588: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     216/* 0x590: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     217/* 0x598: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     218/* 0x5a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     219/* 0x5a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     220/* 0x5b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     221/* 0x5b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     222/* 0x5c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     223/* 0x5c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     224/* 0x5d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     225/* 0x5d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     226/* 0x5e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     227/* 0x5e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     228/* 0x5f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     229/* 0x5f8: */  0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x1f,
     230/* 0x600: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     231/* 0x608: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     232/* 0x610: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     233/* 0x618: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     234/* 0x620: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     235/* 0x628: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     236/* 0x630: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     237/* 0x638: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     238/* 0x640: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     239/* 0x648: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     240/* 0x650: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     241/* 0x658: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     242/* 0x660: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     243/* 0x668: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     244/* 0x670: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     245/* 0x678: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
     246/* 0x680: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     247/* 0x688: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     248/* 0x690: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     249/* 0x698: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     250/* 0x6a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     251/* 0x6a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     252/* 0x6b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     253/* 0x6b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     254/* 0x6c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     255/* 0x6c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     256/* 0x6d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     257/* 0x6d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     258/* 0x6e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     259/* 0x6e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     260/* 0x6f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     261/* 0x6f8: */  0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07,
     262/* 0x700: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     263/* 0x708: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     264/* 0x710: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     265/* 0x718: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     266/* 0x720: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     267/* 0x728: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     268/* 0x730: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     269/* 0x738: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     270/* 0x740: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     271/* 0x748: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     272/* 0x750: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     273/* 0x758: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     274/* 0x760: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     275/* 0x768: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     276/* 0x770: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     277/* 0x778: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
     278/* 0x780: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     279/* 0x788: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     280/* 0x790: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     281/* 0x798: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     282/* 0x7a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     283/* 0x7a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     284/* 0x7b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     285/* 0x7b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     286/* 0x7c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     287/* 0x7c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     288/* 0x7d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     289/* 0x7d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     290/* 0x7e0: */  0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
     291/* 0x7e8: */  0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
     292/* 0x7f0: */  0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c,
     293/* 0x7f8: */  0x3e, 0x3e, 0x3f, 0x3f, 0x7f, 0x7f, 0x7f, 0x7f,
     294/* 0x800: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     295/* 0x808: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     296/* 0x810: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     297/* 0x818: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     298/* 0x820: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     299/* 0x828: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     300/* 0x830: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     301/* 0x838: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     302/* 0x840: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     303/* 0x848: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     304/* 0x850: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     305/* 0x858: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     306/* 0x860: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     307/* 0x868: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     308/* 0x870: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     309/* 0x878: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
     310/* 0x880: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     311/* 0x888: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     312/* 0x890: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     313/* 0x898: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     314/* 0x8a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     315/* 0x8a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     316/* 0x8b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     317/* 0x8b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     318/* 0x8c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     319/* 0x8c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     320/* 0x8d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     321/* 0x8d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     322/* 0x8e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     323/* 0x8e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     324/* 0x8f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     325/* 0x8f8: */  0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07,
     326/* 0x900: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     327/* 0x908: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     328/* 0x910: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     329/* 0x918: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     330/* 0x920: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     331/* 0x928: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     332/* 0x930: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     333/* 0x938: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     334/* 0x940: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     335/* 0x948: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     336/* 0x950: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     337/* 0x958: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     338/* 0x960: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     339/* 0x968: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     340/* 0x970: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     341/* 0x978: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
     342/* 0x980: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     343/* 0x988: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     344/* 0x990: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     345/* 0x998: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     346/* 0x9a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     347/* 0x9a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     348/* 0x9b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     349/* 0x9b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     350/* 0x9c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     351/* 0x9c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     352/* 0x9d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     353/* 0x9d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     354/* 0x9e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     355/* 0x9e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     356/* 0x9f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     357/* 0x9f8: */  0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x0f,
     358/* 0xa00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     359/* 0xa08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     360/* 0xa10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     361/* 0xa18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     362/* 0xa20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     363/* 0xa28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     364/* 0xa30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     365/* 0xa38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     366/* 0xa40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     367/* 0xa48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     368/* 0xa50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     369/* 0xa58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     370/* 0xa60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     371/* 0xa68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     372/* 0xa70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     373/* 0xa78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
     374/* 0xa80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     375/* 0xa88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     376/* 0xa90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     377/* 0xa98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     378/* 0xaa0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     379/* 0xaa8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     380/* 0xab0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     381/* 0xab8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     382/* 0xac0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     383/* 0xac8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     384/* 0xad0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     385/* 0xad8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     386/* 0xae0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     387/* 0xae8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     388/* 0xaf0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     389/* 0xaf8: */  0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07,
     390/* 0xb00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     391/* 0xb08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     392/* 0xb10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     393/* 0xb18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     394/* 0xb20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     395/* 0xb28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     396/* 0xb30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     397/* 0xb38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     398/* 0xb40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     399/* 0xb48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     400/* 0xb50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     401/* 0xb58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     402/* 0xb60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     403/* 0xb68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     404/* 0xb70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     405/* 0xb78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
     406/* 0xb80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     407/* 0xb88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     408/* 0xb90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     409/* 0xb98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     410/* 0xba0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     411/* 0xba8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     412/* 0xbb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     413/* 0xbb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     414/* 0xbc0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     415/* 0xbc8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     416/* 0xbd0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     417/* 0xbd8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     418/* 0xbe0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     419/* 0xbe8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     420/* 0xbf0: */  0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
     421/* 0xbf8: */  0x1e, 0x1e, 0x1e, 0x1e, 0x1f, 0x1f, 0x3f, 0x3f,
     422/* 0xc00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     423/* 0xc08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     424/* 0xc10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     425/* 0xc18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     426/* 0xc20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     427/* 0xc28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     428/* 0xc30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     429/* 0xc38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     430/* 0xc40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     431/* 0xc48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     432/* 0xc50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     433/* 0xc58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     434/* 0xc60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     435/* 0xc68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     436/* 0xc70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     437/* 0xc78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
     438/* 0xc80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     439/* 0xc88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     440/* 0xc90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     441/* 0xc98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     442/* 0xca0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     443/* 0xca8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     444/* 0xcb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     445/* 0xcb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     446/* 0xcc0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     447/* 0xcc8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     448/* 0xcd0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     449/* 0xcd8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     450/* 0xce0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     451/* 0xce8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     452/* 0xcf0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     453/* 0xcf8: */  0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07,
     454/* 0xd00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     455/* 0xd08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     456/* 0xd10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     457/* 0xd18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     458/* 0xd20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     459/* 0xd28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     460/* 0xd30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     461/* 0xd38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     462/* 0xd40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     463/* 0xd48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     464/* 0xd50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     465/* 0xd58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     466/* 0xd60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     467/* 0xd68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     468/* 0xd70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     469/* 0xd78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
     470/* 0xd80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     471/* 0xd88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     472/* 0xd90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     473/* 0xd98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     474/* 0xda0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     475/* 0xda8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     476/* 0xdb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     477/* 0xdb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     478/* 0xdc0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     479/* 0xdc8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     480/* 0xdd0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     481/* 0xdd8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     482/* 0xde0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     483/* 0xde8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     484/* 0xdf0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     485/* 0xdf8: */  0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0f, 0x1f,
     486/* 0xe00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     487/* 0xe08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     488/* 0xe10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     489/* 0xe18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     490/* 0xe20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     491/* 0xe28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     492/* 0xe30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     493/* 0xe38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     494/* 0xe40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     495/* 0xe48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     496/* 0xe50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     497/* 0xe58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     498/* 0xe60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     499/* 0xe68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     500/* 0xe70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     501/* 0xe78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
     502/* 0xe80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     503/* 0xe88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     504/* 0xe90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     505/* 0xe98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     506/* 0xea0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     507/* 0xea8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     508/* 0xeb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     509/* 0xeb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     510/* 0xec0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     511/* 0xec8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     512/* 0xed0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     513/* 0xed8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     514/* 0xee0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     515/* 0xee8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     516/* 0xef0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     517/* 0xef8: */  0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x07, 0x07,
     518/* 0xf00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     519/* 0xf08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     520/* 0xf10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     521/* 0xf18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     522/* 0xf20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     523/* 0xf28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     524/* 0xf30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     525/* 0xf38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     526/* 0xf40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     527/* 0xf48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     528/* 0xf50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     529/* 0xf58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     530/* 0xf60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     531/* 0xf68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     532/* 0xf70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     533/* 0xf78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03,
     534/* 0xf80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     535/* 0xf88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     536/* 0xf90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     537/* 0xf98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     538/* 0xfa0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     539/* 0xfa8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     540/* 0xfb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     541/* 0xfb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     542/* 0xfc0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     543/* 0xfc8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     544/* 0xfd0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     545/* 0xfd8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     546/* 0xfe0: */  0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
     547/* 0xfe8: */  0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
     548/* 0xff0: */  0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c,
     549/* 0xff8: */  0x3e, 0x3e, 0x3f, 0x3f, 0x7f, 0x7f, 0x7f, 0x7f,
     550};
     551
     552reg8 WaveformGenerator::wave6581_P_T[] =
     553{
     554/* 0x000: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     555/* 0x008: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     556/* 0x010: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     557/* 0x018: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     558/* 0x020: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     559/* 0x028: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     560/* 0x030: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     561/* 0x038: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     562/* 0x040: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     563/* 0x048: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     564/* 0x050: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     565/* 0x058: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     566/* 0x060: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     567/* 0x068: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     568/* 0x070: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     569/* 0x078: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     570/* 0x080: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     571/* 0x088: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     572/* 0x090: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     573/* 0x098: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     574/* 0x0a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     575/* 0x0a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     576/* 0x0b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     577/* 0x0b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     578/* 0x0c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     579/* 0x0c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     580/* 0x0d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     581/* 0x0d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     582/* 0x0e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     583/* 0x0e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     584/* 0x0f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     585/* 0x0f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     586/* 0x100: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     587/* 0x108: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     588/* 0x110: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     589/* 0x118: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     590/* 0x120: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     591/* 0x128: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     592/* 0x130: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     593/* 0x138: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     594/* 0x140: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     595/* 0x148: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     596/* 0x150: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     597/* 0x158: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     598/* 0x160: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     599/* 0x168: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     600/* 0x170: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     601/* 0x178: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     602/* 0x180: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     603/* 0x188: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     604/* 0x190: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     605/* 0x198: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     606/* 0x1a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     607/* 0x1a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     608/* 0x1b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     609/* 0x1b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     610/* 0x1c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     611/* 0x1c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     612/* 0x1d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     613/* 0x1d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     614/* 0x1e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     615/* 0x1e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     616/* 0x1f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     617/* 0x1f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x38, 0x3f,
     618/* 0x200: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     619/* 0x208: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     620/* 0x210: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     621/* 0x218: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     622/* 0x220: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     623/* 0x228: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     624/* 0x230: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     625/* 0x238: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     626/* 0x240: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     627/* 0x248: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     628/* 0x250: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     629/* 0x258: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     630/* 0x260: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     631/* 0x268: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     632/* 0x270: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     633/* 0x278: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     634/* 0x280: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     635/* 0x288: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     636/* 0x290: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     637/* 0x298: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     638/* 0x2a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     639/* 0x2a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     640/* 0x2b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     641/* 0x2b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     642/* 0x2c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     643/* 0x2c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     644/* 0x2d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     645/* 0x2d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     646/* 0x2e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     647/* 0x2e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     648/* 0x2f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     649/* 0x2f8: */  0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x5f,
     650/* 0x300: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     651/* 0x308: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     652/* 0x310: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     653/* 0x318: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     654/* 0x320: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     655/* 0x328: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     656/* 0x330: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     657/* 0x338: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     658/* 0x340: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     659/* 0x348: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     660/* 0x350: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     661/* 0x358: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     662/* 0x360: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     663/* 0x368: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
     664/* 0x370: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
     665/* 0x378: */  0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x6f,
     666/* 0x380: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     667/* 0x388: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     668/* 0x390: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     669/* 0x398: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
     670/* 0x3a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     671/* 0x3a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
     672/* 0x3b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
     673/* 0x3b8: */  0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x70, 0x77,
     674/* 0x3c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     675/* 0x3c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
     676/* 0x3d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
     677/* 0x3d8: */  0x00, 0x00, 0x00, 0x70, 0x40, 0x70, 0x70, 0x7b,
     678/* 0x3e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x70,
     679/* 0x3e8: */  0x00, 0x40, 0x40, 0x70, 0x60, 0x70, 0x78, 0x7d,
     680/* 0x3f0: */  0x00, 0x40, 0x60, 0x78, 0x60, 0x78, 0x78, 0x7e,
     681/* 0x3f8: */  0x70, 0x7c, 0x7c, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f,
     682/* 0x400: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     683/* 0x408: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     684/* 0x410: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     685/* 0x418: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     686/* 0x420: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     687/* 0x428: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     688/* 0x430: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     689/* 0x438: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     690/* 0x440: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     691/* 0x448: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     692/* 0x450: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     693/* 0x458: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     694/* 0x460: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     695/* 0x468: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     696/* 0x470: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     697/* 0x478: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     698/* 0x480: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     699/* 0x488: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     700/* 0x490: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     701/* 0x498: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     702/* 0x4a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     703/* 0x4a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     704/* 0x4b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     705/* 0x4b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     706/* 0x4c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     707/* 0x4c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     708/* 0x4d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     709/* 0x4d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     710/* 0x4e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     711/* 0x4e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     712/* 0x4f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     713/* 0x4f8: */  0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x9f,
     714/* 0x500: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     715/* 0x508: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     716/* 0x510: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     717/* 0x518: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     718/* 0x520: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     719/* 0x528: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     720/* 0x530: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     721/* 0x538: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     722/* 0x540: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     723/* 0x548: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     724/* 0x550: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     725/* 0x558: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     726/* 0x560: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     727/* 0x568: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     728/* 0x570: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     729/* 0x578: */  0x00, 0x80, 0x80, 0x80, 0x80, 0xa0, 0xa0, 0xaf,
     730/* 0x580: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     731/* 0x588: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     732/* 0x590: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     733/* 0x598: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     734/* 0x5a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     735/* 0x5a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80,
     736/* 0x5b0: */  0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xa0,
     737/* 0x5b8: */  0x00, 0x80, 0x80, 0xa0, 0x80, 0xa0, 0xb0, 0xb7,
     738/* 0x5c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     739/* 0x5c8: */  0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xa0,
     740/* 0x5d0: */  0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xa0,
     741/* 0x5d8: */  0x00, 0x80, 0x80, 0xa0, 0x80, 0xb0, 0xb0, 0xbb,
     742/* 0x5e0: */  0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0xb0,
     743/* 0x5e8: */  0x80, 0x80, 0x80, 0xb0, 0x80, 0xb0, 0xb8, 0xbd,
     744/* 0x5f0: */  0x80, 0x80, 0x80, 0xb8, 0xa0, 0xb8, 0xb8, 0xbe,
     745/* 0x5f8: */  0xa0, 0xb8, 0xbc, 0xbf, 0xbe, 0xbf, 0xbf, 0xbf,
     746/* 0x600: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     747/* 0x608: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     748/* 0x610: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     749/* 0x618: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     750/* 0x620: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     751/* 0x628: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     752/* 0x630: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     753/* 0x638: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0,
     754/* 0x640: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     755/* 0x648: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     756/* 0x650: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     757/* 0x658: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0,
     758/* 0x660: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     759/* 0x668: */  0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xc0,
     760/* 0x670: */  0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xc0,
     761/* 0x678: */  0x00, 0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xcf,
     762/* 0x680: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     763/* 0x688: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     764/* 0x690: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     765/* 0x698: */  0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xc0,
     766/* 0x6a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     767/* 0x6a8: */  0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xc0,
     768/* 0x6b0: */  0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0xc0, 0xc0,
     769/* 0x6b8: */  0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xd0, 0xd7,
     770/* 0x6c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     771/* 0x6c8: */  0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0xc0, 0xc0,
     772/* 0x6d0: */  0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xc0,
     773/* 0x6d8: */  0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xd0, 0xd0, 0xdb,
     774/* 0x6e0: */  0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xd0,
     775/* 0x6e8: */  0x80, 0xc0, 0xc0, 0xd0, 0xc0, 0xd0, 0xd8, 0xdd,
     776/* 0x6f0: */  0xc0, 0xc0, 0xc0, 0xd0, 0xc0, 0xd8, 0xd8, 0xde,
     777/* 0x6f8: */  0xc0, 0xd8, 0xdc, 0xdf, 0xdc, 0xdf, 0xdf, 0xdf,
     778/* 0x700: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     779/* 0x708: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     780/* 0x710: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     781/* 0x718: */  0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0xc0, 0xe0,
     782/* 0x720: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80,
     783/* 0x728: */  0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xe0,
     784/* 0x730: */  0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xe0,
     785/* 0x738: */  0x80, 0xc0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, 0xe7,
     786/* 0x740: */  0x00, 0x00, 0x00, 0x80, 0x00, 0x80, 0x80, 0xc0,
     787/* 0x748: */  0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xe0,
     788/* 0x750: */  0x00, 0x80, 0x80, 0xc0, 0x80, 0xc0, 0xc0, 0xe0,
     789/* 0x758: */  0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xeb,
     790/* 0x760: */  0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0,
     791/* 0x768: */  0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xed,
     792/* 0x770: */  0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe8, 0xe8, 0xee,
     793/* 0x778: */  0xe0, 0xe8, 0xec, 0xef, 0xec, 0xef, 0xef, 0xef,
     794/* 0x780: */  0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0xc0,
     795/* 0x788: */  0x80, 0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xf0,
     796/* 0x790: */  0x80, 0xc0, 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xf0,
     797/* 0x798: */  0xc0, 0xe0, 0xe0, 0xf0, 0xe0, 0xf0, 0xf0, 0xf3,
     798/* 0x7a0: */  0x80, 0xc0, 0xc0, 0xe0, 0xc0, 0xe0, 0xe0, 0xf0,
     799/* 0x7a8: */  0xc0, 0xe0, 0xe0, 0xf0, 0xe0, 0xf0, 0xf0, 0xf5,
     800/* 0x7b0: */  0xe0, 0xe0, 0xe0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf6,
     801/* 0x7b8: */  0xf0, 0xf0, 0xf4, 0xf7, 0xf4, 0xf7, 0xf7, 0xf7,
     802/* 0x7c0: */  0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0xe0, 0xf0,
     803/* 0x7c8: */  0xe0, 0xe0, 0xe0, 0xf8, 0xf0, 0xf8, 0xf8, 0xf9,
     804/* 0x7d0: */  0xe0, 0xf0, 0xf0, 0xf8, 0xf0, 0xf8, 0xf8, 0xfa,
     805/* 0x7d8: */  0xf0, 0xf8, 0xf8, 0xfb, 0xf8, 0xfb, 0xfb, 0xfb,
     806/* 0x7e0: */  0xe0, 0xf0, 0xf0, 0xf8, 0xf0, 0xf8, 0xfc, 0xfc,
     807/* 0x7e8: */  0xf8, 0xfc, 0xfc, 0xfd, 0xfc, 0xfd, 0xfd, 0xfd,
     808/* 0x7f0: */  0xf8, 0xfc, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
     809/* 0x7f8: */  0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
     810/* 0x800: */  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
     811/* 0x808: */  0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfc, 0xf8,
     812/* 0x810: */  0xfd, 0xfd, 0xfd, 0xfc, 0xfd, 0xfc, 0xfc, 0xf8,
     813/* 0x818: */  0xfc, 0xfc, 0xfc, 0xf0, 0xf8, 0xf0, 0xf0, 0xe0,
     814/* 0x820: */  0xfb, 0xfb, 0xfb, 0xf8, 0xfb, 0xf8, 0xf8, 0xf0,
     815/* 0x828: */  0xfa, 0xf8, 0xf8, 0xf0, 0xf8, 0xf0, 0xf0, 0xe0,
     816/* 0x830: */  0xf9, 0xf8, 0xf8, 0xf0, 0xf8, 0xf0, 0xe0, 0xe0,
     817/* 0x838: */  0xf0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0,
     818/* 0x840: */  0xf7, 0xf7, 0xf7, 0xf4, 0xf7, 0xf4, 0xf0, 0xf0,
     819/* 0x848: */  0xf6, 0xf0, 0xf0, 0xf0, 0xf0, 0xe0, 0xe0, 0xe0,
     820/* 0x850: */  0xf5, 0xf0, 0xf0, 0xe0, 0xf0, 0xe0, 0xe0, 0xc0,
     821/* 0x858: */  0xf0, 0xe0, 0xe0, 0xc0, 0xe0, 0xc0, 0xc0, 0x80,
     822/* 0x860: */  0xf3, 0xf0, 0xf0, 0xe0, 0xf0, 0xe0, 0xe0, 0xc0,
     823/* 0x868: */  0xf0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80,
     824/* 0x870: */  0xf0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80,
     825/* 0x878: */  0xc0, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
     826/* 0x880: */  0xef, 0xef, 0xef, 0xec, 0xef, 0xec, 0xe8, 0xe0,
     827/* 0x888: */  0xee, 0xe8, 0xe8, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0,
     828/* 0x890: */  0xed, 0xe8, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0,
     829/* 0x898: */  0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80,
     830/* 0x8a0: */  0xeb, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0,
     831/* 0x8a8: */  0xe0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00,
     832/* 0x8b0: */  0xe0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00,
     833/* 0x8b8: */  0xc0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00,
     834/* 0x8c0: */  0xe7, 0xe0, 0xe0, 0xc0, 0xe0, 0xc0, 0xc0, 0x80,
     835/* 0x8c8: */  0xe0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00,
     836/* 0x8d0: */  0xe0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00,
     837/* 0x8d8: */  0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     838/* 0x8e0: */  0xe0, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00,
     839/* 0x8e8: */  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     840/* 0x8f0: */  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     841/* 0x8f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     842/* 0x900: */  0xdf, 0xdf, 0xdf, 0xdc, 0xdf, 0xdc, 0xd8, 0xc0,
     843/* 0x908: */  0xde, 0xd8, 0xd8, 0xc0, 0xd8, 0xc0, 0xc0, 0xc0,
     844/* 0x910: */  0xdd, 0xd8, 0xd0, 0xc0, 0xd0, 0xc0, 0xc0, 0x80,
     845/* 0x918: */  0xd0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00,
     846/* 0x920: */  0xdb, 0xd0, 0xd0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80,
     847/* 0x928: */  0xc0, 0xc0, 0xc0, 0x80, 0xc0, 0x80, 0x80, 0x00,
     848/* 0x930: */  0xc0, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
     849/* 0x938: */  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     850/* 0x940: */  0xd7, 0xd0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x80,
     851/* 0x948: */  0xc0, 0xc0, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00,
     852/* 0x950: */  0xc0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00,
     853/* 0x958: */  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     854/* 0x960: */  0xc0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00,
     855/* 0x968: */  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     856/* 0x970: */  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     857/* 0x978: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     858/* 0x980: */  0xcf, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x00,
     859/* 0x988: */  0xc0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00,
     860/* 0x990: */  0xc0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00,
     861/* 0x998: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     862/* 0x9a0: */  0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
     863/* 0x9a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     864/* 0x9b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     865/* 0x9b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     866/* 0x9c0: */  0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     867/* 0x9c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     868/* 0x9d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     869/* 0x9d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     870/* 0x9e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     871/* 0x9e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     872/* 0x9f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     873/* 0x9f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     874/* 0xa00: */  0xbf, 0xbf, 0xbf, 0xbe, 0xbf, 0xbc, 0xbc, 0xa0,
     875/* 0xa08: */  0xbe, 0xbc, 0xb8, 0xa0, 0xb8, 0xa0, 0x80, 0x80,
     876/* 0xa10: */  0xbd, 0xb8, 0xb0, 0x80, 0xb0, 0x80, 0x80, 0x80,
     877/* 0xa18: */  0xb0, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
     878/* 0xa20: */  0xbb, 0xb0, 0xb0, 0x80, 0xa0, 0x80, 0x80, 0x00,
     879/* 0xa28: */  0xa0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00,
     880/* 0xa30: */  0xa0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00,
     881/* 0xa38: */  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     882/* 0xa40: */  0xb7, 0xb0, 0xa0, 0x80, 0xa0, 0x80, 0x80, 0x00,
     883/* 0xa48: */  0xa0, 0x80, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00,
     884/* 0xa50: */  0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
     885/* 0xa58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     886/* 0xa60: */  0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     887/* 0xa68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     888/* 0xa70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     889/* 0xa78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     890/* 0xa80: */  0xaf, 0xa0, 0xa0, 0x80, 0x80, 0x80, 0x80, 0x00,
     891/* 0xa88: */  0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     892/* 0xa90: */  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     893/* 0xa98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     894/* 0xaa0: */  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     895/* 0xaa8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     896/* 0xab0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     897/* 0xab8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     898/* 0xac0: */  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     899/* 0xac8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     900/* 0xad0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     901/* 0xad8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     902/* 0xae0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     903/* 0xae8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     904/* 0xaf0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     905/* 0xaf8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     906/* 0xb00: */  0x9f, 0x90, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00,
     907/* 0xb08: */  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     908/* 0xb10: */  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     909/* 0xb18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     910/* 0xb20: */  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     911/* 0xb28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     912/* 0xb30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     913/* 0xb38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     914/* 0xb40: */  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     915/* 0xb48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     916/* 0xb50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     917/* 0xb58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     918/* 0xb60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     919/* 0xb68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     920/* 0xb70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     921/* 0xb78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     922/* 0xb80: */  0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     923/* 0xb88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     924/* 0xb90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     925/* 0xb98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     926/* 0xba0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     927/* 0xba8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     928/* 0xbb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     929/* 0xbb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     930/* 0xbc0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     931/* 0xbc8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     932/* 0xbd0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     933/* 0xbd8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     934/* 0xbe0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     935/* 0xbe8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     936/* 0xbf0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     937/* 0xbf8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     938/* 0xc00: */  0x7f, 0x7f, 0x7f, 0x7e, 0x7f, 0x7c, 0x7c, 0x70,
     939/* 0xc08: */  0x7e, 0x7c, 0x78, 0x60, 0x78, 0x60, 0x60, 0x00,
     940/* 0xc10: */  0x7d, 0x78, 0x78, 0x60, 0x70, 0x40, 0x40, 0x00,
     941/* 0xc18: */  0x70, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     942/* 0xc20: */  0x7b, 0x78, 0x70, 0x40, 0x70, 0x40, 0x00, 0x00,
     943/* 0xc28: */  0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     944/* 0xc30: */  0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     945/* 0xc38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     946/* 0xc40: */  0x77, 0x70, 0x70, 0x00, 0x60, 0x00, 0x00, 0x00,
     947/* 0xc48: */  0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     948/* 0xc50: */  0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     949/* 0xc58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     950/* 0xc60: */  0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     951/* 0xc68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     952/* 0xc70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     953/* 0xc78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     954/* 0xc80: */  0x6f, 0x60, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00,
     955/* 0xc88: */  0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     956/* 0xc90: */  0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     957/* 0xc98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     958/* 0xca0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     959/* 0xca8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     960/* 0xcb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     961/* 0xcb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     962/* 0xcc0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     963/* 0xcc8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     964/* 0xcd0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     965/* 0xcd8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     966/* 0xce0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     967/* 0xce8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     968/* 0xcf0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     969/* 0xcf8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     970/* 0xd00: */  0x5f, 0x58, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00,
     971/* 0xd08: */  0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     972/* 0xd10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     973/* 0xd18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     974/* 0xd20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     975/* 0xd28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     976/* 0xd30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     977/* 0xd38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     978/* 0xd40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     979/* 0xd48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     980/* 0xd50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     981/* 0xd58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     982/* 0xd60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     983/* 0xd68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     984/* 0xd70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     985/* 0xd78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     986/* 0xd80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     987/* 0xd88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     988/* 0xd90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     989/* 0xd98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     990/* 0xda0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     991/* 0xda8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     992/* 0xdb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     993/* 0xdb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     994/* 0xdc0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     995/* 0xdc8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     996/* 0xdd0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     997/* 0xdd8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     998/* 0xde0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     999/* 0xde8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1000/* 0xdf0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1001/* 0xdf8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1002/* 0xe00: */  0x3f, 0x3c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
     1003/* 0xe08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1004/* 0xe10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1005/* 0xe18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1006/* 0xe20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1007/* 0xe28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1008/* 0xe30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1009/* 0xe38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1010/* 0xe40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1011/* 0xe48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1012/* 0xe50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1013/* 0xe58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1014/* 0xe60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1015/* 0xe68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1016/* 0xe70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1017/* 0xe78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1018/* 0xe80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1019/* 0xe88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1020/* 0xe90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1021/* 0xe98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1022/* 0xea0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1023/* 0xea8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1024/* 0xeb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1025/* 0xeb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1026/* 0xec0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1027/* 0xec8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1028/* 0xed0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1029/* 0xed8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1030/* 0xee0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1031/* 0xee8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1032/* 0xef0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1033/* 0xef8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1034/* 0xf00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1035/* 0xf08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1036/* 0xf10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1037/* 0xf18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1038/* 0xf20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1039/* 0xf28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1040/* 0xf30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1041/* 0xf38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1042/* 0xf40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1043/* 0xf48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1044/* 0xf50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1045/* 0xf58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1046/* 0xf60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1047/* 0xf68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1048/* 0xf70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1049/* 0xf78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1050/* 0xf80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1051/* 0xf88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1052/* 0xf90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1053/* 0xf98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1054/* 0xfa0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1055/* 0xfa8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1056/* 0xfb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1057/* 0xfb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1058/* 0xfc0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1059/* 0xfc8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1060/* 0xfd0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1061/* 0xfd8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1062/* 0xfe0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1063/* 0xfe8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1064/* 0xff0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1065/* 0xff8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1066};
     1067
     1068reg8 WaveformGenerator::wave6581_PS_[] =
     1069{
     1070/* 0x000: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1071/* 0x008: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1072/* 0x010: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1073/* 0x018: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1074/* 0x020: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1075/* 0x028: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1076/* 0x030: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1077/* 0x038: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1078/* 0x040: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1079/* 0x048: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1080/* 0x050: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1081/* 0x058: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1082/* 0x060: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1083/* 0x068: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1084/* 0x070: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1085/* 0x078: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1086/* 0x080: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1087/* 0x088: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1088/* 0x090: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1089/* 0x098: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1090/* 0x0a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1091/* 0x0a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1092/* 0x0b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1093/* 0x0b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1094/* 0x0c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1095/* 0x0c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1096/* 0x0d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1097/* 0x0d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1098/* 0x0e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1099/* 0x0e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1100/* 0x0f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1101/* 0x0f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
     1102/* 0x100: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1103/* 0x108: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1104/* 0x110: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1105/* 0x118: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1106/* 0x120: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1107/* 0x128: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1108/* 0x130: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1109/* 0x138: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1110/* 0x140: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1111/* 0x148: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1112/* 0x150: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1113/* 0x158: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1114/* 0x160: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1115/* 0x168: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1116/* 0x170: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1117/* 0x178: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
     1118/* 0x180: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1119/* 0x188: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1120/* 0x190: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1121/* 0x198: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1122/* 0x1a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1123/* 0x1a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1124/* 0x1b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1125/* 0x1b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
     1126/* 0x1c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1127/* 0x1c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1128/* 0x1d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1129/* 0x1d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1130/* 0x1e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1131/* 0x1e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1132/* 0x1f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1133/* 0x1f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1f,
     1134/* 0x200: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1135/* 0x208: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1136/* 0x210: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1137/* 0x218: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1138/* 0x220: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1139/* 0x228: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1140/* 0x230: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1141/* 0x238: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1142/* 0x240: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1143/* 0x248: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1144/* 0x250: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1145/* 0x258: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1146/* 0x260: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1147/* 0x268: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1148/* 0x270: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1149/* 0x278: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
     1150/* 0x280: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1151/* 0x288: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1152/* 0x290: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1153/* 0x298: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1154/* 0x2a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1155/* 0x2a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1156/* 0x2b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1157/* 0x2b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     1158/* 0x2c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1159/* 0x2c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1160/* 0x2d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1161/* 0x2d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1162/* 0x2e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1163/* 0x2e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1164/* 0x2f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1165/* 0x2f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f,
     1166/* 0x300: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1167/* 0x308: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1168/* 0x310: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1169/* 0x318: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1170/* 0x320: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1171/* 0x328: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1172/* 0x330: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1173/* 0x338: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1174/* 0x340: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1175/* 0x348: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1176/* 0x350: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1177/* 0x358: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1178/* 0x360: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1179/* 0x368: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1180/* 0x370: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1181/* 0x378: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37,
     1182/* 0x380: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1183/* 0x388: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1184/* 0x390: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1185/* 0x398: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1186/* 0x3a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1187/* 0x3a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1188/* 0x3b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1189/* 0x3b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b,
     1190/* 0x3c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1191/* 0x3c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1192/* 0x3d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1193/* 0x3d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d,
     1194/* 0x3e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1195/* 0x3e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e,
     1196/* 0x3f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x3f,
     1197/* 0x3f8: */  0x00, 0x30, 0x38, 0x3f, 0x3e, 0x3f, 0x3f, 0x3f,
     1198/* 0x400: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1199/* 0x408: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1200/* 0x410: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1201/* 0x418: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1202/* 0x420: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1203/* 0x428: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1204/* 0x430: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1205/* 0x438: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1206/* 0x440: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1207/* 0x448: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1208/* 0x450: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1209/* 0x458: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1210/* 0x460: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1211/* 0x468: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1212/* 0x470: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1213/* 0x478: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
     1214/* 0x480: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1215/* 0x488: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1216/* 0x490: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1217/* 0x498: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1218/* 0x4a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1219/* 0x4a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1220/* 0x4b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1221/* 0x4b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1222/* 0x4c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1223/* 0x4c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1224/* 0x4d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1225/* 0x4d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1226/* 0x4e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1227/* 0x4e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1228/* 0x4f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1229/* 0x4f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f,
     1230/* 0x500: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1231/* 0x508: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1232/* 0x510: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1233/* 0x518: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1234/* 0x520: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1235/* 0x528: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1236/* 0x530: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1237/* 0x538: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1238/* 0x540: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1239/* 0x548: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1240/* 0x550: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1241/* 0x558: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1242/* 0x560: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1243/* 0x568: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1244/* 0x570: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1245/* 0x578: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57,
     1246/* 0x580: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1247/* 0x588: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1248/* 0x590: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1249/* 0x598: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1250/* 0x5a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1251/* 0x5a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1252/* 0x5b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1253/* 0x5b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b,
     1254/* 0x5c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1255/* 0x5c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1256/* 0x5d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1257/* 0x5d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d,
     1258/* 0x5e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1259/* 0x5e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e,
     1260/* 0x5f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x5f,
     1261/* 0x5f8: */  0x00, 0x40, 0x40, 0x5f, 0x5c, 0x5f, 0x5f, 0x5f,
     1262/* 0x600: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1263/* 0x608: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1264/* 0x610: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1265/* 0x618: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1266/* 0x620: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1267/* 0x628: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1268/* 0x630: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1269/* 0x638: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1270/* 0x640: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1271/* 0x648: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1272/* 0x650: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1273/* 0x658: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1274/* 0x660: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1275/* 0x668: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1276/* 0x670: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1277/* 0x678: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67,
     1278/* 0x680: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1279/* 0x688: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1280/* 0x690: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1281/* 0x698: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1282/* 0x6a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1283/* 0x6a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1284/* 0x6b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1285/* 0x6b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6b,
     1286/* 0x6c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1287/* 0x6c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1288/* 0x6d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1289/* 0x6d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x6d,
     1290/* 0x6e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
     1291/* 0x6e8: */  0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x6e,
     1292/* 0x6f0: */  0x00, 0x00, 0x00, 0x40, 0x00, 0x60, 0x60, 0x6f,
     1293/* 0x6f8: */  0x00, 0x60, 0x60, 0x6f, 0x60, 0x6f, 0x6f, 0x6f,
     1294/* 0x700: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1295/* 0x708: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1296/* 0x710: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1297/* 0x718: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
     1298/* 0x720: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1299/* 0x728: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
     1300/* 0x730: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
     1301/* 0x738: */  0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x60, 0x73,
     1302/* 0x740: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1303/* 0x748: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
     1304/* 0x750: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
     1305/* 0x758: */  0x00, 0x00, 0x00, 0x40, 0x00, 0x60, 0x60, 0x75,
     1306/* 0x760: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
     1307/* 0x768: */  0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x76,
     1308/* 0x770: */  0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x77,
     1309/* 0x778: */  0x00, 0x70, 0x70, 0x77, 0x70, 0x77, 0x77, 0x77,
     1310/* 0x780: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1311/* 0x788: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
     1312/* 0x790: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
     1313/* 0x798: */  0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x79,
     1314/* 0x7a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
     1315/* 0x7a8: */  0x00, 0x00, 0x00, 0x60, 0x00, 0x70, 0x70, 0x7a,
     1316/* 0x7b0: */  0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x70, 0x7b,
     1317/* 0x7b8: */  0x40, 0x70, 0x70, 0x7b, 0x78, 0x7b, 0x7b, 0x7b,
     1318/* 0x7c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
     1319/* 0x7c8: */  0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x70, 0x7c,
     1320/* 0x7d0: */  0x00, 0x00, 0x00, 0x70, 0x40, 0x70, 0x70, 0x7d,
     1321/* 0x7d8: */  0x40, 0x70, 0x78, 0x7d, 0x78, 0x7d, 0x7d, 0x7d,
     1322/* 0x7e0: */  0x00, 0x40, 0x40, 0x78, 0x60, 0x78, 0x78, 0x7e,
     1323/* 0x7e8: */  0x60, 0x78, 0x78, 0x7e, 0x7c, 0x7e, 0x7e, 0x7e,
     1324/* 0x7f0: */  0x70, 0x7c, 0x7c, 0x7f, 0x7e, 0x7f, 0x7f, 0x7f,
     1325/* 0x7f8: */  0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
     1326/* 0x800: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1327/* 0x808: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1328/* 0x810: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1329/* 0x818: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1330/* 0x820: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1331/* 0x828: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1332/* 0x830: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1333/* 0x838: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1334/* 0x840: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1335/* 0x848: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1336/* 0x850: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1337/* 0x858: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1338/* 0x860: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1339/* 0x868: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1340/* 0x870: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1341/* 0x878: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1342/* 0x880: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1343/* 0x888: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1344/* 0x890: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1345/* 0x898: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1346/* 0x8a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1347/* 0x8a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1348/* 0x8b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1349/* 0x8b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1350/* 0x8c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1351/* 0x8c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1352/* 0x8d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1353/* 0x8d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1354/* 0x8e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1355/* 0x8e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1356/* 0x8f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1357/* 0x8f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
     1358/* 0x900: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1359/* 0x908: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1360/* 0x910: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1361/* 0x918: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1362/* 0x920: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1363/* 0x928: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1364/* 0x930: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1365/* 0x938: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1366/* 0x940: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1367/* 0x948: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1368/* 0x950: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1369/* 0x958: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1370/* 0x960: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1371/* 0x968: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1372/* 0x970: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1373/* 0x978: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
     1374/* 0x980: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1375/* 0x988: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1376/* 0x990: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1377/* 0x998: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1378/* 0x9a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1379/* 0x9a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1380/* 0x9b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1381/* 0x9b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
     1382/* 0x9c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1383/* 0x9c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1384/* 0x9d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1385/* 0x9d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1386/* 0x9e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1387/* 0x9e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1388/* 0x9f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1389/* 0x9f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x1f,
     1390/* 0xa00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1391/* 0xa08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1392/* 0xa10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1393/* 0xa18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1394/* 0xa20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1395/* 0xa28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1396/* 0xa30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1397/* 0xa38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1398/* 0xa40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1399/* 0xa48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1400/* 0xa50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1401/* 0xa58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1402/* 0xa60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1403/* 0xa68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1404/* 0xa70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1405/* 0xa78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
     1406/* 0xa80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1407/* 0xa88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1408/* 0xa90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1409/* 0xa98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1410/* 0xaa0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1411/* 0xaa8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1412/* 0xab0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1413/* 0xab8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
     1414/* 0xac0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1415/* 0xac8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1416/* 0xad0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1417/* 0xad8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1418/* 0xae0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1419/* 0xae8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1420/* 0xaf0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1421/* 0xaf8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f,
     1422/* 0xb00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1423/* 0xb08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1424/* 0xb10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1425/* 0xb18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1426/* 0xb20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1427/* 0xb28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1428/* 0xb30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1429/* 0xb38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1430/* 0xb40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1431/* 0xb48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1432/* 0xb50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1433/* 0xb58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1434/* 0xb60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1435/* 0xb68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1436/* 0xb70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1437/* 0xb78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37,
     1438/* 0xb80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1439/* 0xb88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1440/* 0xb90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1441/* 0xb98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1442/* 0xba0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1443/* 0xba8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1444/* 0xbb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1445/* 0xbb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3b,
     1446/* 0xbc0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1447/* 0xbc8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1448/* 0xbd0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1449/* 0xbd8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d,
     1450/* 0xbe0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1451/* 0xbe8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e,
     1452/* 0xbf0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x3f,
     1453/* 0xbf8: */  0x00, 0x30, 0x38, 0x3f, 0x3e, 0x3f, 0x3f, 0x3f,
     1454/* 0xc00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1455/* 0xc08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1456/* 0xc10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1457/* 0xc18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1458/* 0xc20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1459/* 0xc28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1460/* 0xc30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1461/* 0xc38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1462/* 0xc40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1463/* 0xc48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1464/* 0xc50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1465/* 0xc58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1466/* 0xc60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1467/* 0xc68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1468/* 0xc70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1469/* 0xc78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
     1470/* 0xc80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1471/* 0xc88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1472/* 0xc90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1473/* 0xc98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1474/* 0xca0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1475/* 0xca8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1476/* 0xcb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1477/* 0xcb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1478/* 0xcc0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1479/* 0xcc8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1480/* 0xcd0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1481/* 0xcd8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1482/* 0xce0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1483/* 0xce8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1484/* 0xcf0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1485/* 0xcf8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4f,
     1486/* 0xd00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1487/* 0xd08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1488/* 0xd10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1489/* 0xd18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1490/* 0xd20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1491/* 0xd28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1492/* 0xd30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1493/* 0xd38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1494/* 0xd40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1495/* 0xd48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1496/* 0xd50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1497/* 0xd58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1498/* 0xd60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1499/* 0xd68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1500/* 0xd70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1501/* 0xd78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57,
     1502/* 0xd80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1503/* 0xd88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1504/* 0xd90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1505/* 0xd98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1506/* 0xda0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1507/* 0xda8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1508/* 0xdb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1509/* 0xdb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b,
     1510/* 0xdc0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1511/* 0xdc8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1512/* 0xdd0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1513/* 0xdd8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d,
     1514/* 0xde0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1515/* 0xde8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e,
     1516/* 0xdf0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x5f,
     1517/* 0xdf8: */  0x00, 0x40, 0x40, 0x5f, 0x5c, 0x5f, 0x5f, 0x5f,
     1518/* 0xe00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1519/* 0xe08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1520/* 0xe10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1521/* 0xe18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1522/* 0xe20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1523/* 0xe28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1524/* 0xe30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1525/* 0xe38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1526/* 0xe40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1527/* 0xe48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1528/* 0xe50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1529/* 0xe58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1530/* 0xe60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1531/* 0xe68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1532/* 0xe70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1533/* 0xe78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x67,
     1534/* 0xe80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1535/* 0xe88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1536/* 0xe90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1537/* 0xe98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1538/* 0xea0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1539/* 0xea8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1540/* 0xeb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1541/* 0xeb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6b,
     1542/* 0xec0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1543/* 0xec8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1544/* 0xed0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1545/* 0xed8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6d,
     1546/* 0xee0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
     1547/* 0xee8: */  0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x6e,
     1548/* 0xef0: */  0x00, 0x00, 0x00, 0x40, 0x00, 0x60, 0x60, 0x6f,
     1549/* 0xef8: */  0x00, 0x60, 0x60, 0x6f, 0x60, 0x6f, 0x6f, 0x6f,
     1550/* 0xf00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1551/* 0xf08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1552/* 0xf10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1553/* 0xf18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
     1554/* 0xf20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1555/* 0xf28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
     1556/* 0xf30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
     1557/* 0xf38: */  0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x60, 0x73,
     1558/* 0xf40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1559/* 0xf48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
     1560/* 0xf50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
     1561/* 0xf58: */  0x00, 0x00, 0x00, 0x40, 0x00, 0x60, 0x60, 0x75,
     1562/* 0xf60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
     1563/* 0xf68: */  0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x76,
     1564/* 0xf70: */  0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x77,
     1565/* 0xf78: */  0x00, 0x70, 0x70, 0x77, 0x70, 0x77, 0x77, 0x77,
     1566/* 0xf80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1567/* 0xf88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
     1568/* 0xf90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
     1569/* 0xf98: */  0x00, 0x00, 0x00, 0x60, 0x00, 0x60, 0x60, 0x79,
     1570/* 0xfa0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
     1571/* 0xfa8: */  0x00, 0x00, 0x00, 0x60, 0x00, 0x70, 0x70, 0x7a,
     1572/* 0xfb0: */  0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x70, 0x7b,
     1573/* 0xfb8: */  0x40, 0x70, 0x70, 0x7b, 0x78, 0x7b, 0x7b, 0x7b,
     1574/* 0xfc0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
     1575/* 0xfc8: */  0x00, 0x00, 0x00, 0x70, 0x00, 0x70, 0x70, 0x7c,
     1576/* 0xfd0: */  0x00, 0x00, 0x00, 0x70, 0x40, 0x70, 0x70, 0x7d,
     1577/* 0xfd8: */  0x40, 0x70, 0x78, 0x7d, 0x78, 0x7d, 0x7d, 0x7d,
     1578/* 0xfe0: */  0x00, 0x40, 0x40, 0x78, 0x60, 0x78, 0x78, 0x7e,
     1579/* 0xfe8: */  0x60, 0x78, 0x78, 0x7e, 0x7c, 0x7e, 0x7e, 0x7e,
     1580/* 0xff0: */  0x70, 0x7c, 0x7c, 0x7f, 0x7c, 0x7f, 0x7f, 0x7f,
     1581/* 0xff8: */  0x7e, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
     1582};
     1583
     1584reg8 WaveformGenerator::wave6581_PST[] =
     1585{
     1586/* 0x000: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1587/* 0x008: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1588/* 0x010: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1589/* 0x018: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1590/* 0x020: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1591/* 0x028: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1592/* 0x030: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1593/* 0x038: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1594/* 0x040: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1595/* 0x048: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1596/* 0x050: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1597/* 0x058: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1598/* 0x060: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1599/* 0x068: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1600/* 0x070: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1601/* 0x078: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1602/* 0x080: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1603/* 0x088: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1604/* 0x090: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1605/* 0x098: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1606/* 0x0a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1607/* 0x0a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1608/* 0x0b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1609/* 0x0b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1610/* 0x0c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1611/* 0x0c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1612/* 0x0d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1613/* 0x0d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1614/* 0x0e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1615/* 0x0e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1616/* 0x0f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1617/* 0x0f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1618/* 0x100: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1619/* 0x108: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1620/* 0x110: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1621/* 0x118: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1622/* 0x120: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1623/* 0x128: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1624/* 0x130: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1625/* 0x138: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1626/* 0x140: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1627/* 0x148: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1628/* 0x150: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1629/* 0x158: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1630/* 0x160: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1631/* 0x168: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1632/* 0x170: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1633/* 0x178: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1634/* 0x180: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1635/* 0x188: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1636/* 0x190: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1637/* 0x198: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1638/* 0x1a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1639/* 0x1a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1640/* 0x1b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1641/* 0x1b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1642/* 0x1c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1643/* 0x1c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1644/* 0x1d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1645/* 0x1d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1646/* 0x1e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1647/* 0x1e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1648/* 0x1f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1649/* 0x1f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1650/* 0x200: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1651/* 0x208: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1652/* 0x210: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1653/* 0x218: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1654/* 0x220: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1655/* 0x228: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1656/* 0x230: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1657/* 0x238: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1658/* 0x240: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1659/* 0x248: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1660/* 0x250: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1661/* 0x258: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1662/* 0x260: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1663/* 0x268: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1664/* 0x270: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1665/* 0x278: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1666/* 0x280: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1667/* 0x288: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1668/* 0x290: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1669/* 0x298: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1670/* 0x2a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1671/* 0x2a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1672/* 0x2b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1673/* 0x2b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1674/* 0x2c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1675/* 0x2c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1676/* 0x2d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1677/* 0x2d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1678/* 0x2e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1679/* 0x2e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1680/* 0x2f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1681/* 0x2f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1682/* 0x300: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1683/* 0x308: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1684/* 0x310: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1685/* 0x318: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1686/* 0x320: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1687/* 0x328: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1688/* 0x330: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1689/* 0x338: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1690/* 0x340: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1691/* 0x348: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1692/* 0x350: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1693/* 0x358: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1694/* 0x360: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1695/* 0x368: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1696/* 0x370: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1697/* 0x378: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1698/* 0x380: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1699/* 0x388: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1700/* 0x390: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1701/* 0x398: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1702/* 0x3a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1703/* 0x3a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1704/* 0x3b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1705/* 0x3b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1706/* 0x3c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1707/* 0x3c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1708/* 0x3d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1709/* 0x3d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1710/* 0x3e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1711/* 0x3e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1712/* 0x3f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1713/* 0x3f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
     1714/* 0x400: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1715/* 0x408: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1716/* 0x410: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1717/* 0x418: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1718/* 0x420: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1719/* 0x428: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1720/* 0x430: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1721/* 0x438: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1722/* 0x440: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1723/* 0x448: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1724/* 0x450: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1725/* 0x458: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1726/* 0x460: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1727/* 0x468: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1728/* 0x470: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1729/* 0x478: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1730/* 0x480: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1731/* 0x488: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1732/* 0x490: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1733/* 0x498: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1734/* 0x4a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1735/* 0x4a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1736/* 0x4b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1737/* 0x4b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1738/* 0x4c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1739/* 0x4c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1740/* 0x4d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1741/* 0x4d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1742/* 0x4e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1743/* 0x4e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1744/* 0x4f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1745/* 0x4f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1746/* 0x500: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1747/* 0x508: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1748/* 0x510: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1749/* 0x518: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1750/* 0x520: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1751/* 0x528: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1752/* 0x530: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1753/* 0x538: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1754/* 0x540: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1755/* 0x548: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1756/* 0x550: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1757/* 0x558: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1758/* 0x560: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1759/* 0x568: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1760/* 0x570: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1761/* 0x578: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1762/* 0x580: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1763/* 0x588: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1764/* 0x590: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1765/* 0x598: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1766/* 0x5a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1767/* 0x5a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1768/* 0x5b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1769/* 0x5b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1770/* 0x5c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1771/* 0x5c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1772/* 0x5d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1773/* 0x5d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1774/* 0x5e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1775/* 0x5e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1776/* 0x5f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1777/* 0x5f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1778/* 0x600: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1779/* 0x608: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1780/* 0x610: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1781/* 0x618: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1782/* 0x620: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1783/* 0x628: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1784/* 0x630: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1785/* 0x638: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1786/* 0x640: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1787/* 0x648: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1788/* 0x650: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1789/* 0x658: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1790/* 0x660: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1791/* 0x668: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1792/* 0x670: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1793/* 0x678: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1794/* 0x680: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1795/* 0x688: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1796/* 0x690: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1797/* 0x698: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1798/* 0x6a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1799/* 0x6a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1800/* 0x6b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1801/* 0x6b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1802/* 0x6c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1803/* 0x6c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1804/* 0x6d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1805/* 0x6d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1806/* 0x6e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1807/* 0x6e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1808/* 0x6f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1809/* 0x6f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1810/* 0x700: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1811/* 0x708: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1812/* 0x710: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1813/* 0x718: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1814/* 0x720: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1815/* 0x728: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1816/* 0x730: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1817/* 0x738: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1818/* 0x740: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1819/* 0x748: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1820/* 0x750: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1821/* 0x758: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1822/* 0x760: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1823/* 0x768: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1824/* 0x770: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1825/* 0x778: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1826/* 0x780: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1827/* 0x788: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1828/* 0x790: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1829/* 0x798: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1830/* 0x7a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1831/* 0x7a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1832/* 0x7b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1833/* 0x7b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1834/* 0x7c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1835/* 0x7c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1836/* 0x7d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1837/* 0x7d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1838/* 0x7e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1839/* 0x7e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
     1840/* 0x7f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
     1841/* 0x7f8: */  0x00, 0x00, 0x00, 0x78, 0x78, 0x7e, 0x7f, 0x7f,
     1842/* 0x800: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1843/* 0x808: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1844/* 0x810: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1845/* 0x818: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1846/* 0x820: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1847/* 0x828: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1848/* 0x830: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1849/* 0x838: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1850/* 0x840: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1851/* 0x848: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1852/* 0x850: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1853/* 0x858: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1854/* 0x860: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1855/* 0x868: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1856/* 0x870: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1857/* 0x878: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1858/* 0x880: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1859/* 0x888: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1860/* 0x890: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1861/* 0x898: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1862/* 0x8a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1863/* 0x8a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1864/* 0x8b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1865/* 0x8b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1866/* 0x8c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1867/* 0x8c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1868/* 0x8d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1869/* 0x8d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1870/* 0x8e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1871/* 0x8e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1872/* 0x8f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1873/* 0x8f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1874/* 0x900: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1875/* 0x908: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1876/* 0x910: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1877/* 0x918: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1878/* 0x920: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1879/* 0x928: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1880/* 0x930: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1881/* 0x938: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1882/* 0x940: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1883/* 0x948: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1884/* 0x950: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1885/* 0x958: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1886/* 0x960: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1887/* 0x968: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1888/* 0x970: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1889/* 0x978: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1890/* 0x980: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1891/* 0x988: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1892/* 0x990: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1893/* 0x998: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1894/* 0x9a0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1895/* 0x9a8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1896/* 0x9b0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1897/* 0x9b8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1898/* 0x9c0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1899/* 0x9c8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1900/* 0x9d0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1901/* 0x9d8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1902/* 0x9e0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1903/* 0x9e8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1904/* 0x9f0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1905/* 0x9f8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1906/* 0xa00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1907/* 0xa08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1908/* 0xa10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1909/* 0xa18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1910/* 0xa20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1911/* 0xa28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1912/* 0xa30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1913/* 0xa38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1914/* 0xa40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1915/* 0xa48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1916/* 0xa50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1917/* 0xa58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1918/* 0xa60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1919/* 0xa68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1920/* 0xa70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1921/* 0xa78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1922/* 0xa80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1923/* 0xa88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1924/* 0xa90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1925/* 0xa98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1926/* 0xaa0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1927/* 0xaa8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1928/* 0xab0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1929/* 0xab8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1930/* 0xac0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1931/* 0xac8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1932/* 0xad0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1933/* 0xad8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1934/* 0xae0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1935/* 0xae8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1936/* 0xaf0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1937/* 0xaf8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1938/* 0xb00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1939/* 0xb08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1940/* 0xb10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1941/* 0xb18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1942/* 0xb20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1943/* 0xb28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1944/* 0xb30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1945/* 0xb38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1946/* 0xb40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1947/* 0xb48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1948/* 0xb50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1949/* 0xb58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1950/* 0xb60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1951/* 0xb68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1952/* 0xb70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1953/* 0xb78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1954/* 0xb80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1955/* 0xb88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1956/* 0xb90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1957/* 0xb98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1958/* 0xba0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1959/* 0xba8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1960/* 0xbb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1961/* 0xbb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1962/* 0xbc0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1963/* 0xbc8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1964/* 0xbd0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1965/* 0xbd8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1966/* 0xbe0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1967/* 0xbe8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1968/* 0xbf0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1969/* 0xbf8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f,
     1970/* 0xc00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1971/* 0xc08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1972/* 0xc10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1973/* 0xc18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1974/* 0xc20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1975/* 0xc28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1976/* 0xc30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1977/* 0xc38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1978/* 0xc40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1979/* 0xc48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1980/* 0xc50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1981/* 0xc58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1982/* 0xc60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1983/* 0xc68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1984/* 0xc70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1985/* 0xc78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1986/* 0xc80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1987/* 0xc88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1988/* 0xc90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1989/* 0xc98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1990/* 0xca0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1991/* 0xca8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1992/* 0xcb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1993/* 0xcb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1994/* 0xcc0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1995/* 0xcc8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1996/* 0xcd0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1997/* 0xcd8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1998/* 0xce0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     1999/* 0xce8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2000/* 0xcf0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2001/* 0xcf8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2002/* 0xd00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2003/* 0xd08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2004/* 0xd10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2005/* 0xd18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2006/* 0xd20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2007/* 0xd28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2008/* 0xd30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2009/* 0xd38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2010/* 0xd40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2011/* 0xd48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2012/* 0xd50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2013/* 0xd58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2014/* 0xd60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2015/* 0xd68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2016/* 0xd70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2017/* 0xd78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2018/* 0xd80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2019/* 0xd88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2020/* 0xd90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2021/* 0xd98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2022/* 0xda0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2023/* 0xda8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2024/* 0xdb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2025/* 0xdb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2026/* 0xdc0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2027/* 0xdc8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2028/* 0xdd0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2029/* 0xdd8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2030/* 0xde0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2031/* 0xde8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2032/* 0xdf0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2033/* 0xdf8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2034/* 0xe00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2035/* 0xe08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2036/* 0xe10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2037/* 0xe18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2038/* 0xe20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2039/* 0xe28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2040/* 0xe30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2041/* 0xe38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2042/* 0xe40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2043/* 0xe48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2044/* 0xe50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2045/* 0xe58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2046/* 0xe60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2047/* 0xe68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2048/* 0xe70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2049/* 0xe78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2050/* 0xe80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2051/* 0xe88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2052/* 0xe90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2053/* 0xe98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2054/* 0xea0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2055/* 0xea8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2056/* 0xeb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2057/* 0xeb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2058/* 0xec0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2059/* 0xec8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2060/* 0xed0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2061/* 0xed8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2062/* 0xee0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2063/* 0xee8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2064/* 0xef0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2065/* 0xef8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2066/* 0xf00: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2067/* 0xf08: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2068/* 0xf10: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2069/* 0xf18: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2070/* 0xf20: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2071/* 0xf28: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2072/* 0xf30: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2073/* 0xf38: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2074/* 0xf40: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2075/* 0xf48: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2076/* 0xf50: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2077/* 0xf58: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2078/* 0xf60: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2079/* 0xf68: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2080/* 0xf70: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2081/* 0xf78: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2082/* 0xf80: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2083/* 0xf88: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2084/* 0xf90: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2085/* 0xf98: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2086/* 0xfa0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2087/* 0xfa8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2088/* 0xfb0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2089/* 0xfb8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2090/* 0xfc0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2091/* 0xfc8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2092/* 0xfd0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2093/* 0xfd8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2094/* 0xfe0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     2095/* 0xfe8: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
     2096/* 0xff0: */  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30,
     2097/* 0xff8: */  0x00, 0x00, 0x00, 0x78, 0x78, 0x7e, 0x7f, 0x7f,
     2098};
     2099
     2100}
     2101 No newline at end of file