Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OSC2016 Kyoto PSG tunes on NetBSD luna68k
Search
Izumi Tsutsui
July 29, 2016
Programming
0
1.3k
OSC2016 Kyoto PSG tunes on NetBSD luna68k
OSC2016京都のNetBSDセミナーで発表した『NetBSD/luna68kで「PSG音源の調べ」』のスライドです。
Izumi Tsutsui
July 29, 2016
Tweet
Share
More Decks by Izumi Tsutsui
See All by Izumi Tsutsui
NetBSDの解説と NetBSD/luna68kの歴史と ついでにPC-6001展示 / OSC2025Tokyo-spring
tsutsui
0
110
GitHub Actionsを使ってNetBSDマイナー機種用のビルドテストCIを書いてみた話 / OSC2025Osaka
tsutsui
0
91
PC-6001のPSG演奏デモを機会にNetBSDを真面目に説明してみる / OSC2024Ehime
tsutsui
0
340
PC-6001のPSG演奏デモをなるべくNetBSD環境を使って作った話 / KOF2024
tsutsui
1
460
OSC展示とLUNAとNetBSD / OSC2024Kyoto
tsutsui
1
590
digital VAX, NetBSD/vaxの歴史と VAXstation 3100/m30 展示 / OSC2024Osaka
tsutsui
0
1.3k
SONY NEWS NetBSD移植作業とNWS-3260展示 / KOF2023
tsutsui
0
1.5k
37年前の Sun 3/60 のために最新のNetBSDと最新のX.orgをメンテする話 / KOF2022
tsutsui
1
570
お歳暮で Sun3 が送られてきたので NetBSD/sun3 を展示デモしました / OSC2020Osaka
tsutsui
5
2.9k
Other Decks in Programming
See All in Programming
スタートアップの急成長を支えるプラットフォームエンジニアリングと組織戦略
sutochin26
0
290
エンジニア向け採用ピッチ資料
inusan
0
180
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
370
#QiitaBash MCPのセキュリティ
ryosukedtomita
0
610
Create a website using Spatial Web
akkeylab
0
310
Discover Metal 4
rei315
2
110
既存デザインを変更せずにタップ領域を広げる方法
tahia910
1
260
イベントストーミング図からコードへの変換手順 / Procedure for Converting Event Storming Diagrams to Code
nrslib
1
570
Modern Angular with Signals and Signal Store:New Rules for Your Architecture @enterJS Advanced Angular Day 2025
manfredsteyer
PRO
0
170
PostgreSQLのRow Level SecurityをPHPのORMで扱う Eloquent vs Doctrine #phpcon #track2
77web
2
420
0626 Findy Product Manager LT Night_高田スライド_speaker deck用
mana_takada
0
140
C++20 射影変換
faithandbrave
0
560
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
60k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Rails Girls Zürich Keynote
gr2m
94
14k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Done Done
chrislema
184
16k
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
Transcript
NetBSD/luna68kで 「PSG音源の調べ」 オープンソース カンファレンス2016京都 Z80といえばあのマシンです Izumi Tsutsui
[email protected]
発表タイトルは OpenBSD/luna88k 青山さんのOSC名古屋のスライドから 拝借しました _o_ http://www.slideshare.net/ao_kenji/osc2016-nagoya
LUNAとは よしだともこ先生のブロクより LUNAというのは、1980年代から1990年代 の初めごろにかけて、京都に本社を持つ オムロン株式会社が発売していた、 UNIXワークステーションの名前です (その当時、私はこの会社のUNIXワークス テーション開発部門で働いていました) http://notredameningen.kyo2.jp/e422862.html
LUNA@OSC京都 2011年にデビュー(?) http://movapic.com/ebijun/pic/3813540
展示→コミット も5年前 http://mail-index.netbsd.org/source-changes/2011/07/16/msg024675.html
最近のluna68kコミット http://www.nerv.org/netbsd/index2.cgi
11コミット/年 ネタ切れすいません
さて
去年はこんな発表でしたが https://speakerdeck.com/tsutsui/osc2015kyoto-netbsd-and-old-machines
20年以上前のマシンを いじっている方は NetBSD界隈に限らず 世の中にたくさん いらっしゃいます
5月の連休中に こんなイベントに行ってきました http://www.dennouyuen.com/
パワーグローブとか https://twitter.com/tsutsuii/status/726658904545873921
PC-8801mkIISRとか https://twitter.com/tsutsuii/status/726637860846096386
160x100ドットとか https://twitter.com/tsutsuii/status/726640229751226368
Acorn26マシンも https://twitter.com/tsutsuii/status/726653193589919744
✌('ω'✌)三✌('ω')✌三(✌'ω')✌ 楽しい!!!
OSCのブースで LUNAとかを見て 喜んでくれる方の 気持ちがちょっと わかりました ( ゚∀゚)
連休後半はPC88の修理をしたり https://twitter.com/tsutsuii/status/729354539531272193
PC-6001を修理したりしてたら
こんなPC-6001動画を発見 https://youtu.be/dpRihhIxznc
ちゃんとアニメしてる! PSGで音楽も鳴ってる! テープからロードしながら 画面スクロールしてる!!! おっさんには衝撃の動画でした
しばらくP6で遊んでました https://twitter.com/Hashi6001/status/737768083301900292
21世紀の8ビットPC開発環境 https://twitter.com/tsutsuii/status/731607753332920321
21世紀の8ビットPC開発環境 https://twitter.com/tsutsuii/status/741703537499897856
21世紀の8ビットPC開発環境 https://twitter.com/tsutsuii/status/746990413190303744
で、こんなのを作りました https://twitter.com/tsutsuii/status/746998884086386688
PC-6001で音楽といえば PSG音源です (27枚目にしてようやく本題)
PSG音源とは • いわゆるピコピコ音 × 3和音 • 元はアーケードゲーム用? • BASICだと PLAY
文で MMLという書式で書いて演奏 こんなの→ "C8<D+D+8G8F8G8D+>D+DD+F"
• 「アプリを実行しながら鳴らす」 →標準のBASICだと結構大変ですが • 割り込みを使うドライバがあります BGMとして鳴らすには http://park10.wakwak.com/~yosh/p6.html
• なぜかWindows用のMMLコンパイラが あったりします BGMデータを作るには http://www.tiny-yarou.com/deepp6.html
なぜか手厚いサポート https://twitter.com/tiny_yarou/status/746785754722926593
元ネタの方に見られたり https://twitter.com/jot6001/status/747404020453507073
こんな感じのP6月間でした https://twitter.com/tsutsuii/status/745584274837889024
と、PC-6001で 遊んでいるうちに OSC京都本番の 7月に入って しまったのですが
OSC沖縄直前のとある日 https://twitter.com/tsutsuii/status/748123873997107200
かつての証言 その1 OSC2011京都 ブース来場者の方 「ハード設計者がZ80を大好きで、 周辺回路制御にZ80が載ることに なったんですが、ソフトを作る側 としてはすごくたいへんでした」
かつての証言 その2 とあるZ80のツイート https://twitter.com/ebijun/status/92406581764956160
かつてのとある資料 OMRON TECHNICS Vol.29 No.1 https://twitter.com/tsutsuii/status/426963345388732416
http://www.slideshare.net/ao_kenji/osc2016-nagoya 最近の証言
というわけで 改めて調査
初代LUNA OMRON TECHNICS Vol.29 No.1 “LUNA(デスクトップWS)のハードウェア”
初代LUNA OMRON TECHNICS Vol.29 No.1 “LUNA(デスクトップWS)のハードウェア” 確かにある
LUNA-II OMRON TECHNICS Vol.31 No.2 “68040を搭載したワークステーションLUNA-IIのハードウェア” 無いっぽい
LUNA-88K2 OMRON TECHNICS Vol.32 “マルチRISCワークステーションLUNA-88K2” やっぱり無い?
某マニュアル 消されてますが ソフト的には ほぼPSG互換です (MSXにも載ってる)
HD647180 とは https://twitter.com/ebijun/status/426961951877394432
HD647180 とは 日立製 Zilog Z80 上位互換マイコン • 6.144MHz クロック
• タイマ、シリアル、DMA内蔵 • MMU内蔵で1MBアドレスサポート • 647180は ワンタイム PROM版
LUNAチェック
YM2149
HD647180XP
リセット信号 割り込み要求 I/Oプロセッサ構成 MC68030 8255 PIO HD647180 共有 メモリ 64KB
アドレス 71000000h 〜 7100FFFFh アドレス 0000h 〜 FFFFh YM2149 SSG タイマ SCI
某マニュアル記載 「XP起動方法」 • 68030から8255経由でリセット信号駆動 • リセット中に、共有メモリへ 647180用 プログラムを書き込み • 書き込みが終わったらリセットを解除
→とりあえずなんとかなりそう? 本体起動直後は8255のリセット信号は解除状態らしい のですが、そのときはどう動いてるのでしょう……
PC-6001 PSGドライバ検討 https://twitter.com/tsutsuii/status/748250450470674432
2msタイマ • PC-6001 では 2.051ms周期割り込み使用 • 演奏開始でフック、演奏停止で戻してる • HD647180には内蔵タイマあり
⇒自前でタイマ割り込みを書けばいける? PSGドライバ機種依存部①
I/Oポート マニュアルに記載あり • $82: データリード, アドレスライト • $83: データライト
……と安心してたら実は$82と$83が逆ということが後で判明(´・ω・`) PSGドライバ機種依存部②
PSGクロック • PC-6001 は 2MHz が入っているらしい • LUNAの YM2149
は 1.536MHz 入力 クロックが異なると音程データもズレるので、 適当にデータを変換してやる必要がある? PSGドライバ機種依存部③
再び天の声 https://twitter.com/tiny_yarou/status/748261462016040960
ファームウェアがありません PSGドライバの次はCPU自体が問題 • パソコンだったらROMが初期化してくれる • LUNAのHD647180にはROMが無い ⇒割り込みとか CPU自身とか、 全部自前で初期化が必要…
HD647180依存部
いきなり書いても 動く自信が無いので 純正のUniOSが どうしているのか 調べてみる
None
心眼grep バイナリダンプでZ80っぽい命令を探索 • C3 とか CD とか C9 とか無いか見てみる
⇒どうもカーネル内には Z80バイナリは無いっぽい? カーネル調査①
XP grep "xp” が名前に含まれる関数を探索 • open/close/ioctl のドライバはある感じ • read/write
は無い? • ioctl が copyin(9) してて 8255のリセットも叩いているっぽい? カーネル調査②
野生の勘grep • カーネルコンフィグ関連ソースには ioctl っぽい定義はあるが中身は記載無し • /dev/xp を触ってるものをバイナリ探索 ⇒
/etc/rc にこんなのが! echo -n 'XP firmware down load' /etc/dnl /etc/BOOT /etc/MAIN • ハンド逆アセンブルでなんとなく把握 ユーザーランド調査
わりと地味作業 • 各種システムレジスタ初期化 • MMU設定、割り込み設定 I/O命令がHD647180独自拡張命令で ZASMで直接書けなくてちょっと面倒…… 初期化処理実装
一応設計書書きました • 2msタイマ割り込み • 割り込みハンドラ登録/解除 • ホストからの再生/停止/フェードコマンド • ホストへのコマンド実行状態の通知
• ループ再生回数の通知 • PSGドライバ本体はほぼ変更なし PSGドライバ実装
デバッグ①
デバッグ②
None
ブートローダー=タイニーカーネル • ブートローダーにZ80コードを組み込み • 専用コマンド追加してダウンロードと リセット発行 • ついでにPSG演奏停止コマンドも実装 •
NFSでサーバー上の曲データも読めるよ! • 音楽鳴らしながらカーネルロードとか ブートローダー万能説
だいぶつかれてきてます…… • 適当に probe / attach を実装 • open
と close は適当にコピペ • ioctl でバイナリを渡してリセット発行 • mmap も用意して共有メモリ上書きも カーネルとアプリと同時に書いて 同時にデバッグしなきゃいけない。 めんどい。 次はカーネルとアプリ実装
“I’m not a programmer”
イベント駆動学習
ようやくデモ完成 https://twitter.com/tsutsuii/status/757044103276134400
• いろんなイベントに行ってみよう • たまには違うマシンも良いです • 過去マシン+最新開発環境=快適! • 自分で鳴らす音楽っていいですね • 「動いたわーい」が何にも勝る
楽しさの原動力でした! まとめ