Skip to content

Instantly share code, notes, and snippets.

@xiupos
Last active February 6, 2018 01:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xiupos/a4c3d3396ceaa2aeb02f63ac9f5ae67f to your computer and use it in GitHub Desktop.
Save xiupos/a4c3d3396ceaa2aeb02f63ac9f5ae67f to your computer and use it in GitHub Desktop.
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
TP8 EQU 0x11
N EQU 0x00
B3 EQU B'0001'
b3 EQU B'11111001'
C3 EQU B'0001'
c3 EQU B'11011001'
D3 EQU B'0001'
d3 EQU B'10100101'
E3 EQU B'0001'
e3 EQU B'01111011'
F3 EQU B'0001'
f3 EQU B'01100011'
G3 EQU B'0001'
g3 EQU B'00111100'
A4 EQU B'0001'
a4 EQU B'00011100'
A4s EQU B'0001'
a4s EQU B'00001100'
B4 EQU B'0000'
b4 EQU B'11111101'
C4 EQU B'0000'
c4 EQU B'11101101'
D4 EQU B'0000'
d4 EQU B'11010010'
E4 EQU B'0000'
e4 EQU B'10111101'
F4 EQU B'0000'
f4 EQU B'10110010'
G4 EQU B'0000'
g4 EQU B'10011110'
A5 EQU B'0000'
a5 EQU B'10001110'
B5 EQU B'0000'
b5 EQU B'01111110'
C5 EQU B'0000'
c5 EQU B'01110110'
D5 EQU B'0000'
d5 EQU B'01101001'
E5 EQU B'0000'
e5 EQU B'01011111'
F5 EQU B'0000'
f5 EQU B'01011001'
G5 EQU B'0000'
g5 EQU B'01001111'
A6 EQU B'0000'
a6 EQU B'01000111'
B6 EQU B'0000'
b6 EQU B'00111111'
C6 EQU B'0000'
c6 EQU B'00111011'
;**********************************************************************
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 ; 音量の設定
movlw E4
movwf TP4
movlw e4
movwf TP8
call TONEA
movlw C4
movwf TP4
movlw c4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call QB
call TIMTIM
movlw E4
movwf TP4
movlw e4
movwf TP8
call TONEA
movlw C4
movwf TP4
movlw c4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call QB
call TIMTIM
movlw F4
movwf TP4
movlw f4
movwf TP8
call TONEA
movlw D4
movwf TP4
movlw d4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call QB
call TIMTIM
movlw G4
movwf TP4
movlw g4
movwf TP8
call TONEA
movlw E4
movwf TP4
movlw e4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call QB
call TIMTIM
; --
movlw G4
movwf TP4
movlw g4
movwf TP8
call TONEA
movlw E4
movwf TP4
movlw e4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call QB
call TIMTIM
movlw F4
movwf TP4
movlw f4
movwf TP8
call TONEA
movlw D4
movwf TP4
movlw d4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call QB
call TIMTIM
movlw E4
movwf TP4
movlw e4
movwf TP8
call TONEA
movlw C4
movwf TP4
movlw c4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call QB
call TIMTIM
movlw D4
movwf TP4
movlw d4
movwf TP8
call TONEA
movlw B4
movwf TP4
movlw b4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call QB
call TIMTIM
; --
movlw C4
movwf TP4
movlw c4
movwf TP8
call TONEA
movlw A4
movwf TP4
movlw a4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call QB
call TIMTIM
movlw C4
movwf TP4
movlw c4
movwf TP8
call TONEA
movlw A4
movwf TP4
movlw a4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call QB
call TIMTIM
movlw D4
movwf TP4
movlw d4
movwf TP8
call TONEA
movlw B4
movwf TP4
movlw b4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call QB
call TIMTIM
movlw E4
movwf TP4
movlw e4
movwf TP8
call TONEA
movlw C4
movwf TP4
movlw c4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call QB
call TIMTIM
; --
movlw E4
movwf TP4
movlw e4
movwf TP8
call TONEA
movlw C4
movwf TP4
movlw c4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call QB
call TIMTIM
call TIMTIM
movlw D4
movwf TP4
movlw d4
movwf TP8
call TONEA
movlw B4
movwf TP4
movlw b4
movwf TP8
call TONEB
call TIMTIM
call QA
call QB
call TIMTIM
movlw D4
movwf TP4
movlw d4
movwf TP8
call TONEA
movlw B4
movwf TP4
movlw b4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call QB
call TIMTIM
call TIMTIM
call TIMTIM
call TIMTIM
; --
; --
movlw E4
movwf TP4
movlw e4
movwf TP8
call TONEA
movlw C4
movwf TP4
movlw c4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call TIMTIM
movlw E4
movwf TP4
movlw e4
movwf TP8
call TONEA
movlw C4
movwf TP4
movlw c4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call TIMTIM
movlw F4
movwf TP4
movlw f4
movwf TP8
call TONEA
movlw A4s
movwf TP4
movlw a4s
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call TIMTIM
movlw G4
movwf TP4
movlw g4
movwf TP8
call TONEA
movlw A4s
movwf TP4
movlw a4s
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call TIMTIM
; --
movlw G4
movwf TP4
movlw g4
movwf TP8
call TONEA
movlw A4
movwf TP4
movlw a4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call TIMTIM
movlw F4
movwf TP4
movlw f4
movwf TP8
call TONEA
movlw A4
movwf TP4
movlw a4
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call TIMTIM
movlw E4
movwf TP4
movlw e4
movwf TP8
call TONEA
movlw G3
movwf TP4
movlw g3
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call TIMTIM
movlw D4
movwf TP4
movlw d4
movwf TP8
call TONEA
movlw G3
movwf TP4
movlw g3
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call TIMTIM
; --
movlw C4
movwf TP4
movlw c4
movwf TP8
call TONEA
movlw E3
movwf TP4
movlw e3
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call TIMTIM
movlw C4
movwf TP4
movlw c4
movwf TP8
call TONEA
movlw E3
movwf TP4
movlw e3
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call TIMTIM
movlw D4
movwf TP4
movlw d4
movwf TP8
call TONEA
movlw F3
movwf TP4
movlw f3
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call TIMTIM
movlw E4
movwf TP4
movlw e4
movwf TP8
call TONEA
movlw G3
movwf TP4
movlw g3
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call TIMTIM
; --
movlw D4
movwf TP4
movlw d4
movwf TP8
call TONEA
movlw F3
movwf TP4
movlw f3
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call QB
call TIMTIM
call TIMTIM
movlw C4
movwf TP4
movlw c4
movwf TP8
call TONEA
movlw E3
movwf TP4
movlw e3
movwf TP8
call TONEB
call TIMTIM
call QA
call QB
call TIMTIM
movlw C4
movwf TP4
movlw c4
movwf TP8
call TONEA
movlw E3
movwf TP4
movlw e3
movwf TP8
call TONEB
call TIMTIM
call TIMTIM
call TIMTIM
call TIMTIM
call QA
call QB
call TIMTIM
call TIMTIM
call TIMTIM
call TIMTIM
; --
LOOP goto LOOP
MIXVOL movlw B'00000111' ; $07(ミキサーの設定)
movwf ADR
movlw B'00111000' ; C B A C B A
movwf DAT ; ノイズ トーン
call SUB1 ; 0 = 出力
movlw B'00001000' ; $08(チャンネルAの音量)
movwf ADR
movlw B'00001111' ; 下位4bitが音量
movwf DAT
call SUB1
movlw B'00001001' ; $09(チャンネルBの音量)
movwf ADR
movlw B'00001111' ; 下位4bitが音量
movwf DAT
call SUB1
movlw B'00001010' ; $0A(チャンネルCの音量)
movwf ADR
movlw B'00001111' ; 下位4bitが音量
movwf DAT
call SUB1
return
TONEA movlw B'00000001' ; $01(チャンネルAの周波数)
call TOU
movlw B'00000000' ; $00(チャンネルAの周波数)
goto TOD
TONEB movlw B'00000011' ; $03(チャンネルBの周波数)
call TOU
movlw B'00000010' ; $02(チャンネルBの周波数)
goto TOD
TONEC movlw B'00000101' ; $05(チャンネルCの周波数)
call TOU
movlw B'00000100' ; $04(チャンネルCの周波数)
goto TOD
TOU movwf ADR
movf TP4 ,w ; 下位4bitがTPの上位4bit
movwf DAT
call SUB1
return
TOD movwf ADR
movf TP8 ,w ; TPの下位8bit
movwf DAT
call SUB1
return
QA clrf TP4
clrf TP8
call TONEA
return
QB clrf TP4
clrf TP8
call TONEB
return
QC clrf TP4
clrf TP8
call TONEC
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 0x066
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