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

OSC2016 Kyoto PSG tunes on NetBSD luna68k

OSC2016 Kyoto PSG tunes on NetBSD luna68k

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

Izumi Tsutsui

July 29, 2016
Tweet

More Decks by Izumi Tsutsui

Other Decks in Programming

Transcript

  1. PSG音源とは • いわゆるピコピコ音 × 3和音 • 元はアーケードゲーム用? • BASICだと PLAY

    文で MMLという書式で書いて演奏 こんなの→ "C8<D+D+8G8F8G8D+>D+DD+F"
  2. HD647180 とは  日立製 Zilog Z80 上位互換マイコン • 6.144MHz クロック

    • タイマ、シリアル、DMA内蔵 • MMU内蔵で1MBアドレスサポート • 647180は ワンタイム PROM版
  3. リセット信号 割り込み要求 I/Oプロセッサ構成 MC68030 8255 PIO HD647180 共有 メモリ 64KB

    アドレス 71000000h 〜 7100FFFFh アドレス 0000h 〜 FFFFh YM2149 SSG タイマ SCI
  4. 某マニュアル記載 「XP起動方法」 • 68030から8255経由でリセット信号駆動 • リセット中に、共有メモリへ 647180用 プログラムを書き込み • 書き込みが終わったらリセットを解除

    →とりあえずなんとかなりそう? 本体起動直後は8255のリセット信号は解除状態らしい のですが、そのときはどう動いてるのでしょう……
  5.  I/Oポート マニュアルに記載あり • $82: データリード, アドレスライト • $83: データライト

    ……と安心してたら実は$82と$83が逆ということが後で判明(´・ω・`) PSGドライバ機種依存部②
  6.  PSGクロック • PC-6001 は 2MHz が入っているらしい • LUNAの YM2149

    は 1.536MHz 入力 クロックが異なると音程データもズレるので、 適当にデータを変換してやる必要がある? PSGドライバ機種依存部③
  7.  心眼grep バイナリダンプでZ80っぽい命令を探索 • C3 とか CD とか C9 とか無いか見てみる

    ⇒どうもカーネル内には  Z80バイナリは無いっぽい? カーネル調査①
  8.  XP grep "xp” が名前に含まれる関数を探索 • open/close/ioctl のドライバはある感じ • read/write

    は無い? • ioctl が copyin(9) してて 8255のリセットも叩いているっぽい? カーネル調査②
  9.  野生の勘grep • カーネルコンフィグ関連ソースには ioctl っぽい定義はあるが中身は記載無し • /dev/xp を触ってるものをバイナリ探索 ⇒

    /etc/rc にこんなのが! echo -n 'XP firmware down load' /etc/dnl /etc/BOOT /etc/MAIN • ハンド逆アセンブルでなんとなく把握 ユーザーランド調査
  10.  だいぶつかれてきてます…… • 適当に probe / attach を実装 • open

    と close は適当にコピペ • ioctl でバイナリを渡してリセット発行 • mmap も用意して共有メモリ上書きも カーネルとアプリと同時に書いて 同時にデバッグしなきゃいけない。 めんどい。 次はカーネルとアプリ実装