Beep音を鳴らす部分は、【MZ80,Z88DK】C言語でBeep音を参照してください。これをベースに音程を変化させます。
【参考】Enri's Home PAGE (mz-80K)(外部サイト)
#define POKE( off, val ) ( *(unsigned char*)( off ) = ( val ) )
void main()
{
POKE( 0xe004, 0x77 ); // ド(L)
POKE( 0xe004, 0x07 ); // ド(H)
POKE( 0xe008, 0x01 ); // 音を鳴らし始める
for( int i = 0; i < 10000; i++ ){} // 音の長さ
POKE( 0xe004, 0xa7 ); // レ(L)
POKE( 0xe004, 0x06 ); // レ(H)
for( int i = 0; i < 10000; i++ ){} // 音の長さ
POKE( 0xe004, 0xed ); // ミ(L)
POKE( 0xe004, 0x05 ); // ミ(H)
for( int i = 0; i < 10000; i++ ){} // 音の長さ
POKE( 0xe008, 0x00 ); // 音を止める
}
アドレスE004hへ分周比を書き込むことによって音程を変化させます。2バイトで指定するため、同じアドレスに下位、上位の順に連続して書き込みます。
書き込むべき値の計算式は、以下の通りです。
1000000 / 周波数
例えば、「ラ」の音(440Hz)を鳴らしたい場合、1000000 / 440 = 2272(08E0h)ですので、E0h、08hの順に書き込みます。