16F84A+YMZ294(きらきら星、エンベロープ)
; きらきら星(エンベロープ) | |
; ha2zakura | |
list p=16F84A ; 使用するPICの種類の定義 | |
#include <p16F84A.inc> ; 設定ファイルの指定 | |
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC | |
; _CP_OFF プログラムコードプロテクト無効 | |
; _WDT_OFF ウォッチドドック・タイマ無効 | |
; _PWRTE_ON パワーアップタイム有効 | |
; _HS_OSC 外部クロック(4MHz-20MHz) | |
;***** 定数の定義 ** | |
TIM1 EQU 0x0C ; タイマー用 | |
TIM2 EQU 0x0D ; タイマー用 | |
ADR EQU 0x0E ; 書き込みアドレス | |
DAT EQU 0x0F ; 書き込みデータ | |
TP4 EQU 0x10 ; TP上位4bit | |
TP8 EQU 0x11 ; TP下位8bit | |
; 大文字:上位4bit, 小文字:下位8bit | |
TPC3 EQU B'0001' | |
TPc3 EQU B'11011001' | |
TPD3 EQU B'0001' | |
TPd3 EQU B'10100101' | |
TPE3 EQU B'0001' | |
TPe3 EQU B'01111011' | |
TPF3 EQU B'0001' | |
TPf3 EQU B'01100011' | |
TPG3 EQU B'0001' | |
TPg3 EQU B'00111100' | |
TPA4 EQU B'0001' | |
TPa4 EQU B'00011100' | |
TPB4 EQU B'0000' | |
TPb4 EQU B'11111101' | |
TPC4 EQU B'0000' | |
TPc4 EQU B'11101101' | |
;********************************************************************** | |
ORG 0x000 ; リセット | |
BSF STATUS, RP0 | |
CLRF TRISA ; 0 : 出力, 1 : 入力 | |
CLRF TRISB ; bit0 -> RA0(RB0) | |
BCF STATUS, RP0 | |
call TIMTIM ; YMZ294が起動するまで待つ | |
call TIMTIM | |
call TIMTIM | |
call TIMTIM | |
call TIMTIM | |
call TIMTIM | |
goto MAIN ; MAINへ移動 | |
;********************************************************************** | |
; メイン | |
MAIN call MIXVOL ; 音量の設定 | |
call AMEL | |
call BMEL | |
call AMEL | |
LOOP goto LOOP | |
AMEL call C3 | |
call TIMTIM | |
call TIMTIM | |
call C3 | |
call TIMTIM | |
call TIMTIM | |
call G3 | |
call TIMTIM | |
call TIMTIM | |
call G3 | |
call TIMTIM | |
call TIMTIM | |
call A4 | |
call TIMTIM | |
call TIMTIM | |
call A4 | |
call TIMTIM | |
call TIMTIM | |
call G3 | |
call TIMTIM | |
call TIMTIM | |
call TIMTIM | |
call TIMTIM | |
call F3 | |
call TIMTIM | |
call TIMTIM | |
call F3 | |
call TIMTIM | |
call TIMTIM | |
call E3 | |
call TIMTIM | |
call TIMTIM | |
call E3 | |
call TIMTIM | |
call TIMTIM | |
call D3 | |
call TIMTIM | |
call TIMTIM | |
call D3 | |
call TIMTIM | |
call TIMTIM | |
call C3 | |
call TIMTIM | |
call TIMTIM | |
call TIMTIM | |
call TIMTIM | |
return | |
BMEL call G3 | |
call TIMTIM | |
call TIMTIM | |
call G3 | |
call TIMTIM | |
call TIMTIM | |
call F3 | |
call TIMTIM | |
call TIMTIM | |
call F3 | |
call TIMTIM | |
call TIMTIM | |
call E3 | |
call TIMTIM | |
call TIMTIM | |
call E3 | |
call TIMTIM | |
call TIMTIM | |
call D3 | |
call TIMTIM | |
call TIMTIM | |
call TIMTIM | |
call TIMTIM | |
call G3 | |
call TIMTIM | |
call TIMTIM | |
call G3 | |
call TIMTIM | |
call TIMTIM | |
call F3 | |
call TIMTIM | |
call TIMTIM | |
call F3 | |
call TIMTIM | |
call TIMTIM | |
call E3 | |
call TIMTIM | |
call TIMTIM | |
call E3 | |
call TIMTIM | |
call TIMTIM | |
call D3 | |
call TIMTIM | |
call TIMTIM | |
call TIMTIM | |
call TIMTIM | |
return | |
MIXVOL movlw B'00000111' ; $07(ミキサーの設定) | |
movwf ADR | |
movlw B'00111110' ; C B A C B A | |
movwf DAT ; ノイズ トーン | |
call SUB1 ; 0 = 出力 | |
movlw B'00001000' ; $08(チャンネルAの音量) | |
movwf ADR | |
movlw B'00010000' ; 下位4bitが音量 | |
movwf DAT | |
call SUB1 | |
movlw B'00001100' ; $0C(エンベロープの周波数) | |
movwf ADR | |
movlw B'00011110' ; EPの上位8bit | |
movwf DAT | |
call SUB1 | |
movlw B'00001011' ; $0B(エンベロープの周波数) | |
movwf ADR | |
movlw B'10000100' ; EPの下位8bit | |
movwf DAT | |
call SUB1 | |
TONE movlw B'00000001' ; $01(チャンネルAの周波数) | |
movwf ADR | |
movf TP4 ,w ; TPの上位4bit | |
movwf DAT | |
call SUB1 | |
movlw B'00000000' ; $00(チャンネルAの周波数) | |
movwf ADR | |
movf TP8 ,w ; TPの下位8bit | |
movwf DAT | |
call SUB1 | |
movlw B'00001101' ; $0D(エンベロープの形状) | |
movwf ADR | |
movlw B'00000000' ; 減衰 | |
movwf DAT | |
call SUB1 ; カウントはじめ | |
return | |
C3 movlw TPC3 | |
movwf TP4 | |
movlw TPc3 | |
movwf TP8 | |
call TONE | |
return | |
D3 movlw TPD3 | |
movwf TP4 | |
movlw TPd3 | |
movwf TP8 | |
call TONE | |
return | |
E3 movlw TPE3 | |
movwf TP4 | |
movlw TPe3 | |
movwf TP8 | |
call TONE | |
return | |
F3 movlw TPF3 | |
movwf TP4 | |
movlw TPf3 | |
movwf TP8 | |
call TONE | |
return | |
G3 movlw TPG3 | |
movwf TP4 | |
movlw TPg3 | |
movwf TP8 | |
call TONE | |
return | |
A4 movlw TPA4 | |
movwf TP4 | |
movlw TPa4 | |
movwf TP8 | |
call TONE | |
return | |
B4 movlw TPB4 | |
movwf TP4 | |
movlw TPb4 | |
movwf TP8 | |
call TONE | |
return | |
C4 movlw TPC4 | |
movwf TP4 | |
movlw TPc4 | |
movwf TP8 | |
call TONE | |
return | |
; 書き込み ; WR CS AC Data | |
SUB1 movlw B'00001000' ; 0 0 0 | |
movwf PORTA | |
movf ADR, W ; 0 0 0 ADR | |
movwf PORTB | |
movlw B'00001011' ; 1 1 0 | |
movwf PORTA ; ADRを書き込む | |
movlw B'00001100' ; 0 0 1 | |
movwf PORTA | |
movf DAT, W ; 0 0 1 DAT | |
movwf PORTB | |
movlw B'00001111' ; 1 1 1 | |
movwf PORTA ; DATを書き込む | |
return | |
; タイマー | |
TIM movlw 0x0FF | |
movwf TIM1 | |
TIMLP nop | |
decfsz TIM1, F | |
goto TIMLP | |
return | |
TIMTIM movlw 0x099 | |
movwf TIM2 | |
TIMLP2 call TIM | |
decfsz TIM2, F | |
goto TIMLP2 | |
return | |
END | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment