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.2k
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
57
GitHub Actionsを使ってNetBSDマイナー機種用のビルドテストCIを書いてみた話 / OSC2025Osaka
tsutsui
0
53
PC-6001のPSG演奏デモを機会にNetBSDを真面目に説明してみる / OSC2024Ehime
tsutsui
0
240
PC-6001のPSG演奏デモをなるべくNetBSD環境を使って作った話 / KOF2024
tsutsui
1
370
OSC展示とLUNAとNetBSD / OSC2024Kyoto
tsutsui
1
520
digital VAX, NetBSD/vaxの歴史と VAXstation 3100/m30 展示 / OSC2024Osaka
tsutsui
0
1.1k
SONY NEWS NetBSD移植作業とNWS-3260展示 / KOF2023
tsutsui
0
1.4k
37年前の Sun 3/60 のために最新のNetBSDと最新のX.orgをメンテする話 / KOF2022
tsutsui
1
520
お歳暮で Sun3 が送られてきたので NetBSD/sun3 を展示デモしました / OSC2020Osaka
tsutsui
5
2.8k
Other Decks in Programming
See All in Programming
CloudNativePGを布教したい
nnaka2992
0
110
自力でTTSモデルを作った話
zgock999
0
100
2025.2.14_Developers Summit 2025_登壇資料
0101unite
0
200
たのしいSocketのしくみ / Socket Under a Microscope
coe401_
8
1.3k
Jasprが凄い話
hyshu
0
160
Jakarta EE meets AI
ivargrimstad
0
380
Honoとフロントエンドの 型安全性について
yodaka
7
1.5k
DRFを少しずつ オニオンアーキテクチャに寄せていく DjangoCongress JP 2025
nealle
2
270
Honoをフロントエンドで使う 3つのやり方
yusukebe
7
3.5k
kintone開発を効率化するためにチームで試した施策とその結果を大放出!
oguemon
0
160
Datadog DBMでなにができる? JDDUG Meetup#7
nealle
0
150
15分で学ぶDuckDBの可愛い使い方 DuckDBの最近の更新
notrogue
3
520
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1368
200k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Making Projects Easy
brettharned
116
6k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
640
How to Think Like a Performance Engineer
csswizardry
22
1.4k
Mobile First: as difficult as doing things right
swwweet
223
9.4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.2k
The Cult of Friendly URLs
andyhume
78
6.2k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
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
• いろんなイベントに行ってみよう • たまには違うマシンも良いです • 過去マシン+最新開発環境=快適! • 自分で鳴らす音楽っていいですね • 「動いたわーい」が何にも勝る
楽しさの原動力でした! まとめ