Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OSC2016 Hiroshima PSG tunes on NetBSD luna68k again

OSC2016 Hiroshima PSG tunes on NetBSD luna68k again

OSC2016広島のNetBSDセミナーで発表した『NetBSD/luna68kで「PSG音源の調べ」ふたたび』のスライドです。

Izumi Tsutsui

November 27, 2016
Tweet

More Decks by Izumi Tsutsui

Other Decks in Programming

Transcript

  1. • 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
  2. PSG 3和音での楽曲  ボカロとかより簡単です • 1音目:メインメロディ • 2音目:バッキング (副旋律) •

    3音目:ベース or ドラム ノイズを使ったリズムとかもできますが そのへんの細かい技は慣れてから徐々に
  3. 初代LUNA構成 OMRON TECHNICS Vol.29 No.1 “LUNA(デスクトップWS)のハードウェア” PSG (SSG) は ここにある

    メインCPU MC68030 デバイス サブCPU HD647180 デバイス MC68030 HD647180
  4. HD647180 とは  日立製 Zilog Z80 上位互換マイコン • 6.144MHz クロック

    • タイマ、シリアル、DMA内蔵 • MMU内蔵で1MBアドレスサポート • 647180は ワンタイム PROM版
  5. リセット信号 割り込み要求 LUNA I/Oプロセッサ (XP) 構成 MC68030 NetBSD カーネル 支配下

    8255 PIO HD647180 独立動作 共有 メモリ 64KB アドレス 71000000h 〜 7100FFFFh アドレス 0000h 〜 FFFFh YM2149 SSG タイマ SCI
  6. リセット信号 割り込み要求 XPデバイスドライバ実装(1) MC68030 NetBSD カーネル 支配下 8255 PIO HD647180

    独立動作 共有 メモリ 64KB アドレス 71000000h 〜 7100FFFFh アドレス 0000h 〜 FFFFh YM2149 SSG タイマ SCI 演奏プログラム PSGドライバ 以下の ioctl(2) を実装 ・指定したZ80コードをロード ・HD647180をリセット  ⇒これで演奏プログラムを実行
  7. リセット信号 割り込み要求 XPデバイスドライバ実装(2) MC68030 NetBSD カーネル 支配下 8255 PIO HD647180

    独立動作 共有 メモリ 64KB アドレス 71000000h 〜 7100FFFFh アドレス 0000h 〜 FFFFh YM2149 SSG タイマ SCI 演奏プログラム PSGドライバ ユーザープロセス /dev/xp 経由 プロセス 仮想アドレス 制御コマンド PSGドライバ用 曲データ 共有メモリ mmap(2) を実装 ⇒ユーザープロセスから  曲データのダウンロード  および演奏開始停止制御が  可能に
  8.  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
  9. 音楽再生時のPSG出力 スピーカー アンプ ♪♪ ♪ Pico pico 加算 PSGチップ チャンネル3

    Volume 1〜15 チャンネル1 Volume 1〜15 音程 チャンネル2 Volume 1〜15 音程 ・各chで音程と音量を設定 ・3chの音を合成してスピーカー駆動
  10. PCM再生時のPSG出力 スピーカー アンプ 加算 PSGチップ チャンネル3 Volume 1〜15 チャンネル1 Volume

    1〜15 OFF Volume チャンネル2 Volume 1〜15 OFF Volume 3chのVolume合計値 =PSG電圧出力 サンプリング周波数(8〜11kHz)で 以下を処理することで任意PCM出力 ・8ビット PCMデータ読み出し ・ボリューム変換テーブル読み出し ・PSG 各ch へボリューム設定 みくった〜♪ Volume設定値 =各ch出力電圧 Volume設定値 =各ch出力電圧
  11. PC-6001での実装例 •64KB RAM の PC-6001mkII を想定  ⇒使用可能メモリは 57KB 程度 •11.025kHz

    8bit PCM に限定 •PCMデータは テープ or RC-232C (オプション)   から本体RAMに読み込み •割り込み禁止して、命令実行クロック数で  再生タイミングを制御
  12. P6 PCM再生の問題点  再生時間 ・サンプリング周波数 11kHz・8bitデータ ・使用可能メモリ 57KB  ⇒再生可能時間は 約5秒

     ロード時間 ・データサイズ 57KB ・テープのボーレート 1200bps  ⇒57KB のロード時間: 約9分30秒