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
LUNA x PC-6001 Dual PSG Demo / OSC2017Kyoto
Search
Izumi Tsutsui
August 04, 2017
Programming
0
910
LUNA x PC-6001 Dual PSG Demo / OSC2017Kyoto
OSC2017 京都の NetBSDセミナーで発表した『LUNA × PC-6001 Dual PSG デモができるまで』のスライドです。
Izumi Tsutsui
August 04, 2017
Tweet
Share
More Decks by Izumi Tsutsui
See All by Izumi Tsutsui
PC-6001のPSG演奏デモを機会にNetBSDを真面目に説明してみる / OSC2024Ehime
tsutsui
0
200
PC-6001のPSG演奏デモをなるべくNetBSD環境を使って作った話 / KOF2024
tsutsui
1
330
OSC展示とLUNAとNetBSD / OSC2024Kyoto
tsutsui
1
480
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
500
お歳暮で Sun3 が送られてきたので NetBSD/sun3 を展示デモしました / OSC2020Osaka
tsutsui
5
2.8k
NetBSD/zaurus 8.1 を直したあと ブース展示デモ内容を作った話 / OSC2019Tokyo-Fall
tsutsui
0
710
NetBSD/zaurus 8.1 をテストしたら動かなかったので動くまで直した話 / KOF2019-NetBSD
tsutsui
1
1.2k
Other Decks in Programming
See All in Programming
Findy Team+ Awardを受賞したかった!ベストプラクティス応募内容をふりかえり、開発生産性向上もふりかえる / Findy Team Plus Award BestPractice and DPE Retrospective 2024
honyanya
0
140
PHPで作るWebSocketサーバー ~リアクティブなアプリケーションを知るために~ / WebSocket Server in PHP - To know reactive applications
seike460
PRO
2
770
Flatt Security XSS Challenge 解答・解説
flatt_security
0
710
선언형 UI에서의 상태관리
l2hyunwoo
0
270
PHPカンファレンス 2024|共創を加速するための若手の技術挑戦
weddingpark
0
130
非ブラウザランタイムとWeb標準 / Non-Browser Runtimes and Web Standards
petamoriken
0
430
AWSのLambdaで PHPを動かす選択肢
rinchoku
2
390
テストコードのガイドライン 〜作成から運用まで〜
riku929hr
7
1.4k
Androidアプリのモジュール分割における:x:commonを考える
okuzawats
1
270
『改訂新版 良いコード/悪いコードで学ぶ設計入門』活用方法−爆速でスキルアップする!効果的な学習アプローチ / effective-learning-of-good-code
minodriven
28
3.9k
ESLintプラグインを使用してCDKのセオリーを適用する
yamanashi_ren01
2
220
PHPとAPI Platformで作る本格的なWeb APIアプリケーション(入門編) / phpcon 2024 Intro to API Platform
ttskch
0
380
Featured
See All Featured
Building Adaptive Systems
keathley
38
2.4k
Automating Front-end Workflow
addyosmani
1366
200k
Embracing the Ebb and Flow
colly
84
4.5k
Raft: Consensus for Rubyists
vanstee
137
6.7k
How to train your dragon (web standard)
notwaldorf
89
5.8k
Typedesign – Prime Four
hannesfritz
40
2.5k
Code Review Best Practice
trishagee
65
17k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.4k
YesSQL, Process and Tooling at Scale
rocio
170
14k
jQuery: Nuts, Bolts and Bling
dougneiner
62
7.6k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Transcript
LUNA × PC-6001 Dual PSG デモ ができるまで オープンソース カンファレンス2017京都 LUNAとPC-6001
展示ふたたび Izumi Tsutsui
[email protected]
Twitter: @tsutsuii
LUNAとは よしだともこ先生のブロクより LUNAというのは、1980年代から1990年代 の初めごろにかけて、京都に本社を持つ オムロン株式会社が発売していた、 UNIXワークステーションの名前です (その当時、私はこの会社のUNIXワークス テーション開発部門で働いていました) http://notredameningen.kyo2.jp/e422862.html
OSC京都といえば LUNA というわけでもないのですが
LUNA@OSC京都 2011年 NetBSD/luna68k 復活展示 http://movapic.com/ebijun/pic/3813540
LUNA@OSC京都 2012年 LUNA × LUNA-II コラボ展示 https://twitter.com/tsutsuii/status/232152205275324417
LUNA@OSC京都 2013年 mlterm で Twitter https://twitter.com/tsutsuii/status/363490195179442176
LUNA@OSC京都 2014年 「今年はカラーだ!!!」 https://twitter.com/tsutsuii/status/363490195179442176
LUNA@OSC京都 2015年 LUNA-II × LUNA-88K2 https://twitter.com/tsutsuii/status/629857897581666304
LUNA@OSC京都 2016年 LUNA で PSG演奏 https://twitter.com/ebijun/status/758858671329726464
突然の PC-6001
「わけがわからないよ」 と言われてました LUNAは、ご当地京都市に本社のある オムロンさんが平成の初めのころに 販売していたワークステーションです。 メインCPUのMC68030に加えて I/O用の サブプロセッサとしてZ80互換CPUを持ち、 80年代に人気を博した NECのパソコン
PC-6001と同じPSG音源も載せています。 その Z80とPSG音源に着目して、 PC-6001用のPSG音源ドライバとNetBSD を使ってLUNAに音楽を演奏させてみよう、 というデモンストレーション展示です。
PC-6001 とは • NEC製の 8ビットパソコン •1981年 11月 発売
PC-6001 スペック •CPU: 8bit Z80互換 4MHz •RAM: 標準 16KB, 最大32KB
•グラフィック: 128×192ドット 4色 256×192ドット モノクロ2色 •音源:PSG 3和音 •標準価格:89,800円
• いわゆるピコピコ音 × 3和音 • 元はアーケードゲーム用 • イメージとしてはファミコンの 音が近いです (※ファミコンの音源とPSGとは微妙に違います)
PSG音源とは
• NEC PC-6001/mkII • SHARP X1シリーズ • 富士通 FM-7/FM-77シリーズ •
MSX • SHARP MZ-5500 だいたい ’80年代前半のマシン。 85年以降は FM音源チップ搭載機が主流に PSG音源を搭載したマシン 出典: https://ja.wikipedia.org/wiki/Programmable_Sound_Generator
PC-6001内のPSG音源IC
MOSAIC.WAV アルバム 「電気の恋人」の歌詞より 「PSGでやっと3和音 それでも感動してた あの頃〜♪」 https://www.amazon.co.jp/dp/B00569BHDY
去年は PC-6001の PSGで遊んでました http://www.nicovideo.jp/watch/sm29263535 http://www.nicovideo.jp/watch/sm29939586
LUNAとPSG音源 OMRON TECHNICS Vol.29 No.1 https://twitter.com/tsutsuii/status/426963345388732416
初代LUNA構成 OMRON TECHNICS Vol.29 No.1 “LUNA(デスクトップWS)のハードウェア” PSG (SSG) は ここにある
メインCPU MC68030 デバイス サブCPU HD647180 デバイス MC68030 HD647180
LUNA内のYM2149 • YAMAHA製の AY-3-8910 互換チップ
HD647180 とは 日立製 Zilog Z80 上位互換マイコン • 6.144MHz クロック
• タイマ、シリアル、DMA内蔵 • MMU内蔵で1MBアドレスサポート • 647180は ワンタイム PROM版
HD647180XP
• Z80互換サブCPU 「ハードウェア設計者の趣味で〜」 (元カーネル開発者という方のお話) • PSG について 「当時のパソコンと同じ機能が必要、 という考えがあったのでは」 (サブCPUに関係されていた方のお話)
なぜLUNAにPSG音源が?
ここまでが前提知識です https://twitter.com/tsutsuii/status/802351863836250112
LUNAのサブCPUはZ80互換 ↓ PC-6001用のPSGドライバを 移植するとLUNAでも動く というのが2016年の展示でした https://speakerdeck.com/tsutsui/osc2016-kyoto-psg-tunes-on-netbsd-luna68k
リセット信号 割り込み要求 LUNA I/Oプロセッサ (XP) 構成 MC68030 NetBSD カーネル 支配下
8255 PIO HD647180 独立動作 共有 メモリ 64KB アドレス 71000000h 〜 7100FFFFh アドレス 0000h 〜 FFFFh YM2149 SSG タイマ SCI
リセット信号 割り込み要求 XPデバイスドライバ実装(1) MC68030 NetBSD カーネル 支配下 8255 PIO HD647180
独立動作 共有 メモリ 64KB アドレス 71000000h 〜 7100FFFFh アドレス 0000h 〜 FFFFh YM2149 SSG タイマ SCI 演奏プログラム PSGドライバ 以下の ioctl(2) を実装 ・指定したZ80コードをロード ・HD647180をリセット ⇒これで演奏プログラムを実行
リセット信号 割り込み要求 XPデバイスドライバ実装(2) MC68030 NetBSD カーネル 支配下 8255 PIO HD647180
独立動作 共有 メモリ 64KB アドレス 71000000h 〜 7100FFFFh アドレス 0000h 〜 FFFFh YM2149 SSG タイマ SCI 演奏プログラム PSGドライバ ユーザープロセス /dev/xp 経由 プロセス 仮想アドレス 制御コマンド PSGドライバ用 曲データ 共有メモリ mmap(2) を実装 ⇒ユーザープロセスから 曲データのダウンロード および演奏開始停止制御が 可能に
ここまでが LUNAのPSGの 復習です
OSC展示と PC-6001
LUNA@OSC大阪 PC-6001VXエミュレータとともに展示 https://twitter.com/ebijun/status/825194007101739008
NetBSD 関係なくない? …と言われつつ結構好評でした
OSC大阪 終了後
https://twitter.com/tsutsuii/status/825797202165391360
https://twitter.com/a_kanda/status/825838696586891264
https://twitter.com/tsutsuii/status/826069353862881280
1月時点で 今年のOSC京都での LUNA+PC-6001展示 が 確定 ( ゚д゚)
PC-6001を展示するなら NetBSD か LUNA と 関係あるネタを 用意しなければ……
というわけで安直に 「PSG 3和音×2台の 6重和音演奏」 というネタに決めました
事前準備 データレコーダー修理 https://twitter.com/tsutsuii/status/881492528742113280
LUNAとPC-6001の PSG演奏の同期方法 を考えてみる
案① 「せーの」で 2台同時に再生開始 ……というのは展示中にズレていくので却下
案② 何かの信号線を 2台の間につなぐ ……とりあえず適当に案を出してみる
LUNA側 サブCPUのシリアルが出ているのでそこに
PC-6001側 シリアルはオプションなので ジョイスティックポートを使う http://p6ers.net/mm/pc-6001/dev/joy2rs232c/
ジョイスティックコネクタ https://twitter.com/tsutsuii/status/886830810187169797
RS232C レベル変換
PSGドライバは 2ms割り込みを使用 ↓ とりあえず 割り込みルーチンで ジョイスティック信号を出力 信号同期方法①
割り込み信号出力 https://twitter.com/tsutsuii/status/891154285852934145
LUNA側の入力はどうするか ↓ これでPSGドライバを直接駆動 信号同期方法② https://twitter.com/tsutsuii/status/886830810187169797
LUNAシリアルのハマり https://twitter.com/tsutsuii/status/887009303340527616
PSGドライバ改造 https://twitter.com/tsutsuii/status/890920242213339140
曲データ作成 https://twitter.com/tsutsuii/status/890895742092562432
曲を耳コピしてMML化 ↓ 3分の曲データ作成に 10時間くらい 2016年展示の曲データ
ぐぐってみると MIDIデータを MML化するツール というものが存在 今年の曲データ
https://twitter.com/tsutsuii/status/874969805714935809
マビノギの 中の人は おっさん説
「東方ピアノEasyモード」 のデータをお借りしました 曲データMIDI http://easypianoscore.jp/
MML調整
None
PC-6001画像表示作成
LUNA側も画像ローダ作成 https://twitter.com/tsutsuii/status/892431116593803264
PC-6001用 テープ準備 https://twitter.com/tsutsuii/status/892795557604843520
というわけで完成 8/4 1:24AM でした…… https://twitter.com/tsutsuii/status/893145536487841793
•サブCPUは共有メモリで制御 •PSG 6重和音演奏は結構楽しい •2台を接続するとこれも楽しい •締め切り駆動すればなんとかなる •いつも通り 「動いたわーい」でした! まとめ