(林长春 宋连科)APPLE-Ⅱ微机的发声,与地址单元$C03X(X=0~F)有关。程序不断地访问$C03X地址单元中的任何一个(如$C03C)时,将有一方波通过扬声器,使其发声。扬声器发声频率为程序访问$C03C地址单元频率的一半。
程序1是机器语言发声程序。其中$FCA8是延时子程序WAIT的入口地址,延时时间T由累加器A的内容决定:T=\(^{2}\)+27A+26)/2(μs)。程序1运行后,CPU将不停地对$C03C进行写操作,其周期约为479μs。扬声器发声周期约为958μs(频率为1040Hz,在音频范围内),这时能听到扬声器发出连续的蜂鸣音。
程序2是一个仿电子琴程序,其中10~40语句向内存写入一段机器语言子程序。该子程序用来查询键盘,并将音调控制数据送到相应的内存地址单元。键盘各键的设置情况是,1、2、3、4、5、6、7、8等键分别设定成高音i·~i,Q、W、E、R、T、Y、U、I等键分别设定成中音1~i,A、S、D、F、G、H、J、K等键分别设定成低音!~1。运行程序2后即可进行弹奏,如想暂停程序,可按空格键。按CTRL-RESET键可退出程序。
程序1:
0300 8D 3C C0; STA $C03C
0303 A9 0B ; LDA #
0305 20 A8 FC; JSR $FCA8
0308 4C 00 03; JMP $0300
程序2:
10 FOR I=772 TO 824
20 READ A:POKE I, A:NEXT I
30 FOR J=1 TO 16
40 READ B,C:POKE B, C:NEXT J
50 HOME:VTAB 5:HTAB 12:PRINT“Please press a key!”
60 VTAB 9: HTAB 10:PRINT″ 1 2 3 4 5 6 7 8″
70 VTAB 12:HTAB 10:PRINT″ Q W E R T Y U I″
80 VTAB 15:HTAB 10:PRINT: A S D F G H J K″
90 CALL 772
100 END
110 DATA 141,60,192,44,0,192,16,30,173,0,192,201,160,240,3,7,6,30
120 DATA 3,44,0,192,48,241,76,22,3,168,44,16,192,169,8,32,168,252
130 DATA 185,128,2,202,208,218,170,76,4,3,63,56,50,47,41,36,33,31
140 DATA 849,126,855,112,837,99,850,94,852,83,857,73,853,66,841,63
150 DATA 833,252,851,224,836,198,838,188,839,166,840,146,842,132,843,126