6802用アセンブラを作る(4) JR-100でのテスト

プログラミング

作成したアセンブラのプロトを使って、JR-100の実機試してみました。最終的な目的はJR-100に搭載されているVIA(6522)のテストのためなので、マシン語から直接VIAのレジスタを叩いてJR-100のスピーカーから音階を鳴らしてみました。JR-100への入力は同じく自作のFSKプレイヤーを使います。

プログラム

JR-100ではVIAのPB7がスピーカーに接続されています。つまりVIAのタイマー1のフリーランモードでPB7に出力される方形波が音声として再生されるため、タイマー1の初期値を生成したい周波数に合わせて調整すればよいということです。タイマーが0になるごとにPB7出力が反転するので、カウンタ値は「クロック周波数÷2÷目的の周波数」とする必要があることに注意。waitは単純にビジーループで回しています。またwait部分は2重ループで65536回(256×256)回しています。DECA命令が2クロック、BNE命令が4クロックですので、このループにかかる時間は、JR-100のCPUクロックが890kHzなので、6*65536/890000=約0.44秒となります。

        .ORG    0x3000
VIA:    .EQU    0xc800
ORB:    .EQU    0x00
IRB:    .EQU    0x00
ORA:    .EQU    0x01
IRA:    .EQU    0x01
DDRB:   .EQU    0x02
DDRA:   .EQU    0x03
T1CL:   .EQU    0x04
T1CH:   .EQU    0x05
T1LL:   .EQU    0x06
T1LH:   .EQU    0x07
T2CL:   .EQU    0x08
T2CH:   .EQU    0x09
SR:     .EQU    0x0a
ACR:    .EQU    0x0b
PCR:    .EQU    0x0c
IFR:    .EQU    0x0d
IER:    .EQU    0x0e
ORANH:  .EQU    0x0f
IRANH:  .EQU    0x0f
TEMP:   .EQU    0x40

START:
        LDX     VIA
        LDAA    [X+ACR]
        ORAA    0xd0        ; T1 free-run mode
        STAA    [X+ACR]
C:      LDAA    0xa5        ; C = 261.63Hz, 890kHz/2//261.63 = 1701 = 0x06a5
        STAA    [X+T1CL]
        LDAA    0x06
        STAA    [X+T1CH]
        BSR     WAIT
        BSR     WAIT
D:      LDAA    0xeb        ; D = 293.66Hz, 890kHz/2/293.66 = 1515 = 0x05eb
        STAA    [X+T1CL]
        LDAA    0x05
        STAA    [X+T1CH]
        BSR     WAIT
        BSR     WAIT
E:      LDAA    0x46        ; E = 329.63Hz, 890kHz/2/329.63 = 1350 = 0x0546
        STAA    [X+T1CL]
        LDAA    0x05
        STAA    [X+T1CH]
        BSR     WAIT
        BSR     WAIT
        LDAA    [X+ACR]
        ANDA    0x3F
        STAA    [X+ACR]
        RTS

; 約0.4秒待つ
WAIT:   PSHA
        CLRA
        CLRB
LOOP:   DECB
        BNE LOOP
        DECA
        BNE LOOP
        PULA
        RTS

自作アセンブラではまだデータ領域の定義ができないので、周波数に対応するカウンタ値を直接プログラムに埋め込んでます。

実行

これをアセンブラでマシン語の数値列に変換し、FSKプレイヤーで再生します。JR-100側ではMLOADでロードし、USR()で実行します。

まずPC側で音声再生する手順。

# java -jar asm6802.jar -r doremi.asm -a
3000: CE C8 00 A6 0B 8A D0 A7 0B 86 F9 A7 04 86 0D A7
3010: 05 8D 0F 8D 0D 8D 0B 8D 09 8D 07 A6 0B 84 3F A7
3020: 0B 39 36 86 06 5F 5A 26 FD 4A 26 FA 32 39

# java -jar asm6802.jar -r doremi.asm -w doremi.dat    ; FSKプレイヤーの入力用には"-a"オプションは不要
# java -jar fskplayer.jar -machine -r doremi.dat -a 0x3000 -n test

JR-100側では、fsfkplayer.jarを実行する前に、MLOADを実行しておきます。MLOADが完了したら、マシン語を実行してください。

MLOAD
A=USR($3000)

再生した様子

うまくいったようです。

これまでの記録

コメント

タイトルとURLをコピーしました