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

📄 masnddrv.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
	UINT32	dBlink;						/* blink */
	UINT32	dFreq;						/* frequency */
} MASNDDRVLEDINFO, *PMASNDDRVLEDINFO;

typedef struct _MASNDDRVMTRINFO
{
	UINT32	dCtrl;						/* control */
	UINT32	dBlink;						/* blink */
	UINT32	dFreq;						/* frequency */
} MASNDDRVMTRINFO, *PMASNDDRVMTRINFO;

typedef struct _MASNDDRVSEQBUFINFO
{
	UINT8	bSequenceFlag;				/* sequence flag */
	UINT8 *	pbBufPtr;					/* pointer to the buffer */
	UINT32	dBufSize;					/* size of the buffer */
	UINT8	bQueueFlag;					/* queue flag */
	UINT32	dQueueSize;					/* size of data in queue */
	UINT32	dQueueWPtr;					/* write pointer */
	UINT32	dWroteSize;					/* size of wrote data */
	UINT8	bQueue[2048];				/* queue */
} MASNDDRVSEQBUFINFO, *PMASNDDRVSEQBUFINFO;

typedef struct _MASNDDRVINFO
{
	UINT8	bStatus;					/* status */
	UINT8	bDrumMode;					/* drum mode */
	UINT8	bDvaMode;					/* dva mode */
	UINT8	bMelodyMode;				/* melody mode */
	UINT8	bDrumType;					/* drum type */
	UINT8	bWtVolMode;					/* wt volume mode */
	UINT8	bHvType;					/* hv language type */
	UINT8	bBalVolumeL;				/* balance volume L */
	UINT8	bBalVolumeR;				/* balance volume R */
	UINT8	bFmVolume;					/* fm volume */
	UINT8	bWtVolume;					/* wt volume */
	UINT8	bSaVolume;					/* sa volume */
	UINT8	bHvVolume;					/* hv volume */
	UINT8	bMasterVolShiftL;			/* shift value of master volume L */
	UINT8	bMasterVolShiftR;			/* shift value of master volume R */
	UINT8	bFmVolShift;				/* shift value of fm volume */
	UINT8	bWtVolShift;				/* shift value of wt volume */
	UINT8	bSaVolShift;				/* shift value of stream volume */
	UINT8	bHvVolShift;				/* shift value of hv volume */
	UINT8	bMasterVolume;				/* master volume */
	UINT8	bWaveSlave;					/* wave slave number */
	UINT8	bSpeed;						/* speed */
	SINT8	sbKeyOffset;				/* key offset for key control */
	UINT8	bSaLedMtrSync;				/* stream LED/Motor sync flag bit0:LED bit1:Motor 0:off 1:on */
	UINT8	bHvLedMtrSync;				/* HV LED/Motor sync flag bit0:LED bit1:Motor 0:off 1:on */
	UINT8	bHvChannel;					/* channel number for HV */
	UINT32	dTimeBase;					/* time base */
	UINT32	dChNum;						/* number of channel */
	UINT32	dFmNum;						/* number of FM slot */
	UINT32	dWtNum;						/* number of WT slot */
	UINT32	dSaNum;						/* number of stream audio slot */
	UINT32	dAlNum;						/* number of AL slot */
	UINT32	dHvNum;						/* number of HV slot */
	UINT32	dRbNum;						/* number of ram block */
	UINT32	dChMap;						/* bit mapping of channel */
	UINT32	dFmMap;						/* bit mapping of FM slot */
	UINT32	dWtMap;						/* bit mapping of WT slot */
	UINT32	dSaMap;						/* bit mapping of stream audio slot */
	UINT32	dAlMap;						/* bit mapping of AL slot */
	UINT32	dHvMap;						/* bit mapping of HV slot */
	UINT32	dRbMap;						/* bit mapping of ram block */
	UINT32	dLdMap;						/* bit mapping of led */
	UINT32	dMtMap;						/* bit mapping of motor */
	UINT32	dEosFlag;					/* end of sequence flag */
	UINT32	dMinSlot[3];				/* minimum slot number */
	UINT32	dMaxSlot[3];				/* maximum slot number */
} MASNDDRVINFO, *PMASNDDRVINFO;

#define MASNDDRV_STMSTAT_MONO0		(0x01)
#define MASNDDRV_STMSTAT_MONO1		(0x02)
#define MASNDDRV_STMSTAT_STEREO		(0x04)

typedef struct _MASNDDRVSTMCTRLINFO {
	UINT32	dQueFlag;	/* 0:not exist 1:exist */
	UINT32	dType[2];	/* 0x00(00000000):not exist */
						/* 0x01(00000001):Mono   */
						/* 0x02(00000010):Stereo */
						/* 0x80(10000000):ON bit  */
	UINT32	dRamVal[2];
	UINT32	dStreamStatus;	/* ........1 mono#0 */
							/* .......1. mono#1 */
							/* ......1.. stereo */
	UINT32	dWaveId[2];
} MASNDDRVSTMCTRLINFO, *PMASNDDRVSTMCTRLINFO;


typedef struct _MASNDDRVSTMPARAM
{
	UINT8	bPanpot;					/* panpot */
	UINT8	bStm;						/* stream */
	UINT8	bPe;						/* pan enable */
	UINT8	bPanOff;					/* pan off */
	UINT8	bMode;						/* mode */
	UINT8	bSaId;						/* stream audio id */
	UINT8	bVoVolume;					/* voice volume */
	UINT16	wPitch;						/* pitch */
	UINT16	wEndPoint;					/* end point */
} MASNDDRVSTMPARAM, *PMASNDDRVSTMPARAM;

typedef struct _MASNDDRVGROBALINFO
{
	UINT8				bCtrlSequencer[MASMW_NUM_SEQTYPE];
	UINT8				bPacketBuf[MASMW_NUM_SEQTYPE][256];
	UINT32				dHvEventInfo[MASMW_NUM_SEQTYPE];
						/* x.......:exist bit (0:not exist 1:exist) */
						/* .xxxxxxx:ram value                       */
	SINT32 				(* pfnSrmCnv[MASMW_NUM_SEQTYPE])( void );
	MASNDDRVINFO		sSndDrvInfo[MASMW_NUM_SEQTYPE];
	MASNDDRVSTMINFO		sStreamInfo[MASMW_NUM_SEQTYPE][MA_MAX_REG_STREAM_AUDIO];
	MASNDDRVVOICEINFO	sVoiceInfo[MASNDDRV_NUM_VOICEINFO][MASNDDRV_MAX_REG_VOICE*2];
	UINT8				bVoiceIndex[MASNDDRV_MAX_RAM_BANK*2*128];	/* (Bank[16+16]) * Prog   */
															/* index of sVoiceInfo */
															/* NULL if index = 0xff   */
	MASNDDRVALVOICEINFO	sAlVoiceInfo[MASNDDRV_NUM_ALVOICE];
	MASNDDRVCHINFO 		sChInfo[MASNDDRV_NUM_CHANNEL];
	MASNDDRVSLOTINFO	sSlotInfo[MASNDDRV_NUM_SLOT];
	MASNDDRVLEDINFO		sLedInfo;
	MASNDDRVMTRINFO		sMtrInfo;
	MASNDDRVSEQBUFINFO	sSeqbufInfo;
	MASNDDRVSTMCTRLINFO	sStreamCtrlInfo;
} MASNDDRVGROBALINFO, *PMASNDDRVGROBALINFO;


static MASNDDRVGROBALINFO	gMaSndDrvInfo;
static PMASNDDRVGROBALINFO	gpMaSndDrvInfo;

static SINT32 MaSndDrv_Nop					( SINT32 sid, SINT32 dt, UINT32 tp, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_NoteOn				( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 key, UINT32 vel );
static SINT32 MaSndDrv_NoteOnMa2			( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 key, UINT32 vel );
static SINT32 MaSndDrv_NoteOnMa2Ex			( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 key, UINT32 vel );
static SINT32 MaSndDrv_NoteOff				( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 key, UINT32 p3 );
static SINT32 MaSndDrv_NoteOffMa2			( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 key, UINT32 p3 );
static SINT32 MaSndDrv_NoteOffMa2Ex			( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 key, UINT32 p3 );
static SINT32 MaSndDrv_ProgramChange		( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 bkn, UINT32 prg );
static SINT32 MaSndDrv_ModulationDepth		( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 dph, UINT32 p3 );
static SINT32 MaSndDrv_ChannelVolume		( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 vol, UINT32 p3 );
static SINT32 MaSndDrv_Panpot				( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 pan, UINT32 p3 );
static SINT32 MaSndDrv_Expression			( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 vol, UINT32 p3 );
static SINT32 MaSndDrv_Hold1				( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 val, UINT32 p3 );
static SINT32 MaSndDrv_AllSoundOff			( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_ResetAllControllers	( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_AllNoteOff			( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_MonoModeOn			( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_PolyModeOn			( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_PitchBend			( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 val, UINT32 p3 );
static SINT32 MaSndDrv_BendRange			( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 rng, UINT32 p3 );
static SINT32 MaSndDrv_StreamOn				( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 wid, UINT32 vel );
static SINT32 MaSndDrv_StreamOff			( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 wid, UINT32 p3 );
static SINT32 MaSndDrv_StreamSlave			( SINT32 sid, SINT32 dt, UINT32 ch, UINT32 wid, UINT32 vel );
static SINT32 MaSndDrv_StreamPanpot			( SINT32 sid, SINT32 dt, UINT32 wv, UINT32 pan, UINT32 p3 );
static SINT32 MaSndDrv_MasterVolume			( SINT32 sid, SINT32 dt, UINT32 vl, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_SystemOn				( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_UserEvent			( SINT32 sid, SINT32 dt, UINT32 vl, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_LedSyncCh			( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_MotorSyncCh			( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_StreamPause			( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_StreamRestart		( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_VolumeDirect			( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_SetLpfQ				( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_SetLpfCof			( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_HvNoteOn				( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_HvNoteOff			( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_HvProgramChange		( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_HvPitchBend			( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_HvBendRange			( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_HvProsodicBendRange	( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_HvChannelVolume		( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_HvPanpot				( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_HvAllSoundOff		( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_StreamSeek			( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_HvEvent				( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_CoaseTune			( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );
static SINT32 MaSndDrv_FineTune				( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2,  UINT32 p3 );

static SINT32 dummy_mahvdrv_Initialize		( UINT32 dTimeBase );
static SINT32 dummy_mahvdrv_SetDictionary	( UINT8 *pbDict, UINT32 dSize, UINT32 dMode, void *pvExtArgs );
static SINT32 dummy_mahvdrv_SetCommand		( UINT32 dCmd, UINT32 dParam1, UINT32 dParam2 );
static SINT32 dummy_mahvdrv_Generate		( UINT8 *pbPacket );
static SINT32 dummy_mahvdrv_Terminate		( void );

static SINT32 (* ma_snddrv_command[])( SINT32 sid, SINT32 dt, UINT32 p1, UINT32 p2, UINT32 p3 ) =
{
	MaSndDrv_NoteOn,						/*  0 */
	MaSndDrv_NoteOnMa2,						/*  1 */
	MaSndDrv_NoteOnMa2Ex,					/*  2 */
	MaSndDrv_NoteOff,						/*  3 */
	MaSndDrv_NoteOffMa2,					/*  4 */
	MaSndDrv_NoteOffMa2Ex,					/*  5 */
	MaSndDrv_ProgramChange,					/*  6 */
	MaSndDrv_ModulationDepth,				/*  7 */
	MaSndDrv_ChannelVolume,					/*  8 */
	MaSndDrv_Panpot,						/*  9 */
	MaSndDrv_Expression,					/* 10 */
	MaSndDrv_Hold1,							/* 11 */
	MaSndDrv_AllSoundOff,					/* 12 */
	MaSndDrv_ResetAllControllers,			/* 13 */
	MaSndDrv_AllNoteOff,					/* 14 */
	MaSndDrv_MonoModeOn,					/* 15 */
	MaSndDrv_PolyModeOn,					/* 16 */
	MaSndDrv_PitchBend,						/* 17 */
	MaSndDrv_BendRange,						/* 18 */
	MaSndDrv_StreamOn,						/* 19 */
	MaSndDrv_StreamOff,						/* 20 */
	MaSndDrv_StreamSlave,					/* 21 */
	MaSndDrv_StreamPanpot,					/* 22 */
	MaSndDrv_MasterVolume,					/* 23 */
	MaSndDrv_SystemOn,						/* 24 */
	MaSndDrv_Nop,							/* 25 */
	MaSndDrv_Nop,							/* 26 */
	MaSndDrv_Nop,							/* 27 */
	MaSndDrv_Nop,							/* 28 */
	MaSndDrv_UserEvent,						/* 29 */
	MaSndDrv_Nop,							/* 30 */
	MaSndDrv_LedSyncCh,						/* 31 */
	MaSndDrv_MotorSyncCh,					/* 32 */
	MaSndDrv_StreamPause,					/* 33 */
	MaSndDrv_StreamRestart,					/* 34 */
	MaSndDrv_VolumeDirect,					/* 35 */
	MaSndDrv_SetLpfQ,						/* 36 */
	MaSndDrv_SetLpfCof,						/* 37 */
	MaSndDrv_Nop,							/* 38 */
	MaSndDrv_Nop,							/* 39 */
	MaSndDrv_HvNoteOn,						/* 40 */
	MaSndDrv_HvNoteOff,						/* 41 */
	MaSndDrv_HvProgramChange,				/* 42 */
	MaSndDrv_HvPitchBend,					/* 43 */
	MaSndDrv_HvBendRange,					/* 44 */
	MaSndDrv_HvProsodicBendRange,			/* 45 */
	MaSndDrv_Nop,							/* 46 */
	MaSndDrv_HvChannelVolume,				/* 47 */
	MaSndDrv_HvPanpot,						/* 48 */
	MaSndDrv_Nop,							/* 49 */
	MaSndDrv_HvAllSoundOff,					/* 50 */
	MaSndDrv_StreamSeek,					/* 51 */
	MaSndDrv_HvEvent,						/* 52 */
	MaSndDrv_CoaseTune,						/* 53 */
	MaSndDrv_FineTune						/* 54 */
};


/*** Global value for HV ***********************************************************/
typedef struct _MAHVDRVFUNC
{
	SINT32	(* Initialize)		( UINT32 dTimeBase );
	SINT32	(* SetDictionary)	( UINT8 *pbDict, UINT32 dSize, UINT32 dMode, void *pvExtArgs );
	SINT32	(* SetCommand)		( UINT32 dCmd, UINT32 dParam1, UINT32 dParam2 );
	SINT32	(* Generate)		( UINT8 *pbPacket );
	SINT32	(* Terminate)		( void );
} MAHVDRVFUNC, *PMAHVDRVFUNC;

static MAHVDRVFUNC pfnHvFunc[MASNDDRV_NUM_HVTYPE] =
{
#if MASMW_SRMCNV_HVS
	{								/* 0 */
		MaHvDrvJP_Initialize,
		MaHvDrvJP_SetDictionary,
		MaHvDrvJP_SetCommand,
		MaHvDrvJP_Generate,
		MaHvDrvJP_Terminate
	},
#else
	MASNDDRV_DUMMY_HVDRVFUNC,
#endif
	MASNDDRV_DUMMY_HVDRVFUNC		/* 1 */
};


/************************************************************************************/

/*--- for DeviceControl */
#if (MA_DEVICETYPE != MASMW_DEVICETYPE_MA5)
static const UINT8 bImRegJudgeW[MASNDDRV_NUM_DEVICETYPE-1][MASNDDRV_NUM_BANK3] =
{
	{
		/* MA-5S */
		0, 0, 0, 0, 0, 1, 1, 1, 1, 1,
		1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0
	},
	
	{
		/* MA-5i */
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		1, 1, 1, 0, 0, 0, 1, 1, 1, 1,
		1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
		1, 1, 1, 1, 1, 1, 0, 0
	}
};

static const UINT8 bImRegJudgeR[MASNDDRV_NUM_DEVICETYPE-1][MASNDDRV_NUM_BANK3] =
{
	{
		/* MA-5S */
		0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
		1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		0, 0, 0, 0, 0, 0, 0, 0
	},
	
	{
		/* MA-5i */
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
		1, 1, 1, 0, 0, 0, 1, 1, 1, 1,
		1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
		1, 1, 1, 1, 1, 1, 0, 1
	}
};
#endif

/*--- for SetCommand */
static const UINT8 bCmdJudge[MASMW_NUM_SEQTYPE][MASNDDRV_NUM_COMMAND] = 
{
	{
		1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	/* note on - panpot */
		1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	/* expression - stream on */
		1, 1, 1, 1, 1, 0, 0, 0, 0, 1,	/* stream off - user event */
		1, 1, 1, 0, 0, 1, 1, 1, 0, 0,	/* nop - hv reset wait */
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* hv note on - hv key control */
		0, 0, 1, 1, 1					/* hv all sound off - fine tune */
	},

	{
		1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	/* noteon - panpot */
		1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	/* expression - streamon */
		1, 1, 1, 1, 1, 0, 0, 0, 0, 0,	/* stream off - user event */
		1, 1, 1, 1, 1, 1, 1, 1, 0, 0,	/* nop - hv reset wait */
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* hv note on - hv key control */
		0, 1, 1, 1, 1					/* hv all sound off - fine tune */
	},

	{
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* noteon - panpot */
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* expression - streamon */
		0, 0, 0, 0, 1, 0, 0, 0, 0, 0,	/* stream off - user event */
		0, 1, 1, 0, 0, 0, 0, 0, 0, 0,	/* nop - hv reset wait */
		1, 1, 1, 1, 1, 1, 0, 1, 1, 0,	/* hv note on - hv key control */
		1, 0, 0, 0, 0					/* hv all sound off - fine tune */
	}
};

static const UINT8 bChannelCmd[MASNDDRV_NUM_COMMAND] = 
{
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	/* noteon - panpot */
	1, 1, 1, 1, 1, 1, 1, 1, 1, 1,	/* expression - streamon */
	1, 1, 0, 0, 0, 0, 0, 0, 0, 0,	/* stream off - user event */
	0, 0, 0, 0, 0, 1, 1, 1, 0, 0,	/* nop - hv reset wait */
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,	/* hv note on - hv key control */
	0, 0, 0, 1, 1					/* hv all sound off - fine tune */
};


extern void machdep_memcpy( UINT8 *d, UINT8 *s, UINT32 size );
extern void machdep_EnterCriticalSection(void);
extern void machdep_LeaveCriticalSection(void);


/*--------------------------------------------------------------------------*
	Dummy Functions
 *--------------------------------------------------------------------------*/
static	SINT32	dummy_mahvdrv_Initialize( UINT32 dTimeBase )
{
	(void)dTimeBase;
	return MASMW_ERROR;
}

static	SINT32	dummy_mahvdrv_SetDictionary( UINT8 *pbDict, UINT32 dSize, UINT32 dMode, void *pvExtArgs )
{
	(void)pbDict;
	(void)dSize;
	(void)dMode;
	(void)pvExtArgs;
	return MASMW_ERROR;
}

static	SINT32	dummy_mahvdrv_SetCommand( UINT32 dCmd, UINT32 dParam1, UINT32 dParam2 )
{
	(void)dCmd;
	(void)dParam1;
	(void)dParam2;
	return MASMW_SUCCESS;
}

static	SINT32	dummy_mahvdrv_Generate( UINT8 *pbPacket )
{
	(void)pbPacket;
	return MASMW_SUCCESS;
}

static	SINT32	dummy_mahvdrv_Terminate( void )
{
	return MASMW_ERROR;
}

/*--------------------------------------------------------------------------*
	Functions for pitch
 *--------------------------------------------------------------------------*/
/****************************************************************************
 *	GetMa5FmPitch
 *
 *	Description:
 *			Calc Block&Fnum. (FM/MA-5)
 *	Argument:
 *			dBank		NoteOn Bank#				(0..255)
 *			dProg		NoteOn Prog#				(0..127)
 *			dKey		RealKey						(0..127)
 *	Return:
 *			(BLOCK << 10) + FNUM
 ****************************************************************************/

⌨️ 快捷键说明

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