⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 play_vcd.c

📁 手机8032的完整代码。吐血推荐。小做改动就可以生产。
💻 C
📖 第 1 页 / 共 4 页
字号:
  {
    vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }
#endif

  /* for CDDA track */
  if (bSharedInfo(SI_A_CODE_MODE) == SV_A_CODE_PCM)
  {
    vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }

#ifdef VCD_MENU_NO_ZOOM_IN
  if (bSharedInfo(SI_TRACK_NO) == 0)
  {
    vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }
  else
#endif /* VCD_MENU_NO_ZOOM_IN */
  {
    bZoom = bSharedInfo(SI_ZOOM_SWITCH);

  #ifdef ENABLE_ZOOM_USER_MODE
    if (bZoom == SV_ZOOM_USR)
    {
      vSendUopCmd(UOP_ZOOM_IN, SV_ZOOM_OFF, 0, 0);
      return (UOP_OK);
    }
  #endif

    // get next zoom mode
#ifdef SIMPLE_ZOOM_MODE
    for (bIdx = 0; bIdx < VCD_ZOOM_USED_MODE; bIdx++)
    {
      if (pbVcdZoomMode[bIdx] > bZoom)
      {
        bZoom = pbVcdZoomMode[bIdx];
        break;
      }
    }
    
    if (bIdx == VCD_ZOOM_USED_MODE)
    {
      bZoom = SV_ZOOM_IN_MAX + 1;
    }
#else
    bZoom += 1;
#endif

    if (bZoom > SV_ZOOM_IN_MAX)
    {
  #ifdef ZOOM_IN_OUT_SAME_KEY
      fgSetPlayPostKey(IR_ZOOM_OUT);
      return (UOP_OK);
  #else
      bZoom = SV_ZOOM_OFF;
  #endif
    }
    else if (bZoom < SV_ZOOM_IN_MIN)
    {
      bZoom = SV_ZOOM_IN_MIN;
    }
  }

  vSendUopCmd(UOP_ZOOM_IN, bZoom, 0, 0);

  return (UOP_OK);
}

#ifndef DISABLE_ZOOM_OUT
BOOL fgVCDZoomOutKey(void) large
{
  BYTE bZoom;
#ifdef SIMPLE_ZOOM_MODE
  BYTE bIdx;
#endif
#ifdef ZOOM_NO_SLOW_STEP
  BYTE bPbcState = bSharedInfo(SI_PBC_STATE);

  if (
#if ((!defined DISABLE_SF) && (!defined DISABLE_SR))   	
  	  (bPbcState == SV_SF) || (bPbcState == SV_SR) ||
#endif  	  
      (bPbcState == SV_STEP) || (bPbcState == SV_STEP_BACK))
  {
    vOsdShowError(SV_ERR_NORMAL_PLAY_ONLY, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }
#endif

#ifdef VCD_MENU_NO_ZOOM_OUT
  if (bSharedInfo(SI_TRACK_NO) == 0)
  {
    bZoom = SV_ZOOM_OFF;
  #ifdef VCD_MENU_NO_ZOOM_IN
    vOsdShowError(SV_ERR_INVALID_OPERATION, OSD_TIMEOUT_SHORT);
  #endif
  }
  else
#endif /* VCD_MENU_NO_ZOOM_OUT */
  {
    bZoom = bSharedInfo(SI_ZOOM_SWITCH);

#ifdef ENABLE_ZOOM_USER_MODE
    if (bZoom == SV_ZOOM_USR)
    {
      vSendUopCmd(UOP_ZOOM_IN, SV_ZOOM_OFF, 0, 0);
      return (UOP_OK);
    }
#endif

    // get next zoom mode
#ifdef SIMPLE_ZOOM_MODE
    for (bIdx = 0; bIdx < VCD_ZOOM_USED_MODE; bIdx++)
    {
      if (pbVcdZoomMode[bIdx] > bZoom)
      {
        bZoom = pbVcdZoomMode[bIdx];
        break;
      }
    }
    
    if (bIdx == VCD_ZOOM_USED_MODE)
    {
      bZoom = SV_ZOOM_OUT_MAX + 1;
    }
#else
    bZoom += 1;
#endif

    if (bZoom > SV_ZOOM_OUT_MAX)
    {
      bZoom = SV_ZOOM_OFF;
    }
    else if (bZoom < SV_ZOOM_OUT_MIN)
    {
      bZoom = SV_ZOOM_OUT_MIN;
    }
  }

  vSendUopCmd(UOP_ZOOM_IN, bZoom, 0, 0);

  return (UOP_OK);
}
#endif /*#ifndef DISABLE_ZOOM_OUT */

#ifdef ENABLE_ZOOM_USER_MODE
BOOL fgVCDZoomUsrKey(void) large
{
  #ifdef ZOOM_NO_SLOW_STEP
  BYTE bPbcState = bSharedInfo(SI_PBC_STATE);

  if (
#if ((!defined DISABLE_SF) && (!defined DISABLE_SR))   	
  	  (bPbcState == SV_SF) || (bPbcState == SV_SR) ||
#endif  	  
      (bPbcState == SV_STEP) || (bPbcState == SV_STEP_BACK))
  {
    vOsdShowError(SV_ERR_NORMAL_PLAY_ONLY, OSD_TIMEOUT_SHORT);
    return (UOP_OK);
  }
  #endif

  if (bSharedInfo(SI_ZOOM_SWITCH) != SV_ZOOM_USR)
  {
    vSendUopCmd(UOP_ZOOM_IN, SV_ZOOM_USR, ZOOM_USR_H_BASE, ZOOM_USR_V_BASE);
  }
  else
  {
    vSendUopCmd(UOP_ZOOM_IN, SV_ZOOM_OFF, 0, 0);
  }

  return (UOP_OK);
}
#endif /* ENABLE_ZOOM_USER_MODE */

#ifdef PLAYER_VRMT
BOOL fgVCDVremoteKey(void) large
{
  vChangeInputState(INPUT_STATE_VREMOTE, FALSE);
  return (UOP_OK);
}
#endif /* PLAYER_VRMT */

#endif /* VCD_SUPPORT */

/* @GE@ : add for Joystick&Game CD, end */
//test
#ifdef GAME_EMULATOR_SUPPORT
#include "..\..\..\pindef.h"
#define TIMER_JS_CNT 5

#ifdef SZ_BOARD_V6
#define GAME_LOAD_PIN PIN_ARF //
#define GAME_CLK1_PIN PIN_ARS
#define GAME_SDATA1_PIN PIN_ALS //
#define GAME_SDATA2_PIN PIN_ALF
#else
#define GAME_LOAD_PIN PIN_ARF
#define GAME_CLK1_PIN PIN_ARS
//#define GAME_CLK2_PIN PIN_ALS
#define GAME_SDATA1_PIN PIN_ALF
#ifdef SZ_BOARD_V3
#define GAME_SDATA2_PIN PIN_GPIO19 
#else
#define GAME_SDATA2_PIN PIN_GPIO13
#endif
#endif

#ifdef GAME_EMULATOR_NEW_ADDED
#define MULTI_FUNC_KEY_INTER_CNT  20
#define TIMER_JOYSTICK_KEY               5
#endif

#ifdef GAME_SPDIF_FORCE_PCM
BYTE xdata _bSpdifMode;
#endif
extern void vAClkSetting2(BYTE bFs) large;
extern void ChangeSysClk(BYTE bMode);
extern BYTE xdata _bFullClkSet, _bSysClk;

static DWRD xdata dwGame2MSCounter;
static BYTE xdata bCntJsTimer;
static BYTE xdata bOrgFullClkSet;
static BYTE xdata bGcdFullClkSet;
#ifdef SZ_BOARD_V6
BYTE xdata _bCntIsGameTimer = 100;
static WORD xdata _wCntNotGameTimer = 0;
extern BYTE xdata _fgIsGameDisc;
extern BYTE xdata _fgNotGameDisc;
#endif

#define GAME_HIGH 1
#define GAME_LOW 0
#define vGameWritePin(Pin, bData) vSrvWritePin0(Pin, bData)
#define bGameReadPin(Pin) bSrvReadPin0(Pin)
#define vGameInitPin(Pin, fgInput) vSrvInitPin0(Pin, fgInput)
#define GAME_OUTPUT FALSE
#define GAME_INPUT TRUE

static code WORD _wJs1SPos[]= { SI_JS1_A, SI_JS1_B, SI_JS1_SELECT, SI_JS1_START,
SI_JS1_UP, SI_JS1_DOWN, SI_JS1_LEFT, SI_JS1_RIGHT };

static code WORD _wJs2SPos[]= { SI_JS2_A, SI_JS2_B, SI_JS2_SELECT, SI_JS2_START,
SI_JS2_UP, SI_JS2_DOWN, SI_JS2_LEFT, SI_JS2_RIGHT };

static code WORD _wJs2IR[] = {IR_ENTER, IR_NONE, IR_NONE, IR_NONE,IR_UP, IR_DOWN, IR_PREV, IR_NEXT};

//This function transfers the Joystick key into our IR Key
void vJsToIRKey(void)
{
  BYTE i;
  
  if (bSharedInfo(SI_GCD_PLAYING))        //The game is playing
  {
     if ((bSharedInfo(SI_JS1_B) == 1) || (bSharedInfo(SI_JS1_SELECT) == 1))
     {
         _bMultKeyTimer = MULTI_FUNC_KEY_INTER_CNT;  //Set the interval between JS B and JS select
         if (bSharedInfo(SI_JS1_B) == 1)
        {
	     _bJoyStickStart = 1;       //Start Key has been pressed
         }
         else
         {
	      _bJoyStickSelect = 1;    //Select key has been pressed
         } 
      }
   }
   else if ((_bJoyStickKeyTimer == 0) && (bSharedInfo(SI_GCD_DISC)))      //In game menu
   {
      _bJoyStickKeyTimer = 12;        //Set the interval between the control JS key
	for (i = 0;i <8;i++)
	{
	    if (bSharedInfo(_wJs1SPos[i]) == 1)
	    {
	         _bIRKey0 = _wJs2IR[i];
		  _fgIRKeyValid = TRUE;
		  break;
	    }
	} 
  }
  else
      _bJoyStickKeyTimer--;

}
void vFcJsLoop(void)
{
  BYTE i, bData;
  BYTE bInputKey1 = 0, bInputKey2 = 0;
  
    vGameInitPin(GAME_LOAD_PIN, GAME_OUTPUT);
    vGameInitPin(GAME_CLK1_PIN, GAME_OUTPUT);
  //vGameInitPin(GAME_CLK2_PIN, GAME_OUTPUT);
    vGameInitPin(GAME_SDATA1_PIN, GAME_INPUT);
    vGameInitPin(GAME_SDATA2_PIN, GAME_INPUT);
  
     vGameWritePin(GAME_LOAD_PIN, GAME_LOW);
     vGameWritePin(GAME_CLK1_PIN, GAME_HIGH);
     vGameWritePin(GAME_CLK1_PIN, GAME_HIGH);
 
    vGameWritePin(GAME_LOAD_PIN, GAME_LOW);
    
    vGameWritePin(GAME_LOAD_PIN, GAME_HIGH);
    vGameWritePin(GAME_LOAD_PIN, GAME_HIGH);
    vGameWritePin(GAME_LOAD_PIN, GAME_LOW);
    vGameWritePin(GAME_LOAD_PIN, GAME_LOW);
#if 0
  for(i = 0; i < 8;i++)
  {
    bGameReadPin(GAME_SDATA1_PIN);
    bData = !bData;
    bInputKey1 |= bData<<i;
    //send clk1
    vGameWritePin(GAME_CLK1_PIN, GAME_LOW);
    vGameWritePin(GAME_CLK1_PIN, GAME_HIGH);
  }//for

  for(i = 0; i < 8;i++)
  {
    bGameReadPin(GAME_SDATA2_PIN);
    bData = !bData;
    bInputKey2 |= bData<<i;
//send clk2
    vGameWritePin(GAME_CLK2_PIN, GAME_LOW);
    vGameWritePin(GAME_CLK2_PIN, GAME_HIGH);
  }//for
#else

  for(i = 0; i < 8;i++)
  {
    bGameReadPin(GAME_SDATA2_PIN);
    bData = !bData;
    bInputKey2 |= bData<<i;
   //send clk2
   //vGameWritePin(GAME_CLK2_PIN, GAME_LOW);
   //vGameWritePin(GAME_CLK2_PIN, GAME_HIGH);
   
    bGameReadPin(GAME_SDATA1_PIN);
    bData = !bData;
    bInputKey1 |= bData<<i;
    //send clk1
    vGameWritePin(GAME_CLK1_PIN, GAME_LOW);
    vGameWritePin(GAME_CLK1_PIN, GAME_HIGH);

  }//for

#endif    
  //write JoyStick data to share info
  for(i = 0; i < 8;i++)
  {
  	vSetSharedInfo(_wJs1SPos[i], bInputKey1 & 0x1);
  	vSetSharedInfo(_wJs2SPos[i], bInputKey2 & 0x1);
  	bInputKey1>>=1;
  	bInputKey2>>=1;
  }

#ifdef GAME_EMULATOR_NEW_ADDED
   vJsToIRKey();
#endif
 
}
/* @GE@ : add for Joystick&Game CD, end */
void vTimerGame (void) large
{
  if (_rUI.bState != UI_RUN) /*Fix: Power down can't restart */
	return;	

#ifdef SZ_BOARD_V6
  //msz00101 add 19Jun2007
  if(_fgNotGameDisc == TRUE)
  {
    if(_wCntNotGameTimer == 0)
    {  
      vGameWritePin(GAME_LOAD_PIN, GAME_HIGH);
      vGameWritePin(GAME_CLK1_PIN, GAME_HIGH);
    }
    _wCntNotGameTimer ++;
    if(_wCntNotGameTimer == 1500)  // 3s
    {
       _fgNotGameDisc = FALSE;
       _wCntNotGameTimer = 0;
       
       //clear GPIO3, GAME_SW = 0
       InitIoPIN_GPIO3(0);
       WriteIoPIN_GPIO3(0);
    }
  }
#endif

   /* @GE@ : add for Joystick&Game CD, begin */
  if(!(bSharedInfo(SI_GCD_DISC)||(bGetGcdSpeedNotify() == GCD_SPEED_NOTIFY2)))
  	return;
  
  if(bSharedInfo(SI_GCD_PLAYING))  
  {
    vSetSharedInfo(SI_GCD_TIME_COUNTER, (BYTE)dwGame2MSCounter);
    vSetSharedInfo(SI_GCD_TIME_COUNTER+1, (BYTE)(dwGame2MSCounter>>8));
    vSetSharedInfo(SI_GCD_TIME_COUNTER+2, (BYTE)(dwGame2MSCounter>>16));
    vSetSharedInfo(SI_GCD_TIME_COUNTER+3, (BYTE)(dwGame2MSCounter>>24));
    dwGame2MSCounter++;

#if 1 
    if(bGetGcdSpeedNotify())
    {
      /* save original clk */
      if(bGetGcdSpeedNotify() == GCD_SPEED_NOTIFY2)
      {
        bOrgFullClkSet = _bFullClkSet;
      }
      switch(bSharedInfo(SI_GCD_SPEED))
      {
      case 2:
      case 3:
      case 4:
        bGcdFullClkSet = 6;
        break;
      case 1:
      default:
        bGcdFullClkSet = bOrgFullClkSet;
        break;
      }

      if(bGcdFullClkSet != _bFullClkSet)
      {
        _bFullClkSet = bGcdFullClkSet;
        _bSysClk = SV_SCLK_IDLE;
        ChangeSysClk(SV_SCLK_FULL);
        StopRISC();
        WriteDEC(MBL_ALL_AGENT, 0x0);  // total MBL
        WriteDEC(MBL_MC_PP, 0x0);  // MC MBL
        WriteDEC(MBL_JPEG_PRED, 0x0);  // PRED MBL
        WriteDEC(RW_RBCR3, ((bReadDEC(RW_RBCR3) & 0xE0)+0x08));  // priority RISC>
        ResumeRISC();

#ifdef GAME_SPDIF_FORCE_PCM
        _bSpdifMode = bReadDspSharedBInfo(B_IECFLAG);
        if (_bSpdifMode != SPDIF_FLAG_PCM)
          vWriteDspSharedBInfo(B_IECFLAG, SPDIF_FLAG_PCM);
#endif
      }
      
      // reset notify msg
      vSendGcdSpeedNotify(0);
    }

    //change the DAC Sample rate to 22k when enter game	
    if (bReadBIM(BIM_AK) != 0x1F)
      vAClkSetting2(FS384_22K);  //Gapha070815:L/R has different volume
#endif
  }//GCD playing.
  else if(bGetGcdSpeedNotify() == GCD_SPEED_NOTIFY2)
  {

    if(_bFullClkSet != bOrgFullClkSet) /* need to restore CLK! */
    {
      _bFullClkSet = bOrgFullClkSet;
      _bSysClk = SV_SCLK_IDLE;
      ChangeSysClk(SV_SCLK_FULL);
        StopRISC();
#if (defined(MT1389_REV_L))
  #if (defined(MPEG4_CHROMA_ERROR_WORKAROUND))  
      WriteDEC(MBL_ALL_AGENT, 0x20);  // total MBL
      WriteDEC(MBL_MC_PP, 0x20);  // MC MBL
      WriteDEC(MBL_JPEG_PRED, 0x20);  // PRED MBL
      WriteDEC(RW_RBCR3,((bReadDEC(RW_RBCR3) & 0xE0)+0x1B));  // priority
  #endif 
#endif
        ResumeRISC();

#ifdef GAME_SPDIF_FORCE_PCM
     vWriteDspSharedBInfo(B_IECFLAG, _bSpdifMode);
#endif
    }

    // reset notify msg
    vSendGcdSpeedNotify(0);
    //change the DAC Sample rate to 44.1k when exit game	
    if (bReadBIM(BIM_AK) != 0x0F)
       vAClkSetting2(FS384_44K);	//Gapha070815:L/R has different volume
  }
  
#ifdef SZ_BOARD_V6
  //msz00101 add 19Jun2007
  if(_fgIsGameDisc == TRUE)
  {
    if(_bCntIsGameTimer > 0)
      _bCntIsGameTimer --;
    if(_bCntIsGameTimer == 0)
      _fgIsGameDisc = FALSE; 
  }
  
   if((bCntJsTimer == 0) && (_bCntIsGameTimer == 0))
 #else
   if(bCntJsTimer == 0)
 #endif
   {
     bCntJsTimer = TIMER_JS_CNT;
     vFcJsLoop();
   }
   else
   {
     bCntJsTimer--;
   }
	
}
#endif  /* GAME_EMULATOR_SUPPORT */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -