Annotation of hatari/src/psg.c, revision 1.1.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.