Last active
August 29, 2015 14:13
-
-
Save yang-wei/8b96ef75b78fb50241e3 to your computer and use it in GitHub Desktop.
This file contains 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
ORG 7000H ; プログラムの開始番地 | |
;メインプログラム | |
MAIN: LD BC,(8F14H) ; 音の長さを設定 | |
CALL OTODASU ; OTODASUへ分岐する | |
CALL FUYASU ; FUYASUへ分岐する | |
JP MAIN ; 新しい長さおよび高さで鳴らす | |
;WAITサブルーチン | |
WAIT: CPD ; 待ち時間(音の高さ)を減らす | |
JP PE,WAIT ; 待ち時間(音の高さ)が0になるまでWAITを繰り返す | |
RET ; 0になると、サブルーチンから戻る | |
;OTODASUサブルーチン | |
OTODASU:CPD ; 繰り返す回数で減らす | |
PUSH AF ; AFレジスタの内容をスタックに転送する | |
PUSH BC ; 音の長さをスタックに転送 | |
LD A,0 ; 出力データセット | |
OUT (50H),A ; スピーカーに出力 | |
LD BC,(8F10H) ; 音の高さを設定 | |
CALL WAIT ; 待ち時間(WAITへ分岐) | |
LD A,1 ; 出力データセット | |
OUT (50H),A ; スピーカーに出力 | |
LD BC,(8F10H) ; 音の高さ(周期)を設定 | |
CALL WAIT ; 待ち時間(WAITへ分岐) | |
POP BC ; スタックに記憶した音の高さをレジスタBCに転送する | |
POP AF ; スタックに記憶した音の長さをレジスタAFに転送する | |
JP PE,OTODASU ; 繰り返し回数が0ならない限り、OTODASUを繰り返す | |
RET ; 繰り返し回数が0になったら、無条件にサブルーチンからもどる | |
;音の長さおよび高さを増やすサブルーチン | |
FUYASU: LD HL,(8F10H) ; 音の高さを読み出し | |
LD BC,(8F12H) ; 音の高さの増分を読み出し | |
ADD HL,BC ; 音の高さを増やす | |
LD (8F10H),HL ; 音の高さを書き込み | |
LD HL,(8F14H) ; 音の長さを読み出し | |
LD BC,(8F16H) ; 音の長さの増分を読み出し | |
ADD HL,BC ; 音の長さを増やす | |
LD (8F14H),HL ; 音の長さを書き込み | |
RET ; MAINへもどる | |
END ; 終了 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment