X68000Z上でIOCSコールを利用した音楽プログラムを動かした。

プログラマーのためのX68000環境ハンドブック – Programmers x68000 Environment handbook.PDF (archive.org)

453ページのOPMをIOCSをコールして動かすプログラムがX68000Z上で動いたのでメモっておく。

これで自作音源ドライバの作成に一歩近づいた・・・!

コンパイル環境

xdev68kを利用。

yosshin4004/xdev68k: Cross development environment for the SHARP X68K. (github.com)

makefileにはソースコード名を書く場所があるけど、

  • C言語の名前を削除
  • 今回のソースコードをアセンブラ枠に記入

で問題なくコンパイルできることを確認。

ソースコード

    lea initdata(PC),A1
loop
    move.b (A1)+,D1
    beq play
    move.b (A1)+,D2
    moveq #$68,D0
    trap #15
    bra loop

play
    lea musicdata(PC),A1
nextnote
    move.b (A1)+,D3 *D3=音程
    beq musstop
    move.b (A1)+,D4
    moveq #$68, D0
    move.b #$28, D1
    move.b D3, D2
    trap #15
    moveq #$68, D0
    move.b #8, D1
    move.b #%1111_000, D2
    trap #15

    move.l #20000,D0

wait2
    subq.l #1,D0
    bne wait2
    moveq #$68, D0
    move.b #8, D1
    move.b #%0000_000,D2
    trap #15

    ext.w D4
    mulu #10000,D4

wait
    subq.l #1,D4
    bne wait
    bra nextnote

musstop
    dc.w $FF00

initdata
    dc.b $20,%11_000_100
    dc.b $40,%010_1000
    dc.b $48,%000_0100
    dc.b $50,%110_1000
    dc.b $58,%000_0100
    dc.b $60,31
    dc.b $68,31
    dc.b $70,0
    dc.b $78,0
    dc.b $80,31
    dc.b $80,31
    dc.b $90,31
    dc.b $98,31
    dc.b $A0,7
    dc.b $A8,7
    dc.b $B0,3
    dc.b $B8,3
    dc.b $C0,1
    dc.b $C8,1
    dc.b $D0,3
    dc.b $D8,3
    dc.b $E0,10*16+3
    dc.b $E8,10*16+3
    dc.b $F0,5*16+3
    dc.b $F8,5*16+3
    dc.b 0

musicdata
    dc.b $41,20
    dc.b $3C,20
    dc.b $3E,20
    dc.b $35,60
    dc.b $35,20
    dc.b $3E,20
    dc.b $41,20
    dc.b $3C,60
    dc.b $0