📄 main.asm
字号:
CHIP W567
INCLUDE PGM_HEAD_567B.INI
PUBLIC QUIT_IRQ_ISR
PUBLIC QUIT_VS0_ISR
PUBLIC QUIT_VS1_ISR
PUBLIC WTB_ENV_SHARP_DECAY_AMOUNT
; PUBLIC FXF_ISR_NESTED_INT_MASK
;==========================================================================
; DECLARE VARIABLES INSIDE THIS SECTION
; EXAMPLE => VAR1 DS 3
; VAR2 DS 1
;==========================================================================
USER_RAM: SECTION
INCLUDE A00_Variable_Define.ASM ;定义变量及宏 Wangbo
INCLUDE A03_ISD17XX_Define.ASM
INCLUDE A03_ISD17XX_MACRO1.ASM
ENDS
;==========================================================================
; WRITE PROGRAM CODES & TABLES INSIDE THIS SECTION
;==========================================================================
CODE: SECTION
;==================================================
FXF15_ISR:
LDA #02H
STA !EFC1 ;CLEAR EVF OF FXF15
;User can insert program from here
;========================================================
MACRO_SYS_Time
;========================================================
PLA
STA !BANK
RELOAD_SW_CS
PLA
RTI
;=== INTERRUPT SERVICE ROUTINES ===
IRQ_ISR:
PHA
STORE_SW_CS
LDA !BANK
PHA
LDA !IEF0
AND !EVF0
BIT #02H
BNE VS0_ISR
BIT #04H
BNE VS1_ISR
BIT #10H
BNE FXF13_ISR
LDA !IEF1
AND !EVF1
BIT #02H
BNE FXF15_ISR
PLA
STA !BANK
RELOAD_SW_CS
PLA
RTI
;=== SPEECH VS0 IRQ ===
VS0_ISR:
LDA #02H
STA !EFC0 ;CLEAR EVF0 FLAG OF TIMER0
LDA #10H
BIT <VS0_STATUS ;check PAUSE flag of VS0_STATUS
BNE QUIT_VS0_ISR
JMP (ISR0_NEXT_SYNTH_START) ;DO VS0 SPEECH SYNTHESIZE
QUIT_VS0_ISR:
PLA
STA !BANK
RELOAD_SW_CS
PLA
RTI
;=== SPEECH VS1 IRQ ===
VS1_ISR:
LDA #04H
STA !EFC0 ;CLEAR EVF0 FLAG OF TIMER1
LDA #10H
BIT <VS1_STATUS ;check PAUSE flag of VS1_STATUS
BNE QUIT_VS1_ISR
JMP (ISR1_NEXT_SYNTH_START) ;DO VS1 SPEECH SYNTHESIZE
QUIT_VS1_ISR:
PLA
STA !BANK
RELOAD_SW_CS
PLA
RTI
;=== MELODY FXF13 IRQ ===
FXF13_ISR:
LDA #10H
STA !EFC0 ;CLEAR EVF0 FLAG OF TIMER_FXF
PHX
PHY
;=== OPEN SPEECH IRQ ===
LDA !IEF0
PHA ;BACK-UP IEFL0 & IEF1
LDA #06H ;FXF_ISR_NESTED_INT_MASK DEFAULT=06H
AND !IEF0 ;ENABLE TM0/1 INT ONLY
STA !IEF0
CLI
JMP LIB_FXF13_ISR ;DO MELODY SYNTHESIZE
QUIT_IRQ_ISR:
SEI
PLA
AND #11111001B
ORA !IEF0
STA !IEF0 ;RESTORE IEF0
;=== check MS busy flag ===
LDA <MS_STATUS
.IFDEF TWOMIDI
ORA <MS_STATUS+1
.ENDIF
BIT #01H
BNE CONT_QUIT_FXF13_INT
LDA #10H
TRB !IEF0
CONT_QUIT_FXF13_INT:
PLY
PLX
PLA
STA !BANK
RELOAD_SW_CS
PLA
RTI
;=== INTERRUPT SERVICE ROUTINES END ===
;=== RESET BEGIN PROGRAM START HERE ===
MAIN_START:
SYSTEM_INIT_PROCEDURE_W567 ;SYSTEM INITIALIZATION PROCEDURE
SET_STACK_POINTER_TO STACK_END ;USER CAN CHANGE THE VALUE
CLEAR_RAM_FROM_00H_TO RAM_END ;USER CAN CHANGE THE VALUE
SET_SPEAKER_OUTPUT_TYPE_TO DAC_5mA ;USER'S OPTION (DAC_5mA/ DAC_3mA/ PWM)
SPECIAL_REGISTERS_INIT ;RESET SPECIAL REGISTERS
CLI
;=== DC RAMP UP FOR DAC-type MIXER OUTPUT ===
;DAC_RAMP_UP:
; LDX #00H
;INCREASE_AGAIN:
; LDY #77H
;NOP_LOOP:
; DEY
; BNE NOP_LOOP
; CLC
; LDA !S0DCH
; ADC #01H
; STA !S0DCH
; CMP #80H
; BNE INCREASE_AGAIN
;=============================
;---------------------------SPEECH EQUATION -------------------------------------
; PLAY MANSPEAK_MDM<CH=1/2,VOL=100,SR=8000>
; MANSPEAK_MDM is speech file name with MDPCM format
; CH is speech channel assignment, CH=1:TIMER0 CH=2:TIMER1
; VOL is volume level(0~127)
; SR is sampling rate,
; if user not assign value to SR then use the default SR in speech file
;---------------------------MELODY EQUATION--------------------------------------
; PLAY MARCH<CH=4MS,VOL=100,TPO=120>
; March is melody file name with MIDI format 0
; CH is melody channel assignment(1MS~4MS)
; VOL is volume level(0~127)
; TPO is tempo value
; if user not assign value to TPO then use the default tempo in MIDI file
;--------------------------------------------------------------------------------
;===== USER'S CODE START HERE =====
JMP SProgram_Start
INCLUDE A10_Initial_Main.ASM
INCLUDE A20_KEY_LED.ASM
INCLUDE A30_ISD17XX.ASM
INCLUDE A31_ISD17XX_TAB.ASM
;===== USER'S CODE END ============
ENDS
;==========================================================================
; ASSIGN INTERRUPT VECTORS INSIDE THIS SECTION
;==========================================================================
VECTOR: SECTION
ORG 1000H
DW 0040H ;DO NOT REMOVE
ORG 100EH
DW 0990H ;IV OF BRK
ORG 1010H
DW 1000H ;IV OF EXT0
DW 1000H ;IV OF EXT1
ORG 101CH
DW MAIN_START ;IV OF RESET
DW IRQ_ISR ;IV OF IRQ
; ORG 103CH
; DW MAIN_START ;IV OF RESET FOR TEST
; DW IRQ_ISR ;IV OF IRQ FOR TEST
ENDS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -