$30 off During Our Annual Pro Sale. View Details »

PC-6001でPSG曲を鳴らすまでを全部NetBSD上の Makefile に押し込んでみた...

PC-6001でPSG曲を鳴らすまでを全部NetBSD上の Makefile に押し込んでみた / osc2025hiroshima

2025/12/13(土)に行われたオープンソースカンファレンス2025広島の「NetBSDのご紹介」のセミナーで発表したスライドです。セミナー時のスライドから一部誤記修正をしています。

Avatar for Izumi Tsutsui

Izumi Tsutsui

December 13, 2025
Tweet

More Decks by Izumi Tsutsui

Other Decks in Programming

Transcript

  1. PC-6001 スペック •CPU: 8bit Z80互換 4MHz •RAM: 標準 16KB, 最大32KB

    •グラフィック: 128×192ドット 4色 256×192ドット モノクロ2色 •音源:PSG 3和音 •標準価格:89,800円
  2. PSG音源 •いわゆるピコピコ音 × 3和音 •元はアーケードゲーム用? •BASIC言語だと PLAY 文で MML (Music

    Macro Language) という書式を書いて演奏 こんなの→ "C8<D+D+8G8F8G8D+>D+DD+F" •“C” が「ド」、“8” が「8分音符の長さ」  “<” で1オクターブ下げる、という具合
  3. P6 PSGドライバ使用曲例  TINY野郎さんによるYS2OP曲 1000 REM A-PART *********************** 1010 "D

    t11,3v15s-3,1,-3,0,0M12,2,1,4l16r4 1100 "D [l16o4d+ega8<aaa>c#<a>d<a>e<a>d<a>>b-gec#<b-gec#efg#fefg#a 1110 "D >c#<ab-gafgeb-gafgefdc#defgab->c#ec#<b->fc#<b-<ef 1120 "D g4.ab->c#4.efgfefgab->c#e8e8f8g8 1200 "D [l16o5fecd&d2<a>cdcfecd&d4.&[d48&u-8]5d48u%0<agfe 1210 "D l8f.d.fg.e.ga.f.de.g.b-a2>l16defgagfel8g.e.c<g.>c.e 1220 "D l16fd<afda>dfec<gecg>ce:<dfa>c#dfa>c#d4.&[d48&u-4]5d48u%0]2 1230 "D l32o4e-8.<b->e-g8.e-gb-8.gb->e-4: 1300 "D l16o5a4dfga8.g8fg8>d8.<a8gf8e8.f8.g8. 1310 "D a4dfga8.g8fg8>d8.d8e8d8d4c#4 1320 "D ([o6[dfa]4e-gb-g[dfa]4 cceg]2)]2 1400 "D l16o5drrdrrdd8&[d48&u-8(]8u%0 2000 REM B-PART *********************** 2010 "E t11,3v15s-3,1,-3,0,0M12,2,1,4l16r4u%-1 2100 "E [o3l16ab>c+e8<c+c+c+aebegebe 2110 "E (s-2,1,-1,0,0>l32[ab-]4>[ab-]4<l16ab->c#<b-ab->c#d) 2120 "E s-3,1,-3,0,0e4g4a+4>e4g4.f8e2<a+2>e2g2<l8ec#de 2200 "E [[l16o5dc<ga&a4>l8agfe]2 2210 "E d.<a.>de.c.ef.d.<a>c#.e.g<f2a4>d4e2c2 2220 "E f2e2:d2dc#<b>c#]2 2230 "E o3b-4>d+4g4a+4>: 2300 "E l16o5(a&a4dfga8.g8fg8>d8.<a8gf8e8.f8.g8) 2310 "E e+4rdee+8.e8de8a8.a8a8a8a4e4 2320 "E [o4[fa>d<]4gb->e-<b-[fa>d<]4gg>ce<]2]2 2400 "E l16o4a<d>da<ga>aa8&[a48&u-8(]8u%0 3000 REM C-PART *********************** 3010 "F t11,3v14p2s-10,1,-2,0,0l16w15rc32c32w8c8s-3,1,-1,0,0p1w18 3100 "F [o2l16aap2ap1a>c#<a>p2dp1<a>e<a>p2fp1<a>g<a>p2fp1<a 3110 "F >e<a>p2fp1<a>e<a>p2dp1<a>c#<ap2b-p1gab->p2c#p1<b- 3120 "F [aaa>p2arap1a8a<aap2ap1ap2a:p1>c#d<]2o3c#d<p1 3130 "F [aaa>p2arap1a8:a<aap2ap1ap2ap1>c#d<]2 3140 "F o2a>p2a<ap1ap2bbp1>c#p2c#p1 3200 "F [o3[ddp2dp1d]4[ccp2cp1c]4 3210 "F <b-b->p2fp1b->d<b-p2fp1b-ccp2gp1>cec<p2gp1>c 3220 "F <ddp2fp1a>d<ap2fp1d:<a>ap2gp1e<aap2ap1a]2o2a>p2agp1e<p2aap1ap2a 3230 "F p1>[[ddp2dp1d]4[ccp2cp1c]4 3240 "F <b-b->p2fp1b->d<b-p2fp1b-ccp2gp1>cec<p2gp1>c: 3250 "F <ddp2fp1a>d<ap2fp1d<a>ap2gp1e<aap2ap1a]2 3260 "F o3e-e-p2b-p1e-ge-p2ap1e-b-e->p2e-p1<e->g< 3300 "F s-8,1,-2,0,0p2l32(w8cw12cw16cw20cw24cw28cw16)p1: 3310 "F s-3,1,-1,0,0l16[dd>p2dp1<dga>p2cp1d<[ff>p2fp1<f]2 3320 "F [b-b->p2b-p1<b-]2:[aa>p2ap1<a]2]2 3330 "F aap2ap1a>aec#<a 3340 "F [dr8dr8>p2cp1d<rdp2fp1de-e-p2gp1b- 3350 "F dr8dr8>p2cp1d<rdp2fp1dcp2cegp1]2]2 3400 "F p2l16p2w15cw8ccw15cw8ccs-10,2,-1,0,0p1o4cp2w15c8.
  4. MML修正〜ビルド サイクル (1) WaveTone で採譜 (2) 3MLE で編集・確認 (3) 3ML→P6PSG

    MML変換・修正 (4) MML2P6PSGDRVでPSG音源 ドライバ用バイナリ生成 (5) エミュレータに転送して試奏 (6) MML完成後プログラム整備 (7) txt2basによるP6データ生成 (8) なんでもピーガーでwav変換
  5. MML修正〜ビルド サイクル (1) WaveTone で採譜 (2) 3MLE で編集・確認 (3) 3ML→P6PSG

    MML変換・修正 (4) MML2P6PSGDRVでPSG音源 ドライバ用バイナリ生成 (5) (6) MML完成後プログラム整備 (7) txt2basによるP6データ生成 (8) なんでもピーガーでwav変換 Windows上 Windows上 NetBSD上 Windows上 NetBSD上 NetBSD上 Windows上
  6. •とりあえずChatGPTに投げてみる PC-6001のエミュレータ用のテープデータのP6ファイル を入力として、PC-6001実機でCLOADできる音声wave ファイルを出力するNetBSDやLinuxでコンパイルできる C99プログラムを書いて。 音声データは 1200Hz および 2400Hz の矩形波、データ

    0は1200Hz 2周期、データ1は2400Hz 1周期テープデー タ先頭のロングヘッダは2秒、BASICヘッダのあとの ショートヘッダは0.5秒、ヘッダの長さはマクロで可変に してください。 その他テープデータ仕様でわからないところがあれば質 問してください。 その1:p6towav テープ音声変換
  7. •雑にZ80実装とドライバ説明書を  ChatGPTに投げてみる Z80 CPUと PSGチップを持つ PC-6001 用の PSG音源ドライバのツール として、BASICのREMコメント文で書かれたMMLをコンパイルして音源 ドライバで演奏可能なバイナリにする

    MMLコンパイラがあります。これ は PC-6001のZ80のアセンブラで書かれているのですが、これと同様の プログラムをC言語で記述したいと思っています。 元のプログラムでは BASICプログラムのコメント部分のテキストを抽出 するようになっていますが、C言語版ではPSG音源パート文字の D E F が 行先頭にあるものは有効、それ以外はコメントとして無視する仕様と し、それ以外はもとのMMLコンパイラと同様の仕様にしたいと思ってい ます。 まずMMLの仕様は以下 [ドライバマニュアル、技術資料、ドライバとコンパイラのZ80ソースコード をどかっと貼付] まずはMMLコンパイラのソースから実装設計仕様書を書けますか? その2:p6psgmmlc MMLコンパイラ