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音源の調べ」』のスライドです。

7fe50ce1ac047336d7804e47aec56391?s=128

Izumi Tsutsui

July 29, 2016
Tweet

Transcript

  1. NetBSD/luna68kで 「PSG音源の調べ」 オープンソース カンファレンス2016京都 Z80といえばあのマシンです Izumi Tsutsui tsutsui@NetBSD.org

  2. 発表タイトルは OpenBSD/luna88k 青山さんのOSC名古屋のスライドから 拝借しました _o_ http://www.slideshare.net/ao_kenji/osc2016-nagoya

  3. LUNAとは  よしだともこ先生のブロクより LUNAというのは、1980年代から1990年代 の初めごろにかけて、京都に本社を持つ オムロン株式会社が発売していた、 UNIXワークステーションの名前です (その当時、私はこの会社のUNIXワークス  テーション開発部門で働いていました) http://notredameningen.kyo2.jp/e422862.html

  4. LUNA@OSC京都  2011年にデビュー(?) http://movapic.com/ebijun/pic/3813540

  5. 展示→コミット も5年前 http://mail-index.netbsd.org/source-changes/2011/07/16/msg024675.html

  6. 最近のluna68kコミット http://www.nerv.org/netbsd/index2.cgi

  7. 11コミット/年 ネタ切れすいません

  8. さて

  9. 去年はこんな発表でしたが https://speakerdeck.com/tsutsui/osc2015kyoto-netbsd-and-old-machines

  10. 20年以上前のマシンを いじっている方は NetBSD界隈に限らず 世の中にたくさん いらっしゃいます

  11. 5月の連休中に こんなイベントに行ってきました http://www.dennouyuen.com/

  12. パワーグローブとか https://twitter.com/tsutsuii/status/726658904545873921

  13. PC-8801mkIISRとか https://twitter.com/tsutsuii/status/726637860846096386

  14. 160x100ドットとか https://twitter.com/tsutsuii/status/726640229751226368

  15. Acorn26マシンも https://twitter.com/tsutsuii/status/726653193589919744

  16. ✌('ω'✌)三✌('ω')✌三(✌'ω')✌ 楽しい!!!

  17. OSCのブースで LUNAとかを見て 喜んでくれる方の 気持ちがちょっと わかりました ( ゚∀゚)

  18. 連休後半はPC88の修理をしたり https://twitter.com/tsutsuii/status/729354539531272193

  19. PC-6001を修理したりしてたら

  20. こんなPC-6001動画を発見 https://youtu.be/dpRihhIxznc

  21. ちゃんとアニメしてる! PSGで音楽も鳴ってる! テープからロードしながら 画面スクロールしてる!!! おっさんには衝撃の動画でした

  22. しばらくP6で遊んでました https://twitter.com/Hashi6001/status/737768083301900292

  23. 21世紀の8ビットPC開発環境 https://twitter.com/tsutsuii/status/731607753332920321

  24. 21世紀の8ビットPC開発環境 https://twitter.com/tsutsuii/status/741703537499897856

  25. 21世紀の8ビットPC開発環境 https://twitter.com/tsutsuii/status/746990413190303744

  26. で、こんなのを作りました https://twitter.com/tsutsuii/status/746998884086386688

  27. PC-6001で音楽といえば PSG音源です (27枚目にしてようやく本題)

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

    文で MMLという書式で書いて演奏 こんなの→ "C8<D+D+8G8F8G8D+>D+DD+F"
  29. • 「アプリを実行しながら鳴らす」  →標準のBASICだと結構大変ですが • 割り込みを使うドライバがあります BGMとして鳴らすには http://park10.wakwak.com/~yosh/p6.html

  30. • なぜかWindows用のMMLコンパイラが あったりします BGMデータを作るには http://www.tiny-yarou.com/deepp6.html

  31. なぜか手厚いサポート https://twitter.com/tiny_yarou/status/746785754722926593

  32. 元ネタの方に見られたり https://twitter.com/jot6001/status/747404020453507073

  33. こんな感じのP6月間でした https://twitter.com/tsutsuii/status/745584274837889024

  34. と、PC-6001で 遊んでいるうちに OSC京都本番の 7月に入って しまったのですが

  35. OSC沖縄直前のとある日 https://twitter.com/tsutsuii/status/748123873997107200

  36. かつての証言 その1  OSC2011京都 ブース来場者の方 「ハード設計者がZ80を大好きで、  周辺回路制御にZ80が載ることに  なったんですが、ソフトを作る側  としてはすごくたいへんでした」

  37. かつての証言 その2  とあるZ80のツイート https://twitter.com/ebijun/status/92406581764956160

  38. かつてのとある資料  OMRON TECHNICS Vol.29 No.1 https://twitter.com/tsutsuii/status/426963345388732416

  39. http://www.slideshare.net/ao_kenji/osc2016-nagoya 最近の証言

  40. というわけで 改めて調査

  41. 初代LUNA OMRON TECHNICS Vol.29 No.1 “LUNA(デスクトップWS)のハードウェア”

  42. 初代LUNA OMRON TECHNICS Vol.29 No.1 “LUNA(デスクトップWS)のハードウェア” 確かにある

  43. LUNA-II OMRON TECHNICS Vol.31 No.2 “68040を搭載したワークステーションLUNA-IIのハードウェア” 無いっぽい

  44. LUNA-88K2 OMRON TECHNICS Vol.32 “マルチRISCワークステーションLUNA-88K2” やっぱり無い?

  45. 某マニュアル 消されてますが ソフト的には ほぼPSG互換です (MSXにも載ってる)

  46. HD647180 とは https://twitter.com/ebijun/status/426961951877394432

  47. HD647180 とは  日立製 Zilog Z80 上位互換マイコン • 6.144MHz クロック

    • タイマ、シリアル、DMA内蔵 • MMU内蔵で1MBアドレスサポート • 647180は ワンタイム PROM版
  48. LUNAチェック

  49. YM2149

  50. HD647180XP

  51. リセット信号 割り込み要求 I/Oプロセッサ構成 MC68030 8255 PIO HD647180 共有 メモリ 64KB

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

    →とりあえずなんとかなりそう? 本体起動直後は8255のリセット信号は解除状態らしい のですが、そのときはどう動いてるのでしょう……
  53. PC-6001 PSGドライバ検討 https://twitter.com/tsutsuii/status/748250450470674432

  54.  2msタイマ • PC-6001 では 2.051ms周期割り込み使用 • 演奏開始でフック、演奏停止で戻してる • HD647180には内蔵タイマあり

    ⇒自前でタイマ割り込みを書けばいける? PSGドライバ機種依存部①
  55.  I/Oポート マニュアルに記載あり • $82: データリード, アドレスライト • $83: データライト

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

    は 1.536MHz 入力 クロックが異なると音程データもズレるので、 適当にデータを変換してやる必要がある? PSGドライバ機種依存部③
  57. 再び天の声 https://twitter.com/tiny_yarou/status/748261462016040960

  58.  ファームウェアがありません PSGドライバの次はCPU自体が問題 • パソコンだったらROMが初期化してくれる • LUNAのHD647180にはROMが無い ⇒割り込みとか CPU自身とか、 全部自前で初期化が必要…

    HD647180依存部
  59. いきなり書いても 動く自信が無いので 純正のUniOSが どうしているのか 調べてみる

  60. None
  61.  心眼grep バイナリダンプでZ80っぽい命令を探索 • C3 とか CD とか C9 とか無いか見てみる

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

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

    /etc/rc にこんなのが! echo -n 'XP firmware down load' /etc/dnl /etc/BOOT /etc/MAIN • ハンド逆アセンブルでなんとなく把握 ユーザーランド調査
  64.  わりと地味作業 • 各種システムレジスタ初期化 • MMU設定、割り込み設定 I/O命令がHD647180独自拡張命令で ZASMで直接書けなくてちょっと面倒…… 初期化処理実装

  65.  一応設計書書きました • 2msタイマ割り込み • 割り込みハンドラ登録/解除 • ホストからの再生/停止/フェードコマンド • ホストへのコマンド実行状態の通知

    • ループ再生回数の通知 • PSGドライバ本体はほぼ変更なし PSGドライバ実装
  66. デバッグ①

  67. デバッグ②

  68. None
  69.  ブートローダー=タイニーカーネル • ブートローダーにZ80コードを組み込み • 専用コマンド追加してダウンロードと リセット発行 • ついでにPSG演奏停止コマンドも実装 •

    NFSでサーバー上の曲データも読めるよ! • 音楽鳴らしながらカーネルロードとか ブートローダー万能説
  70.  だいぶつかれてきてます…… • 適当に probe / attach を実装 • open

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

  72. イベント駆動学習

  73. ようやくデモ完成 https://twitter.com/tsutsuii/status/757044103276134400

  74. • いろんなイベントに行ってみよう • たまには違うマシンも良いです • 過去マシン+最新開発環境=快適! • 自分で鳴らす音楽っていいですね • 「動いたわーい」が何にも勝る

    楽しさの原動力でした! まとめ