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.1k
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
OSC展示とLUNAとNetBSD / OSC2024Kyoto
tsutsui
1
41
digital VAX, NetBSD/vaxの歴史と VAXstation 3100/m30 展示 / OSC2024Osaka
tsutsui
0
400
SONY NEWS NetBSD移植作業とNWS-3260展示 / KOF2023
tsutsui
0
1.2k
37年前の Sun 3/60 のために最新のNetBSDと最新のX.orgをメンテする話 / KOF2022
tsutsui
1
430
お歳暮で Sun3 が送られてきたので NetBSD/sun3 を展示デモしました / OSC2020Osaka
tsutsui
5
2.7k
NetBSD/zaurus 8.1 を直したあと ブース展示デモ内容を作った話 / OSC2019Tokyo-Fall
tsutsui
0
650
NetBSD/zaurus 8.1 をテストしたら動かなかったので動くまで直した話 / KOF2019-NetBSD
tsutsui
1
1.1k
OSC京都 LUNA展示 9年目 / OSC2019Kyoto
tsutsui
0
600
NetBSDておくれLive Image UEFI対応 設計仕様検討メモ / NetBSD UEFI Live Image
tsutsui
0
420
Other Decks in Programming
See All in Programming
From Spring Boot 2 to Spring Boot 3 with Java 22 and Jakarta EE
ivargrimstad
0
990
Hono・Prisma・AWSでGeoなAPI開発
nokonoko1203
5
610
Ruby Parser progress report 2024
yui_knk
2
180
LangChainの現在とv0.3にむけて
os1ma
3
660
Amazon Neptuneで始める初めてのグラフDB ー グラフDBを使う意味を考える ー
satoshi256kbyte
2
110
実践 Advanced CallKit 〜快適な通話の実現に向けて〜
mot_techtalk
3
110
僕が思い描くTypeScriptの未来を勝手に先取りする
yukukotani
5
990
Ebitengineの1vs1ゲーム WebRTCの活用
ponyo877
0
340
最高の構文木の設計 2024年版
yui_knk
7
2.4k
フロントエンドのテストからアクセシビリティをしれっと広めていく
nano72mkn
3
700
iOSDC 2024
auramagi
3
590
TypeScriptで 負荷テストを書こう 〜k6のシングルバイナリの秘密〜
dora1998
7
2.8k
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
28
1.4k
Code Reviewing Like a Champion
maltzj
518
39k
Adopting Sorbet at Scale
ufuk
72
8.9k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
42
2k
It's Worth the Effort
3n
182
27k
Making Projects Easy
brettharned
113
5.8k
The World Runs on Bad Software
bkeepers
PRO
64
11k
Imperfection Machines: The Place of Print at Facebook
scottboms
263
13k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
354
29k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
26
1.9k
What the flash - Photography Introduction
edds
67
11k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
38
9.1k
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
• いろんなイベントに行ってみよう • たまには違うマシンも良いです • 過去マシン+最新開発環境=快適! • 自分で鳴らす音楽っていいですね • 「動いたわーい」が何にも勝る
楽しさの原動力でした! まとめ