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
PC-6001のPSG演奏デモを機会にNetBSDを真面目に説明してみる / OSC2024Ehime
tsutsui
0
37
PC-6001のPSG演奏デモをなるべくNetBSD環境を使って作った話 / KOF2024
tsutsui
1
40
OSC展示とLUNAとNetBSD / OSC2024Kyoto
tsutsui
1
65
digital VAX, NetBSD/vaxの歴史と VAXstation 3100/m30 展示 / OSC2024Osaka
tsutsui
0
450
SONY NEWS NetBSD移植作業とNWS-3260展示 / KOF2023
tsutsui
0
1.3k
37年前の Sun 3/60 のために最新のNetBSDと最新のX.orgをメンテする話 / KOF2022
tsutsui
1
460
お歳暮で Sun3 が送られてきたので NetBSD/sun3 を展示デモしました / OSC2020Osaka
tsutsui
5
2.8k
NetBSD/zaurus 8.1 を直したあと ブース展示デモ内容を作った話 / OSC2019Tokyo-Fall
tsutsui
0
690
NetBSD/zaurus 8.1 をテストしたら動かなかったので動くまで直した話 / KOF2019-NetBSD
tsutsui
1
1.1k
Other Decks in Programming
See All in Programming
A Journey of Contribution and Collaboration in Open Source
ivargrimstad
0
900
Remix on Hono on Cloudflare Workers
yusukebe
1
290
Duckdb-Wasmでローカルダッシュボードを作ってみた
nkforwork
0
120
詳細解説! ArrayListの仕組みと実装
yujisoftware
0
580
Outline View in SwiftUI
1024jp
1
330
みんなでプロポーザルを書いてみた
yuriko1211
0
260
どうして僕の作ったクラスが手続き型と言われなきゃいけないんですか
akikogoto
1
120
Macとオーディオ再生 2024/11/02
yusukeito
0
370
macOS でできる リアルタイム動画像処理
biacco42
9
2.4k
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
330
Creating a Free Video Ad Network on the Edge
mizoguchicoji
0
120
『ドメイン駆動設計をはじめよう』のモデリングアプローチ
masuda220
PRO
8
540
Featured
See All Featured
Speed Design
sergeychernyshev
24
610
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Being A Developer After 40
akosma
86
590k
Testing 201, or: Great Expectations
jmmastey
38
7.1k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
A better future with KSS
kneath
238
17k
The Language of Interfaces
destraynor
154
24k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
Side Projects
sachag
452
42k
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
• いろんなイベントに行ってみよう • たまには違うマシンも良いです • 過去マシン+最新開発環境=快適! • 自分で鳴らす音楽っていいですね • 「動いたわーい」が何にも勝る
楽しさの原動力でした! まとめ