Annotation of hatari/src/psg.c, revision 1.1

1.1     ! root        1: /*
        !             2:   Hatari
        !             3: 
        !             4:   Programmable Sound Generator (YM-2149) - PSG
        !             5: */
        !             6: 
        !             7: #include "main.h"
        !             8: #include "memAlloc.h"
        !             9: #include "memorySnapShot.h"
        !            10: #include "sound.h"
        !            11: 
        !            12: unsigned char PSGRegisterSelect = 0;                  /* 0xff8800 (read/write) */
        !            13: unsigned char PSGRegisters[16] = { 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0 };  /* Register in PSG, see PSG_REG_xxxx */
        !            14: 
        !            15: 
        !            16: /*-----------------------------------------------------------------------*/
        !            17: /*
        !            18:   Reset variables used in PSG
        !            19: */
        !            20: void PSG_Reset(void)
        !            21: {
        !            22:   PSGRegisterSelect = 0;
        !            23:   Memory_Clear(PSGRegisters,sizeof(unsigned char)*16);
        !            24: }
        !            25: 
        !            26: //-----------------------------------------------------------------------
        !            27: /*
        !            28:   Save/Restore snapshot of local variables('MemorySnapShot_Store' handles type)
        !            29: */
        !            30: void PSG_MemorySnapShot_Capture(BOOL bSave)
        !            31: {
        !            32:   // Save/Restore details
        !            33:   MemorySnapShot_Store(&PSGRegisterSelect,sizeof(PSGRegisterSelect));
        !            34:   MemorySnapShot_Store(PSGRegisters,sizeof(PSGRegisters));
        !            35: }
        !            36: 
        !            37: //-----------------------------------------------------------------------
        !            38: /*
        !            39:   Write byte to 0xff88000, this is used as a selector for when we read/write to address 0xff8802
        !            40: */
        !            41: void PSG_WriteSelectRegister(unsigned short v)
        !            42: {
        !            43:  PSGRegisterSelect = v & 0x0f;              /* Store register to select (value in bits 0-3) */
        !            44: }
        !            45: 
        !            46: //-----------------------------------------------------------------------
        !            47: /*
        !            48:   Read byte from 0xff8800, returns to PSG data
        !            49: */
        !            50: unsigned short PSG_ReadSelectRegister(void)
        !            51: {
        !            52:  // Read data last selected by register
        !            53:  return PSGRegisters[PSGRegisterSelect];    /* Return value from PSGRegisters[] */
        !            54: }
        !            55: 
        !            56: //-----------------------------------------------------------------------
        !            57: /*
        !            58:   Write byte to 0xff8802, stores according to PSG select register(write 0xff8800)
        !            59: */
        !            60: void PSG_WriteDataRegister(unsigned short bl)
        !            61: {
        !            62:  Sound_Update();                            /* Create samples up until this point with current values */
        !            63:  PSGRegisters[PSGRegisterSelect]=bl;        /* Write value to PSGRegisters[] */
        !            64:  if( PSGRegisterSelect==13 )                /* Whenever 'write' to register 13, cause envelope to reset */
        !            65:   {
        !            66:    bEnvelopeFreqFlag = TRUE;
        !            67:    bWriteEnvelopeFreq = TRUE;
        !            68:   }
        !            69:  /* Check registers 8,9 and 10 which are 'amplitude' for each channel and store if wrote to(to check for sample playback) */
        !            70:  if( PSGRegisterSelect==8 )
        !            71:    bWriteChannelAAmp=TRUE;
        !            72:  else if( PSGRegisterSelect==9 )
        !            73:    bWriteChannelBAmp=TRUE;
        !            74:  else if( PSGRegisterSelect==10 )
        !            75:    bWriteChannelCAmp=TRUE;
        !            76: }
        !            77: 
        !            78: //-----------------------------------------------------------------------
        !            79: /*
        !            80:   Read byte from 0xff8802, returns 0xff
        !            81: */
        !            82: unsigned short PSG_ReadDataRegister(void)
        !            83: {
        !            84:  return 0xff;
        !            85: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.