📄 play_vcd.c
字号:
{
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 + -