OSC2016広島のNetBSDセミナーで発表した『NetBSD/luna68kで「PSG音源の調べ」ふたたび』のスライドです。
NetBSD/luna68kで「PSG音源の調べ」ふたたびオープンソース カンファレンス2016広島ルナ@広島 ご当地ソングデモIzumi Tsutsui[email protected]Twitter: @tsutsuii
View Slide
LUNAとは よしだともこ先生のブロクよりLUNAというのは、1980年代から1990年代の初めごろにかけて、京都に本社を持つオムロン株式会社が発売していた、UNIXワークステーションの名前です(その当時、私はこの会社のUNIXワークス テーション開発部門で働いていました)http://notredameningen.kyo2.jp/e422862.html
過去のLUNA@広島 2013年サテライトキャンパスひろしま初年度https://twitter.com/moveccr/status/386697554529771520
Twitter TL on LUNA-II mlterm-fb + tw rubygem
OSC2015広島にて「今回は LUNAが見られなくて残念でした」えーと、なんかすいません
そういえばルナと言えばhttps://twitter.com/tsutsuii/status/398686477023858688@KOF2013
2015年 シーズンオフhttps://twitter.com/ebijun/status/677990635211587584
2016年のOSC広島にはなんとかしてLUNAを持ち込まなければ……
と、思っていたのですが
2016年 11月23日https://twitter.com/carp_News24/status/801662159012831232
(´・ω・`)ありがとう、ルナ
とりあえずネタは仕込みましたhttps://twitter.com/tsutsuii/status/800362729458413568「みくった〜♪」
●いわゆるピコピコ音 × 3和音●元はアーケードゲーム用●イメージとしてはファミコンの音が近いです(※ファミコンの音源とPSGとは微妙に違います)PSG音源とは
●NEC PC-6001/mkII●SHARP X1シリーズ●富士通 FM-7/FM-77シリーズ●MSX●SHARP MZ-5500だいたい ’80年代前半のマシン。85年以降は FM音源チップ搭載機が主流にPSG音源を搭載したマシン出典: https://ja.wikipedia.org/wiki/Programmable_Sound_Generator
PC-6001内のPSG音源IC
MOSAIC.WAV アルバム「電気の恋人」の歌詞より「PSGでやっと3和音 それでも感動してたあの頃〜♪」https://www.amazon.co.jp/dp/B00569BHDY
いわゆる おっ◯んホイホイhttps://twitter.com/isaki68k/status/802177405582327808
「チップチューン」として最近(?)見直されています
PSG 3和音での楽曲 ボカロとかより簡単です●1音目:メインメロディ●2音目:バッキング (副旋律)●3音目:ベース or ドラムノイズを使ったリズムとかもできますがそのへんの細かい技は慣れてから徐々に
最近は PC-6001の PSGで遊んでましたhttp://www.nicovideo.jp/watch/sm29263535 http://www.nicovideo.jp/watch/sm29939586
LUNAとPSG音源 OMRON TECHNICS Vol.29 No.1https://twitter.com/tsutsuii/status/426963345388732416
初代LUNA構成OMRON TECHNICS Vol.29 No.1 “LUNA(デスクトップWS)のハードウェア”PSG (SSG) はここにあるメインCPUMC68030 デバイスサブCPUHD647180 デバイスMC68030HD647180
LUNA内のYM2149●YAMAHA製の AY-3-8910 互換チップ
HD647180 とは 日立製 Zilog Z80 上位互換マイコン●6.144MHz クロック●タイマ、シリアル、DMA内蔵●MMU内蔵で1MBアドレスサポート●647180は ワンタイム PROM版
HD647180XP
●Z80互換サブCPU「ハードウェア設計者の趣味で〜」(元カーネル開発者という方のお話)●PSG について「当時のパソコンと同じ機能が必要、 という考えがあったのでは」(サブCPUに関係されていた方のお話)なぜLUNAにPSG音源が?
ここまでが前提知識ですhttps://twitter.com/tsutsuii/status/802351863836250112
PC-6001用 PSGドライバ移植https://twitter.com/tsutsuii/status/748250450470674432
調査・検討の結果、I/Oポート変更・周波数テーブル修正・タイマ割り込み実装 等でPC-6001用PSGドライバをLUNAの HD647180でも使用可能、という結論に詳細はOSC2016京都のスライド↓を参照https://speakerdeck.com/tsutsui/osc2016-kyoto-psg-tunes-on-netbsd-luna68k
リセット信号割り込み要求LUNA I/Oプロセッサ (XP) 構成MC68030NetBSDカーネル支配下8255PIOHD647180独立動作共有メモリ64KBアドレス71000000h〜7100FFFFhアドレス0000h〜FFFFhYM2149SSGタイマSCI
リセット信号割り込み要求XPデバイスドライバ実装(1)MC68030NetBSDカーネル支配下8255PIOHD647180独立動作共有メモリ64KBアドレス71000000h〜7100FFFFhアドレス0000h〜FFFFhYM2149SSGタイマSCI演奏プログラムPSGドライバ以下の ioctl(2) を実装・指定したZ80コードをロード・HD647180をリセット ⇒これで演奏プログラムを実行
リセット信号割り込み要求XPデバイスドライバ実装(2)MC68030NetBSDカーネル支配下8255PIOHD647180独立動作共有メモリ64KBアドレス71000000h〜7100FFFFhアドレス0000h〜FFFFhYM2149SSGタイマSCI演奏プログラムPSGドライバユーザープロセス/dev/xp 経由プロセス仮想アドレス制御コマンドPSGドライバ用曲データ共有メモリ mmap(2) を実装⇒ユーザープロセスから 曲データのダウンロード および演奏開始停止制御が 可能に
OSC京都はそんな展示デモでしたhttp://p.twipple.jp/AWyea https://twitter.com/tokudahiroshi/status/758874111418306560
ここからOSC広島の新ネタです
展示予告スライド
展示予告スライドここ
PC-6001を含むPSG搭載マシンにしゃべらせる……といういにしえの技が存在
WikipediaよりPSGによってPCMを再生する技法が存在し、PSGPCM や SSGPCM等と呼ぶ。※PCM:.wav ファイル等で使われる音楽データ形式 PSGPCMの原理PSGで発声されるのは矩形波である。これはロー(=0)とハイ(=1)の2値しかとらない。これに音量レジスタ(4bit)の値を掛けたものが1チャンネル分の出力である。AY-3-8910相当品では、あるチャンネルの発声を停止すると矩形波出力はハイ(=1)で固定される。従って、そのチャンネルの出力は、音量レジスタそのものとなる(1×音量レジスタ=音量レジスタ)。この仕様を利用し、発声を停止した状態でそのチャンネルの音量を操作することで、PSGをDACとして利用するというのが大まかな原理である。PSGによるPCM再生出典: https://ja.wikipedia.org/wiki/Programmable_Sound_Generator
音楽再生時のPSG出力スピーカーアンプ♪♪♪Picopico加算PSGチップチャンネル3Volume1〜15チャンネル1Volume1〜15音程チャンネル2Volume1〜15音程・各chで音程と音量を設定・3chの音を合成してスピーカー駆動
PCM再生時のPSG出力スピーカーアンプ加算PSGチップチャンネル3Volume1〜15チャンネル1Volume1〜15OFFVolumeチャンネル2Volume1〜15OFFVolume3chのVolume合計値=PSG電圧出力サンプリング周波数(8〜11kHz)で以下を処理することで任意PCM出力・8ビット PCMデータ読み出し・ボリューム変換テーブル読み出し・PSG 各ch へボリューム設定みくった〜♪Volume設定値=各ch出力電圧Volume設定値=各ch出力電圧
PC-6001での実装例http://sbeach.seesaa.net/article/387861465.html
PC-6001での実装例●64KB RAM の PC-6001mkII を想定 ⇒使用可能メモリは 57KB 程度●11.025kHz 8bit PCM に限定●PCMデータは テープ or RC-232C (オプション) から本体RAMに読み込み●割り込み禁止して、命令実行クロック数で 再生タイミングを制御
P6 PCM再生の問題点 再生時間・サンプリング周波数 11kHz・8bitデータ・使用可能メモリ 57KB ⇒再生可能時間は 約5秒 ロード時間・データサイズ 57KB・テープのボーレート 1200bps ⇒57KB のロード時間: 約9分30秒
MOSAIC.WAV アルバム「電気の恋人」の歌詞より「データは 皆テープにダビング 読み込むのに 速くて10分♪」http://www.nicovideo.jp/watch/sm12836594
LUNAでのPCM再生実装●プログラム・スタックを除く60KBを使用●8kHz サンプルPCMをターゲット ⇒再生可能時間は 8秒弱 再生中にもホストからロードできれば無制限?●8kHz サンプルはタイマ割り込み駆動●再生・停止はホストOSからコマンド指示●PCMデータもホストOSからロード
●ロードホストOSの共有メモリで一瞬●ストレージ ホストOSのHDDで実質無尽蔵●PSGデータ・PCMデータ Ethernet経由で何でも取得可能LUNA PSG最強説
●とりあえずのご当地ネタで列車接近メロディPSG版 + アナウンスPCM展示 PSG+PCMデモhttp://www.nicovideo.jp/watch/sm5379033
●PSG演奏は今でも感動できますついつい自分で作った曲を聞いてしまう罠●サブCPUとしてのZ80の可能性今のホスト OS構成では PSG制御は結構大変●PCM再生の先人の知恵を見習いたい●今回も「動いたわーい」でした!まとめ