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

📄 channeltable.asm

📁 w588d开发例程
💻 ASM
📖 第 1 页 / 共 4 页
字号:
				DB VS1A_START
				DB VS2A_START
				DB VS0A_START
			.ENDIF
		.ELSE		;WITH_TONE=1
			DB VS2A_START
			DB VS1A_START
			DB VS0A_START
		.ENDIF		
	.ENDIF		
.ENDIF
	DB 00H
;---------------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------------
	PUBLIC SP_CHANNEL_ADDR_TABLE
SP_CHANNEL_ADDR_TABLE:
	.IF (CHIPSERIES = 'W583C')
		.IF (WITH_VS1A .EQ. 1)
		DB VS1A_START
		.ENDIF
	.ENDIF
	.IF (CHIPSERIES = 'W588C')
		.IF (WITH_VS1A .EQ. 1)
		DB VS1A_START
		.ENDIF
		
		.IF (WITH_VS2A .EQ. 1)
		DB VS2A_START
		.ENDIF
	.ENDIF
	.IF (CHIPSERIES = 'W588D')
		.IF (WITH_TONE .EQ. 0H)
			.IF (WITH_VS1A .EQ. 1)
			DB VS1A_START
			.ENDIF
			
			.IF (WITH_VS2A .EQ. 1)
			DB VS2A_START
			.ENDIF
			
			.IF (WITH_VS0A .EQ. 1)
			DB VS0A_START
			.ENDIF
			
		.ELSE	;WITH_TONE=1
			.IF (WITH_VS0A .EQ. 1H)
			DB VS0A_START
			.ENDIF
		
			.IF (WITH_VS1A .EQ. 1H)
			DB VS1A_START
			.ENDIF	
		
			.IF (WITH_VS2A .EQ. 1H)
			DB VS2A_START
			.ENDIF		
			
		.ENDIF
	.ENDIF	
	DB 00H
;==============================================================================
	PUBLIC		EVO_CHANNEL_ADDR_TABLE
EVO_CHANNEL_ADDR_TABLE:
.IF (WITH_EVO .EQ. 1)
	.IF (WITH_CH0_EVO .EQ. 1)
	DB EVO0_START
	.ENDIF
	
	.IF (WITH_CH1_EVO .EQ. 1)
	DB EVO1_START
	.ENDIF
				
	.IF (WITH_CH2_EVO .EQ. 1H)
	DB EVO2_START
	.ENDIF		
.ENDIF
	DB 00H	
;==============================================================================
; Table that store Channel_ID x 2 for all channels
;==============================================================================
	PUBLIC		MS_CHANNEL_ID_TABLE_2
MS_CHANNEL_ID_TABLE_2:
.IF (WITH_MS .EQ. 1)	
	.IF (CHIPSERIES = 'W588C')
			.IF (WITH_VS2A .EQ. 1)
			DB CHANNEL_VS2A_2
			.ENDIF
			
			.IF (WITH_VS1A .EQ. 1)
			DB CHANNEL_VS1A_2
			.ENDIF			
	.ENDIF
	.IF (CHIPSERIES = 'W588D')				      		
		.IF (WITH_TONE .EQ. 0)
			.IF (WITH_SP .EQ. 0)
				.IF (WITH_VS0A .EQ. 1)
				DB CHANNEL_VS0A_2
				.ENDIF
			
				.IF (WITH_VS2A .EQ. 1)
				DB CHANNEL_VS2A_2
				.ENDIF
				
				.IF (WITH_VS1A .EQ. 1)
				DB CHANNEL_VS1A_2
				.ENDIF
			.ELSE
				.IF (WITH_VS1A .EQ. 1)
				DB CHANNEL_VS1A_2
				.ENDIF
			
				.IF (WITH_VS2A .EQ. 1)
				DB CHANNEL_VS2A_2
				.ENDIF
				
				.IF (WITH_VS0A .EQ. 1)
				DB CHANNEL_VS0A_2
				.ENDIF
			.ENDIF
		
		.ELSE	;WITH_TONE=1
			.IF (WITH_VS2A .EQ. 1)
			DB CHANNEL_VS2A_2
			.ENDIF
			
			.IF (WITH_VS1A .EQ. 1)
			DB CHANNEL_VS1A_2
			.ENDIF
			
			.IF (WITH_VS0A .EQ. 1)
			DB CHANNEL_VS0A_2
			.ENDIF
				
		.ENDIF	;END WITH_TONE
	.ENDIF
.ENDIF
;------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------	
	PUBLIC SP_CHANNEL_ID_TABLE_2
SP_CHANNEL_ID_TABLE_2:
	.IF (CHIPSERIES = 'W583C')
		.IF (WITH_VS1A .EQ. 1)
		DB CHANNEL_VS1A_2
		.ENDIF
	.ENDIF
	.IF (CHIPSERIES = 'W588C')
		.IF (WITH_VS1A .EQ. 1)
		DB CHANNEL_VS1A_2
		.ENDIF
					
		.IF (WITH_VS2A .EQ. 1)
		DB CHANNEL_VS2A_2
		.ENDIF
	.ENDIF
	.IF (CHIPSERIES = 'W588D')
		.IF (WITH_TONE .EQ. 0)
			.IF (WITH_VS1A .EQ. 1)
			DB CHANNEL_VS1A_2
			.ENDIF
			
			.IF (WITH_VS2A .EQ. 1)
			DB CHANNEL_VS2A_2
			.ENDIF
			
			.IF (WITH_VS0A .EQ. 1)
			DB CHANNEL_VS0A_2
			.ENDIF
			
		.ELSE		;WITH_TONE=1
			.IF (WITH_VS0A .EQ. 1H)
			DB CHANNEL_VS0A_2
			.ENDIF
	
			.IF (WITH_VS1A .EQ. 1H)
			DB CHANNEL_VS1A_2
			.ENDIF
	
			.IF (WITH_VS2A .EQ. 1H)
			DB CHANNEL_VS2A_2
			.ENDIF	
		.ENDIF
	.ENDIF
;-------------------------------------------------------------------------------
;SP_TM_CH_MAP_TABLE: speech timer index map to channel index
;-------------------------------------------------------------------------------
	PUBLIC SP_TM_CH_MAP_TABLE
SP_TM_CH_MAP_TABLE:
	.IF (WITH_SP .EQ. 1)
		.IF (CHIPSERIES = 'W583C')
			DB 0
			DB SP_CH0
			DB 0	
		.ENDIF
		.IF (CHIPSERIES = 'W588C')
			DB 0
			DB SP_CH0
			DB SP_CH1	
		.ENDIF
		.IF (CHIPSERIES = 'W588D')
			.IF (WITH_TONE .EQ. 0)
				DB SP_CH2
				DB SP_CH0
				DB SP_CH1
			.ELSE
				DB SP_CH0
				DB SP_CH1
				DB SP_CH2
			.ENDIF
		.ENDIF
	.ENDIF
;---------------------------------------------------------------------------------
;MS_TM_CH_MAP_TABLE: timer index map to midi channel
;---------------------------------------------------------------------------------
	PUBLIC MS_TM_CH_MAP_TABLE
MS_TM_CH_MAP_TABLE:
.IF (WITH_MS .EQ. 1)
	.IF (CHIPSERIES = 'W588C')
			DB 0
			DB MS_CH1
			DB MS_CH0			
	.ENDIF
	.IF (CHIPSERIES = 'W588D')		
		.IF (WITH_TONE .EQ. 0)
			.IF (WITH_SP .EQ. 0)
				DB MS_CH0
				DB MS_CH2
				DB MS_CH1
			.ELSE
				DB MS_CH2
				DB MS_CH0
				DB MS_CH1
			.ENDIF
			
		.ELSE		;WITH_TONE=1
			DB MS_CH2
			DB MS_CH1
			DB MS_CH0
		.ENDIF
	.ENDIF
.ENDIF
;---------------------------------------------------------------------------------------
;add by angela 2006.03.23 for DIS/EN CLOBALVOL feature
	.IF (WITH_SP .EQ. 1)
	.IF (WITH_VOL_ADJ .EQ. 1)	
	PUBLIC SP_GLOBAL_VOLUME_TABLE
SP_GLOBAL_VOLUME_TABLE:	
			DB GLOBAL_VOL_SP0
			DB GLOBAL_VOL_SP1
			DB GLOBAL_VOL_SP2
	.ENDIF
	.ENDIF	
;---------------------------------------------------------------------------------------
	.IF (WITH_SP .EQ. 1)
	.IF (WITH_VC4 .EQ. 1)	
	PUBLIC SP_GLOBAL_VC4_RATE_TABLE
SP_GLOBAL_VC4_RATE_TABLE:
	
			DB GLOBAL_VC4_RATE_SP0-GLOBAL_VC4_RATE_SP0
			DB GLOBAL_VC4_RATE_SP1-GLOBAL_VC4_RATE_SP0
			DB GLOBAL_VC4_RATE_SP2-GLOBAL_VC4_RATE_SP0
	.ENDIF
	.ENDIF	
;add by angela 2006.03.23 for DIS/EN CLOBALVOL feature	
;==============================================================================
; Tables about melody.
;==============================================================================

	.IF (WITH_MS .EQ. 1)
;==============================================================================
; Init procedures for all timbre types.
;==============================================================================
	PUBLIC	MS_INIT_CHANNEL_TABLE
MS_INIT_CHANNEL_TABLE:
	.IF (WITH_TONE .EQ. 1H)
	EXTERN 	INIT_TONE_MELODY
	DW INIT_TONE_MELODY
	.ENDIF

	.IF (WITH_VMDPC8 .EQ. 1H)
	EXTERN	INIT_HQPC8_MELODY
	DW INIT_HQPC8_MELODY
	.ENDIF

	.IF (WITH_HQPC8 .EQ. 1H)
	EXTERN INIT_HQPC8_MELODY
	DW INIT_HQPC8_MELODY
	.ENDIF

	.IF (WITH_PCSPC8 .EQ. 1H)
	EXTERN	INIT_PCSPC8_MELODY
	DW INIT_PCSPC8_MELODY
	.ENDIF

;-----------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------	
	PUBLIC	MS_DECAY_CHANNEL_TABLE
MS_DECAY_CHANNEL_TABLE:
	.IF (WITH_TONE .EQ. 1H)
	EXTERN 	DECAY_MIXER_VALUE_PROC
	DW DECAY_MIXER_VALUE_PROC
	.ENDIF

	.IF (WITH_VMDPC8 .EQ. 1H)
	EXTERN 	DECAY_MIXER_VALUE_PROC
	DW DECAY_MIXER_VALUE_PROC
	.ENDIF

	.IF (WITH_HQPC8 .EQ. 1H)
	EXTERN 	DECAY_MIXER_VALUE_PROC
	DW DECAY_MIXER_VALUE_PROC
	.ENDIF

	.IF (WITH_PCSPC8 .EQ. 1H)
	EXTERN 	DECAY_MIXER_VALUE_PROC
	DW DECAY_MIXER_VALUE_PROC
	.ENDIF

;==============================================================================
; Procedures that should be executed in each FXF ISR.
;==============================================================================
	EXTERN	DO_NEXT_TONE
	PUBLIC	MS_FXF_PROCESS_TABLE
MS_FXF_PROCESS_TABLE:
	.IF (WITH_TONE .EQ. 1H)
	EXTERN 	TONE_ADSR_STATE
	DW TONE_ADSR_STATE
	.ENDIF

	.IF (WITH_VMDPC8 .EQ. 1H)
	EXTERN 	HQ_ADSR_STATE
	DW HQ_ADSR_STATE
	.ENDIF

	.IF (WITH_HQPC8 .EQ. 1H)
	EXTERN HQ_ADSR_STATE
	DW HQ_ADSR_STATE
	.ENDIF

	.IF (WITH_PCSPC8 .EQ. 1H)
	EXTERN  DO_NEXT_TONE
	DW DO_NEXT_TONE
	.ENDIF


;==========================================================
	PUBLIC NOTE_ON_PROC_TABLE
NOTE_ON_PROC_TABLE:
	.IF (WITH_TONE .EQ. 1H)
	EXTERN NOTE_ON_TONE_MELODY
	DW NOTE_ON_TONE_MELODY
	.ENDIF

	.IF (WITH_VMDPC8 .EQ. 1H)
	EXTERN NOTE_ON_HQPC8_MELODY
	DW NOTE_ON_HQPC8_MELODY
	.ENDIF

	.IF (WITH_HQPC8 .EQ. 1H)
	EXTERN NOTE_ON_HQPC8_MELODY
	DW NOTE_ON_HQPC8_MELODY
	.ENDIF

	.IF (WITH_PCSPC8 .EQ. 1H)
	EXTERN NOTE_ON_PCSPC8_MELODY
	DW NOTE_ON_PCSPC8_MELODY
	.ENDIF

;==========================================================
	PUBLIC NOTE_OFF_PROC_TABLE
NOTE_OFF_PROC_TABLE:
	.IF (WITH_TONE .EQ. 1H)
		EXTERN NOTE_OFF_TONE_MELODY
		DW NOTE_OFF_TONE_MELODY
	.ENDIF

	.IF (WITH_VMDPC8 .EQ. 1H)
		EXTERN NOTE_OFF_HQPC8_MELODY
		DW NOTE_OFF_HQPC8_MELODY
	.ENDIF

	.IF (WITH_HQPC8 .EQ. 1H)
		EXTERN NOTE_OFF_HQPC8_MELODY
		DW NOTE_OFF_HQPC8_MELODY
	.ENDIF

	.IF (WITH_PCSPC8 .EQ. 1H)
		EXTERN NOTE_OFF_PCSPC8_MELODY
		DW NOTE_OFF_PCSPC8_MELODY
	.ENDIF


	.ENDIF ;(WITH_MS .EQ. 1)
	
	
;===================================================================
;
;===================================================================	
.IF (WITH_TONE .EQ. 1)
	PUBLIC		MS_CHANNEL_TONE_TABLE
MS_CHANNEL_TONE_TABLE:
	DB WITH_VS2A_TONE
	DB WITH_VS1A_TONE
.ENDIF

;-------------------------------------------------------------------------------------------------------------------------	
;-------------------------------------------------------------------------------------------------------------------------	
.IF (WITH_HQPC8 .EQ. 1 || WITH_VMDPC8 .EQ. 1)
	PUBLIC		MS_CHANNEL_HQ_TABLE
MS_CHANNEL_HQ_TABLE:
	.IF (CHIPSERIES = 'W588C')
		DB WITH_VS2A_HQPC8+WITH_VS2A_VMDPC8
		DB WITH_VS1A_HQPC8+WITH_VS1A_VMDPC8
	.ENDIF
	.IF (CHIPSERIES = 'W588D')	
		.IF (WITH_TONE .EQ. 0)
			.IF (WITH_SP .EQ. 0)
				DB WITH_VS0A_HQPC8+WITH_VS0A_VMDPC8
				DB WITH_VS2A_HQPC8+WITH_VS2A_VMDPC8
				DB WITH_VS1A_HQPC8+WITH_VS1A_VMDPC8
			.ELSE
				DB WITH_VS1A_HQPC8+WITH_VS1A_VMDPC8
				DB WITH_VS2A_HQPC8+WITH_VS2A_VMDPC8
				DB WITH_VS0A_HQPC8+WITH_VS0A_VMDPC8
			.ENDIF
					
		
		.ELSE 	;WITH_TONE=1
			DB WITH_VS2A_HQPC8+WITH_VS2A_VMDPC8
			DB WITH_VS1A_HQPC8+WITH_VS1A_VMDPC8
			DB WITH_VS0A_HQPC8+WITH_VS0A_VMDPC8	
		.ENDIF
	.ENDIF
.ENDIF
;------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------
.IF (WITH_PCSPC8 .EQ. 1)
	PUBLIC		MS_CHANNEL_PCSPC8_TABLE
MS_CHANNEL_PCSPC8_TABLE:
	.IF (CHIPSERIES = 'W588C')
		DB WITH_VS2A_PCSPC8
		DB WITH_VS1A_PCSPC8
	.ENDIF
	.IF (CHIPSERIES = 'W588D')	
		.IF (WITH_TONE .EQ. 0)
			.IF (WITH_SP .EQ. 0)
				DB WITH_VS0A_PCSPC8
				DB WITH_VS2A_PCSPC8
				DB WITH_VS1A_PCSPC8
			.ELSE 	
				DB WITH_VS1A_PCSPC8
				DB WITH_VS2A_PCSPC8
				DB WITH_VS0A_PCSPC8
			.ENDIF
			
		.ELSE 	;WITH_TONE=1
			DB WITH_VS2A_PCSPC8
			DB WITH_VS1A_PCSPC8
			DB WITH_VS0A_PCSPC8
		.ENDIF
	.ENDIF
.ENDIF
;------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------
	PUBLIC		MS_CHANNEL_TABLE
MS_CHANNEL_TABLE:
.IF (WITH_MS .EQ. 1)
	.IF (CHIPSERIES = 'W588C')
			DB WITH_VS2A_HQPC8+WITH_VS2A_VMDPC8+WITH_VS2A_PCSPC8+WITH_VS2A_TONE
			DB WITH_VS1A_HQPC8+WITH_VS1A_VMDPC8+WITH_VS1A_PCSPC8+WITH_VS1A_TONE		
	.ENDIF
	.IF (CHIPSERIES = 'W588D')
			.IF (WITH_TONE .EQ. 0)
				.IF (WITH_SP .EQ. 0)
					DB WITH_VS0A_HQPC8+WITH_VS0A_VMDPC8+WITH_VS0A_PCSPC8
					DB WITH_VS2A_HQPC8+WITH_VS2A_VMDPC8+WITH_VS2A_PCSPC8
					DB WITH_VS1A_HQPC8+WITH_VS1A_VMDPC8+WITH_VS1A_PCSPC8
				.ELSE 
					DB WITH_VS1A_HQPC8+WITH_VS1A_VMDPC8+WITH_VS1A_PCSPC8
					DB WITH_VS2A_HQPC8+WITH_VS2A_VMDPC8+WITH_VS2A_PCSPC8
					DB WITH_VS0A_HQPC8+WITH_VS0A_VMDPC8+WITH_VS0A_PCSPC8
				.ENDIF
			
			.ELSE 	;WITH_TONE=1
				DB WITH_VS2A_HQPC8+WITH_VS2A_VMDPC8+WITH_VS2A_PCSPC8+WITH_VS2A_TONE
				DB WITH_VS1A_HQPC8+WITH_VS1A_VMDPC8+WITH_VS1A_PCSPC8+WITH_VS1A_TONE
				DB WITH_VS0A_HQPC8+WITH_VS0A_VMDPC8+WITH_VS0A_PCSPC8+WITH_VS0A_TONE
			.ENDIF	
	.ENDIF
.ENDIF
;==============================================================================
;
;==============================================================================

	.IF (WITH_MS .EQ. 1)
	PUBLIC ASSIGN_CHANNEL_PROC_TABLE
ASSIGN_CHANNEL_PROC_TABLE:
	.IF (WITH_DYNAMIC_CH .EQ. 1)
	EXTERNAL FIND_IDLE_CHANNEL_PROC
	DW FIND_IDLE_CHANNEL_PROC
	.ELSE
	EXTERNAL ASSIGN_MIDI_CHANNEL_PROC
	DW ASSIGN_MIDI_CHANNEL_PROC
	.ENDIF
	.ENDIF


;==============================================================================
; Timer tables
;==============================================================================
	PUBLIC SP_SET_TMV_PROC_TABLE
	PUBLIC MS_SET_TMV_PROC_TABLE
SP_SET_TMV_PROC_TABLE:
MS_SET_TMV_PROC_TABLE:
	.IF (WITH_VS0A .EQ. 1)
	EXTERNAL SET_TM0V_PROC
	DW SET_TM0V_PROC	;VS0A
	.ELSE
	DW 0000H
	.ENDIF
	
	.IF (WITH_VS1A .EQ. 1)
	EXTERNAL SET_TM1V_PROC
	DW SET_TM1V_PROC	;VS1A
	.ELSE
	DW 0000H
	.ENDIF
	
	.IF (WITH_VS2A .EQ. 1)
	EXTERNAL SET_TM2V_PROC
	DW SET_TM2V_PROC	;VS2A
	.ELSE
	DW 0000H
	.ENDIF
	

;------------------------------------------------------------------------
;
;------------------------------------------------------------------------
	PUBLIC SP_SET_TMC_PROC_TABLE
	PUBLIC MS_SET_TMC_PROC_TABLE
SP_SET_TMC_PROC_TABLE:
MS_SET_TMC_PROC_TABLE:
	.IF (WITH_VS0A .EQ. 1)
	EXTERNAL SET_TM0C_PROC
	DW SET_TM0C_PROC	;VS0A
	.ELSE
	DW 0000H
	.ENDIF
	
	.IF (WITH_VS1A .EQ. 1)
	EXTERNAL SET_TM1C_PROC
	DW SET_TM1C_PROC	;VS1A
	.ELSE
	DW 0000H
	.ENDIF
	
	.IF (WITH_VS2A .EQ. 1)
	EXTERNAL SET_TM2C_PROC
	DW SET_TM2C_PROC	;VS2A
	.ELSE
	DW 0000H
	.ENDIF
	
;------------------------------------------------------------------------
;
;------------------------------------------------------------------------
	PUBLIC SP_GET_TMC_PROC_TABLE
	PUBLIC MS_GET_TMC_PROC_TABLE
SP_GET_TMC_PROC_TABLE:
MS_GET_TMC_PROC_TABLE:
	.IF (WITH_VS0A .EQ. 1)
	EXTERNAL GET_TM0C_PROC
	DW GET_TM0C_PROC
	.ELSE
	DW 0000H
	.ENDIF
	
	.IF (WITH_VS1A .EQ. 1)
	EXTERN GET_TM1C_PROC
	DW GET_TM1C_PROC
	.ELSE
	DW 0000H
	.ENDIF
	
	.IF (WITH_VS2A .EQ. 1)
	EXTERN GET_TM2C_PROC
	DW GET_TM2C_PROC
	.ELSE
	DW 0000H
	.ENDIF
		
;------------------------------------------------------------------------
;
;------------------------------------------------------------------------
	PUBLIC SP_GET_TMV_PROC_TABLE
	PUBLIC MS_GET_TMV_PROC_TABLE
SP_GET_TMV_PROC_TABLE:
MS_GET_TMV_PROC_TABLE:
	.IF (WITH_VS0A .EQ. 1)
	EXTERNAL GET_TM0V_PROC

⌨️ 快捷键说明

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