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

📄 channeltable.asm

📁 w588d开发例程
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	CHIP		W6502BASED
	SYMBOLS
	LINEAR		ON

	;*.LIC
	.IF (CHIPSERIES = 'W588D').OR.(CHIPSERIES = 'W588C')
		INCLUDE		W588_SYS_DEF_EQU.INI
	.ENDIF


	INCLUDE		CONFIGURATION_PUBLIC.INI	;generated by WIDE according to user configuration
	INCLUDE		CONFIGURATION.INI		;generated by WIDE according to user configuration
	INCLUDE 	RAMVAR_PUBLIC.INI		;generate by WIDE according to configuration.ini
	INCLUDE 	RAMVAR.INI			;generate by WIDE according to configuration.ini
	.IF (WITH_SP .EQ. 1).OR.(WITH_MS .EQ. 1).OR.(WITH_EVO .EQ. 1)
	INCLUDE		SynthConstant_PUBLIC.INI
	INCLUDE		SynthConstant.INI
	INCLUDE		CommLibAPIs.asm		;for PSF kernel/user need APIs
	.ENDIF

	.IF (WITH_SP .EQ. 1).OR.(WITH_MS .EQ. 1).OR.(WITH_EVO .EQ. 1)
	PUBLIC		SPEECH_SYNTH_START_TABLE
	PUBLIC		SPEECH_SYNTH_START_EXT_TABLE
	PUBLIC		SP_CHANNEL_ADDR_TABLE
	PUBLIC		SP_CHANNEL_ID_TABLE_2	
	.ENDIF
;==========================================================================
;	LIBRARY RAM USED SECTION
;==========================================================================
	LIBRARY_USED_RAM: SECTION
	ORG 0000H
LIBRARY_RAM DS USER_START
	ENDS

	.IF (WITH_SP .EQ. 1).OR.(WITH_MS .EQ. 1).OR.(WITH_EVO .EQ. 1)
;==============================================================================
; This table is used for seperate speech | melody modules. I-f user use speech 
; only or melody only, the unused melody or speech module will not be linked
; into execution file.
;==============================================================================
	.IF (WITH_CMD .EQ. 0)
	PUBLIC		INIT_PROC_TABLE
INIT_PROC_TABLE:
	.IF (WITH_SP .EQ. 1H)
	EXTERN	SPEECH_INIT
	EXTERN	SPEECH_INIT_CONTINUE
	DW SPEECH_INIT
	DW SPEECH_INIT_CONTINUE
	.ELSE
	DW 0000H
	DW 0000H
	.ENDIF

	.IF (WITH_MS .EQ. 1H)
	EXTERN	MIDI_INIT
	DW MIDI_INIT
	.ELSE
	DW 0000H
	.ENDIF
	
	.IF (WITH_EVO .EQ. 1H)
	EXTERN	EVO_INIT
	DW EVO_INIT
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF
	
	


;==============================================================================
; Each channel has a synth start address table to record the start address of 
; synth procedure for all supported formats.
; This is a table of table to store synth start address table of all channels.
;==============================================================================
SPEECH_SYNTH_START_TABLE:
	.IF (CHIPSERIES = 'W583C')
		.IF (WITH_ISR_VS1A .EQ. 1H)
		DW SPEECH_SYNTH_START_TABLE_VS1A
		.ENDIF	
	.ENDIF
	.IF (CHIPSERIES = 'W588C')
		.IF (WITH_ISR_VS1A .EQ. 1H)
		DW SPEECH_SYNTH_START_TABLE_VS1A
		.ENDIF	
		
		.IF (WITH_ISR_VS2A .EQ. 1H)
		DW SPEECH_SYNTH_START_TABLE_VS2A
		.ENDIF
	.ENDIF
	.IF (CHIPSERIES = 'W588D')
		.IF (WITH_TONE .EQ. 0)
			.IF (WITH_ISR_VS1A .EQ. 1H)
			DW SPEECH_SYNTH_START_TABLE_VS1A
			.ENDIF
			
			.IF (WITH_ISR_VS2A .EQ. 1H)
			DW SPEECH_SYNTH_START_TABLE_VS2A
			.ENDIF
			
			.IF (WITH_ISR_VS0A .EQ. 1H)
			DW SPEECH_SYNTH_START_TABLE_VS0A
			.ENDIF
		.ELSE
			.IF (WITH_ISR_VS0A .EQ. 1H)
			DW SPEECH_SYNTH_START_TABLE_VS0A
			.ENDIF
	
			.IF (WITH_ISR_VS1A .EQ. 1H)
			DW SPEECH_SYNTH_START_TABLE_VS1A
			.ENDIF
	
			.IF (WITH_ISR_VS2A .EQ. 1H)
			DW SPEECH_SYNTH_START_TABLE_VS2A
			.ENDIF
		.ENDIF
	.ENDIF
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
SPEECH_SYNTH_START_EXT_TABLE:
.IF (WITH_SIM_SP .EQ. 1)
	.IF (WITH_TONE .EQ. 0H)
		.IF (WITH_ISR_VS1A .EQ. 1)
		DW SPEECH_SYNTH_START_TABLE_EXT_VS1A
		.ENDIF
		
		.IF (WITH_ISR_VS2A .EQ. 1)
		.IF (CHIPBODY='W588D300').OR. (CHIPBODY='W588D350').OR. (CHIPBODY='W588D400')
		DW SPEECH_SYNTH_START_TABLE_EXT_VS2A
		.ELSE
		DW SPEECH_SYNTH_START_TABLE_VS2A
		.ENDIF
		.ENDIF
		
		.IF (WITH_ISR_VS0A .EQ. 1)
		DW SPEECH_SYNTH_START_TABLE_VS0A
		.ENDIF
	.ELSE
		.IF (WITH_ISR_VS0A .EQ. 1H)
		DW SPEECH_SYNTH_START_TABLE_EXT_VS0A
		.ENDIF

		.IF (WITH_ISR_VS1A .EQ. 1H)
		.IF (CHIPBODY='W588D300').OR. (CHIPBODY='W588D350').OR. (CHIPBODY='W588D400')
		DW SPEECH_SYNTH_START_TABLE_EXT_VS1A
		.ELSE
		DW SPEECH_SYNTH_START_TABLE_VS1A
		.ENDIF	
		.ENDIF

		.IF (WITH_ISR_VS2A .EQ. 1H)
		DW SPEECH_SYNTH_START_TABLE_VS2A
		.ENDIF
	.ENDIF

.ENDIF



;==============================================================================
; Macro to define a synth start address table for a channel.
;==============================================================================
SPEECH_SYNTH_START_TABLE_EX	MACRO CHANNEL
SPEECH_SYNTH_START_TABLE|CHANNEL:
	.IF (WITH_APM .EQ. 1)
	.IF (WITH|CHANNEL|_APM .EQ. 1H)
	EXTERN APM_READ_HEADER|CHANNEL
	DW APM_READ_HEADER|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_PC8 .EQ. 1)
	.IF (WITH|CHANNEL|_PC8 .EQ. 1H)
	EXTERN PC8_READ_BYTE|CHANNEL
	DW PC8_READ_BYTE|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_P10 .EQ. 1)
	.IF (WITH|CHANNEL|_P10 .EQ. 1H)
	EXTERN P10_READ_BYTE|CHANNEL
	DW P10_READ_BYTE|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF
	
	;Add By TSH
	.IF (WITH_SIL .EQ. 1)
	.IF (WITH|CHANNEL|_SIL .EQ. 1H)
	EXTERN SIL_READ_HEADER|CHANNEL
	DW SIL_READ_HEADER|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF
	
	.IF (WITH_MDM .EQ. 1)
	.IF (WITH|CHANNEL|_MDM .EQ. 1H)
	EXTERN MDM_READ_HEADER|CHANNEL
	DW MDM_READ_HEADER|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_EMM .EQ. 1)
	.IF (WITH|CHANNEL|_EMM .EQ. 1H)
	EXTERN EMM_READ_HEADER|CHANNEL
	DW EMM_READ_HEADER|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_LP8 .EQ. 1)
	.IF (WITH|CHANNEL|_LP8 .EQ. 1H)
	EXTERN LP8_READ_BYTE|CHANNEL
	DW LP8_READ_BYTE|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_MD6 .EQ. 1)
	.IF (WITH|CHANNEL|_MD6 .EQ. 1H)
	EXTERN MD6_READ_HEADER|CHANNEL
	DW MD6_READ_HEADER|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_E2A .EQ. 1)
	.IF (WITH|CHANNEL|_E2A .EQ. 1H)
	EXTERN E2A_READ_HEADER|CHANNEL
	DW E2A_READ_HEADER|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_YAD .EQ. 1)
	.IF (WITH|CHANNEL|_YAD .EQ. 1H)
	EXTERN YAD_READ_HEADER|CHANNEL
	DW YAD_READ_HEADER|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_P16 .EQ. 1)
	.IF (WITH|CHANNEL|_P16 .EQ. 1H)
	EXTERN P16_READ_BYTE|CHANNEL
	DW P16_READ_BYTE|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_VC8 .EQ. 1)
	.IF (WITH|CHANNEL|_VC8 .EQ. 1H)
	EXTERN VC8_READ_BYTE|CHANNEL
	DW VC8_READ_BYTE|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_VC4 .EQ. 1)
	.IF (WITH|CHANNEL|_VC4 .EQ. 1H)
	EXTERN VC4_READ_HEADER|CHANNEL
	DW VC4_READ_HEADER|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_HQPC8 .EQ. 1)
	.IF (WITH|CHANNEL|_HQPC8 .EQ. 1H)
	EXTERN HQPC8_READ_BYTE|CHANNEL
	DW HQPC8_READ_BYTE|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_VMD567 .EQ. 1)
	.IF (WITH|CHANNEL|_VMD567 .EQ. 1H)
	EXTERN VMD_W567_READ_BYTE|CHANNEL
	DW VMD_W567_READ_BYTE|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_HQ567 .EQ. 1)
	.IF (WITH|CHANNEL|_HQ567 .EQ. 1H)
	EXTERN HQ_W567_READ_BYTE|CHANNEL
	DW HQ_W567_READ_BYTE|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_PC8VMDPCS .EQ. 1)
	.IF (WITH|CHANNEL|_PC8VMDPCS .EQ. 1H)
	EXTERN VMDPCS_READ_BYTE|CHANNEL
	DW VMDPCS_READ_BYTE|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF
	
	.IF (WITH_LP8VMDPCS .EQ. 1)
	.IF (WITH|CHANNEL|_LP8VMDPCS .EQ. 1H)
	EXTERN VMDPCS_READ_BYTE|CHANNEL
	DW VMDPCS_READ_BYTE|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	ENDM

SPEECH_SYNTH_START_TABLE_EXT_EX	MACRO CHANNEL
SPEECH_SYNTH_START_TABLE_EXT|CHANNEL:
.IF (CHIPSERIES = 'W588D')
	.IF (WITH_APM .EQ. 1)
	.IF (WITH|CHANNEL|_APM .EQ. 1H)
	EXTERN APM_READ_HEADER_EXT|CHANNEL
	DW APM_READ_HEADER_EXT|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_PC8 .EQ. 1)
	.IF (WITH|CHANNEL|_PC8 .EQ. 1H)
	EXTERN PC8_READ_BYTE_EXT|CHANNEL
	DW PC8_READ_BYTE_EXT|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_P10 .EQ. 1)
	.IF (WITH|CHANNEL|_P10 .EQ. 1H)
	EXTERN P10_READ_BYTE_EXT|CHANNEL
	DW P10_READ_BYTE_EXT|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF
	
	;Add By TSH
	.IF (WITH_SIL .EQ. 1)
	.IF (WITH|CHANNEL|_SIL .EQ. 1H)
	EXTERN SIL_READ_HEADER|CHANNEL
	DW SIL_READ_HEADER|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF
	
	.IF (WITH_MDM .EQ. 1)
	.IF (WITH|CHANNEL|_MDM .EQ. 1H)
	EXTERN MDM_READ_HEADER_EXT|CHANNEL
	DW MDM_READ_HEADER_EXT|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_EMM .EQ. 1)
	.IF (WITH|CHANNEL|_EMM .EQ. 1H)
	EXTERN EMM_READ_HEADER_EXT|CHANNEL
	DW EMM_READ_HEADER_EXT|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_LP8 .EQ. 1)
	.IF (WITH|CHANNEL|_LP8 .EQ. 1H)
	EXTERN LP8_READ_BYTE_EXT|CHANNEL
	DW LP8_READ_BYTE_EXT|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_MD6 .EQ. 1)
	.IF (WITH|CHANNEL|_MD6 .EQ. 1H)
	EXTERN MD6_READ_HEADER_EXT|CHANNEL
	DW MD6_READ_HEADER_EXT|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_E2A .EQ. 1)
	.IF (WITH|CHANNEL|_E2A .EQ. 1H)
	EXTERN E2A_READ_HEADER_EXT|CHANNEL
	DW E2A_READ_HEADER_EXT|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_YAD .EQ. 1)
	.IF (WITH|CHANNEL|_YAD .EQ. 1H)
	EXTERN YAD_READ_HEADER|CHANNEL
	DW YAD_READ_HEADER|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_P16 .EQ. 1)
	.IF (WITH|CHANNEL|_P16 .EQ. 1H)
	EXTERN P16_READ_BYTE|CHANNEL
	DW P16_READ_BYTE|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_VC8 .EQ. 1)
	.IF (WITH|CHANNEL|_VC8 .EQ. 1H)
	EXTERN VC8_READ_BYTE|CHANNEL
	DW VC8_READ_BYTE|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_VC4 .EQ. 1)
	.IF (WITH|CHANNEL|_VC4 .EQ. 1H)
	EXTERN VC4_READ_HEADER|CHANNEL
	;DW VC4_READ_HEADER_EXT|CHANNEL
	DW VC4_READ_HEADER|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_HQPC8 .EQ. 1)
	.IF (WITH|CHANNEL|_HQPC8 .EQ. 1H)
	EXTERN HQPC8_READ_BYTE|CHANNEL
	DW HQPC8_READ_BYTE|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_VMD567 .EQ. 1)
	.IF (WITH|CHANNEL|_VMD567 .EQ. 1H)
	EXTERN VMD_W567_READ_BYTE|CHANNEL
	DW VMD_W567_READ_BYTE|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_HQ567 .EQ. 1)
	.IF (WITH|CHANNEL|_HQ567 .EQ. 1H)
	EXTERN HQ_W567_READ_BYTE|CHANNEL
	DW HQ_W567_READ_BYTE|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF

	.IF (WITH_PC8VMDPCS .EQ. 1)
	.IF (WITH|CHANNEL|_PC8VMDPCS .EQ. 1H)
	EXTERN VMDPCS_READ_BYTE|CHANNEL
	DW VMDPCS_READ_BYTE|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF
	
	.IF (WITH_LP8VMDPCS .EQ. 1)
	.IF (WITH|CHANNEL|_LP8VMDPCS .EQ. 1H)
	EXTERN VMDPCS_READ_BYTE|CHANNEL
	DW VMDPCS_READ_BYTE|CHANNEL
	.ELSE
	DW 0000H
	.ENDIF
	.ENDIF
	.ENDIF
	ENDM
	
;==============================================================================
; Define synth start address tables for all channels.
;==============================================================================
	.IF (WITH_ISR_VS0A .EQ. 1H)
	SPEECH_SYNTH_START_TABLE_EX _VS0A
	.ENDIF

	.IF (WITH_ISR_VS0B .EQ. 1H)
	SPEECH_SYNTH_START_TABLE_EX _VS0B
	.ENDIF

	.IF (WITH_ISR_VS0C .EQ. 1H)
	SPEECH_SYNTH_START_TABLE_EX _VS0C
	.ENDIF

	.IF (WITH_ISR_VS0D .EQ. 1H)
	SPEECH_SYNTH_START_TABLE_EX _VS0D
	.ENDIF

	.IF (WITH_ISR_VS1A .EQ. 1H)
	SPEECH_SYNTH_START_TABLE_EX _VS1A
	.ENDIF

	.IF (WITH_ISR_VS1B .EQ. 1H)
	SPEECH_SYNTH_START_TABLE_EX _VS1B
	.ENDIF

	.IF (WITH_ISR_VS2A .EQ. 1H)
	SPEECH_SYNTH_START_TABLE_EX _VS2A
	.ENDIF

	.IF (WITH_ISR_VS2B .EQ. 1H)
	SPEECH_SYNTH_START_TABLE_EX _VS2B
	.ENDIF

	.IF (WITH_ISR_VS3 .EQ. 1H)
	SPEECH_SYNTH_START_TABLE_EX _VS3
	.ENDIF

	.IF (WITH_ISR_VS4 .EQ. 1H)
	SPEECH_SYNTH_START_TABLE_EX _VS4
	.ENDIF

	.IF (WITH_ISR_VS5 .EQ. 1H)
	SPEECH_SYNTH_START_TABLE_EX _VS5
	.ENDIF

	.IF (WITH_ISR_VS6 .EQ. 1H)
	SPEECH_SYNTH_START_TABLE_EX _VS6
	.ENDIF
	
	.IF (WITH_SIM_SP .EQ. 1)
	.IF (WITH_ISR_VS0A .EQ. 1H)
	SPEECH_SYNTH_START_TABLE_EXT_EX _VS0A
	.ENDIF
	.IF (WITH_ISR_VS1A .EQ. 1H)
	SPEECH_SYNTH_START_TABLE_EXT_EX _VS1A
	.ENDIF
	.IF (WITH_ISR_VS2A .EQ. 1H)
	SPEECH_SYNTH_START_TABLE_EXT_EX _VS2A
	.ENDIF
		
	.ENDIF

;==============================================================================
	PUBLIC EVO_SYNTH_START_TABLE
EVO_SYNTH_START_TABLE:
.IF (WITH_EVO .EQ. 1)
	.IF (WITH_CH0_EVO .EQ. 1)
		EXTERN EVO_FXF13_ISR_EVO0
		DW EVO_FXF13_ISR_EVO0
	.ENDIF
	
	.IF (WITH_CH1_EVO .EQ. 1)
		EXTERN EVO_FXF13_ISR_EVO1
		DW EVO_FXF13_ISR_EVO1
	.ENDIF
	
	.IF (WITH_CH2_EVO .EQ. 1)
		EXTERN EVO_FXF13_ISR_EVO2
		DW EVO_FXF13_ISR_EVO2
	.ENDIF
.ENDIF		
	DW 0000H
;==============================================================================
; Start address of RAM that store information about channels.
;==============================================================================
	PUBLIC		MS_CHANNEL_ADDR_TABLE
MS_CHANNEL_ADDR_TABLE:
.IF (WITH_MS .EQ. 1)
	.IF (CHIPSERIES = 'W588C')
			DB VS2A_START
			DB VS1A_START	
	.ENDIF
	.IF (CHIPSERIES = 'W588D')
		.IF (WITH_TONE .EQ. 0)
			.IF (WITH_SP .EQ. 0)
				DB VS0A_START
				DB VS2A_START
				DB VS1A_START
			.ELSE ;WITH_SP .EQ. 1

⌨️ 快捷键说明

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