📄 channeltable.asm
字号:
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 + -