Created
February 6, 2018 01:35
-
-
Save xiupos/ef6cd501f81ce69d553674f23d50f842 to your computer and use it in GitHub Desktop.
16F84A+YMZ294(きらきら星、エンベロープ)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; きらきら星(エンベロープ) | |
; 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