UNIX紛争史

 UNIXというOSは、なんだかんだいって随分長い間現役で使われ続けている。現在UNIX系OSとしてはLinuxが主流だが、これは正確にはUNIX風に一から作られたOSであって、UNIXではないのだが、ここではUNIXの歴史に混ぜておく。

 そもそもUNIXが登場したきっかけは、1964年頃のMulticsというOSの開発プロジェクトだ。MITを中心に、AT&Tベル研究所とGEが参加して、メインフレーム用の高機能なOSを開発していた。このプロジェクトから、AT&Tは撤退する。ベル研究所所属の、ケン・トンプソンやデニス・リッチーらは、複雑で大規模になったMulticsの反省から、シンプルで使いやすいOSの開発に取り掛かる。社内に放置されていたミニコンピューターのPDP-7上で初期のOS開発が行われ、やがて使いやすいと評判になって他のマシンでも動かせないかと相談される。ここで機種ごとに異なるマシン語を使うことをやめ、マシン語に近い低レベルの記述もできて、かつ当時先端の構造化言語の特徴を備えたC言語デニス・リッチーが開発する。Multicsに対抗してUNIXと名付けられたこのOSは、C言語によって様々な機種に移植可能になった。

 ベル研究所が所属するAT&Tは、日本で言えばNTTみたいなもので、全米の電話網を支配する巨大企業だった。なので独禁法の縛りを受け、電信電話以外の商売を禁止されていた。また、UNIXベル研究所所属の研究者たちの個人的な活動であり、会社のプロジェクトではなかった。こういう事情で、初期のUNIXはメディア代程度の負担でソースコード付きで配布された。これが初期のハッカー文化を形成する。OSやアプリケーションはソースコード付きで実質無償で配布され、誰もが自分の用途に応じて改造できた。こういう経路でコードを受け取った大学や研究機関の中でも、有名なのがカリフォルニア大学バークレイ校である。

 1980年ころDECがこれまでのミニコンと性能が段違いのVAX-11を発売する。これは32ビット仮想記憶に対応した「スーパーミニコンピューター」だった。AT&TはVAX-11にUNIXを移植するが、仮想記憶に非対応なままだった。カリフォルニア大学バークレー校は、UNIXのソースを改造して、仮想記憶対応UNIXを発表する。これが、バークレー、ソフトウエア、ディストリビューション。略してBSDの始まりである。本家よりあきらかに優れた改造版が登場した。その後、ARPANETプロジェクトなどもBSDに受注され、インターネットのパケット交換システムもBSDのそれがデファクトスタンダードになっていく。

 このころ、AT&Tは結局地域ごとの電話会社に分割されることになり、そのかわりコンピューター業界へ進出できるようになる。当然すでに人気が出ていたUNIXから利益を得ようとする。UNIX利用企業からそれなりのライセンス料を徴収する事自体は正常な活動だが、それによって「ソースコードをだれても改造して再配布する」というハッカー文化は終わりを告げる。この状況に憤慨したリチャード・ストールマンは、UNIXのような環境を自由に扱えるものを作ろうと、1983年、GNUプロジェクトを立ち上げる。GNUは、「GNU's Not UNIX」(GNUははUNIXではない)という文の頭文字である。

 カリフォルニア大学は、大学なのでその段階でもAT&Tからソースコードの提供をうけられた。BSDUNIXの改造版である。なので、BSDは、AT&T著作権を侵害せずに配布を続ける方法を模索する。AT&Tのソースに追加する部分だけを無償配布し、OSとして動かしたければAT&Tのライセンスを購入して、オリジナルソースを購入した上で、BSDのパッチを当てるようにしていた。そんなめんどくさい状況でも、1980年代を通して、技術者ならBSDと言われるBSD優位の状況が続くことになる。

 ただ、パッチを当てたソースが本当にAT&Tのライセンスを破ってないのかというのは難しい問題であり、また利用者がAT&TBSDの両方のライセンスを取得しなければいけない不便もあった。バークレー校は、配布コードから徹底的にAT&Tのコードを削除して、独自開発したコードに置き換えていき、やがてほぼオリジナルコードからなるほぼ完全なOSを作り上げる。これが1991年のNetworking Release 2(Net/2)である。これがリリースされたことをもって、個人が使うパソコン上でUNIXを使う環境が整い、当時普及し始めたIntel 80386 CPU搭載パソコン用UNIXの開発が各所で始まる。ウィリアム・ジョリッツがオープンソースとして386BSDを開発し、バークレー、ソフトウェアデザイン社(BSDi)がBSD/386という商用プロダクトを販売し始める。この時期386BSDからNetBSDFreeBSDが産まれる。

1992年。BSDiに対して、AT&T著作権侵害の訴訟を起こす。BSD/386が基にしたNet/2がUNIXのコードを盗用してるというもの。企業であるBSDiに対して起こされた訴訟だが、同じBSD Net/2をベースにしていたFreeBSDNetBSDも影響を受け、この訴訟期間、配布が停止する。この時期に北欧フィンランドの学生。リーナス・トーバルスが、この訴訟とほぼ無関係にUNIXっぽいLinuxというOSを作りはじめる。

 BSD訴訟は、2年間UNIXの発展を妨げ、Linux勃興のチャンスを与えて終わる。この裁判の結末は和解条件が複雑にからんで実態は不明だが、BSDのコードにAT&Tの盗用もあったけど、逆にBSD開発のコードがより多くAT&Tのコードにも混じってたという、どっちかというとBSDの勝ちみたいな感じだったらしい。

 この裁判を受けて、カリフォルニア大学バークレー校は、「本当にAT&T由来のコードを全部抜いた代わりに、それだけじゃOSとして機能しない」BSD4.4-Liteと、AT&T由来と判定されたコードも含むものを2つリリースすることになる。FreeBSDNetBSDは当然、Liteの方をベースに不足してる部分を新たに書いて再構成される。


 この動きとは別に、1980年代なかばから、UNIX戦争と呼ばれる紛争があった。もともと1970年代に商売にならないから配布しまくったUNIX、様々な会社で改造されまくって使われていたが、ヨーロッパ系の会社が標準化委員会を1984年に立ち上げる。X/Openである。これを見たAT&Tは、ちょうどワークステーション市場を開拓していたSUNと組んで、UNIX System V Release 4を発表。

 ところが、UNIXの元祖であるAT&Tと、当時ブイブイいわせてたSUNが組んだことで危機感を生じたDECやIBMといったメーカーが、Open Software Foundation(OSF)を結成してこれに対抗する。AT&T/SUNグループも他の会社を巻き込んで UNIX International(UI)を結成する。

 OSFグループは、当時の「これからのOSはマイクロカーネル」というムーブメントを反映し、Mach マイクロカーネルをベースにしたOSF/1というUNIX互換OSを作っていたが、この流れはなんかあんまし続かなかった。

 最終的に、このUNIX戦争は、X/OpenとOSFとUIがだいたい合併して、どーでもよくなる。この過程で、UNIX著作権はノベルに渡り、一部の権利がSCOに移動する。

 カルデラがSCOを買収、カルデラが社名をSCOと変更。2003年、SCOはLinuxUNIXの権利を侵害しているとして訴訟を起こす。UNIX業界のゴタゴタは食傷気味で、いままでさんざん訴訟と和解を繰り返していたのに、いまさらまたやるのかとみんなうんざりするが、これがすげえ大型訴訟に発展していく。SCOは世界中の大企業を相手取って巨額の訴訟を起こし続けた。

 この裁判の特徴は、何一つ証拠が出てこなかったところだ。SCO側が「LinuxUNIXのコードを盗用してる、何万も」と言うだけでなかなかコードが出てこない。やっと出てきたらBSD訴訟当時にBSD著作権が認められた部分だったり、それ以上になにもない、ただのコードの羅列で侵害の事実がなかったり、ほんとに何も出てこなかったのに、ダラダラ続いたのだ。それでも7年くらい裁判は続き、最終的に「そもそもSCOはノベルからUNIXの権利もらってないよ」という結論になってマジでグダグダなことになった。


 40年以上も現役で使われているUNIXというOS。ほんとうに様々な戦争、紛争があったのである。今後こういうことがないといいなあ。

LEDと液晶とプラズマとFEDとSEDと有機ELと

 新型iPhone有機El採用というニュースが流れてるが、有機EL採用のスマホというならサムスンとかがかなり前から出してるのでさほどニュースバリューはなかったりする。それはさておき、表示装置の歴史も結構いろいろあったなあと思うのだ。

 その昔、デジタル表示の腕時計や電卓が登場した際使用されていたのは7セグメントLEDだった。「日」みたいな形の、縦横の棒を7本並べたものだ。「日」のどの棒を光らせるかで0から9を表現していた。ただ、LEDを光らせるためにはそれなりに電気を食うので、小さなバッテリーしか搭載できない腕時計などでは、リューズのところのボタンを押したときだけLEDが光って時間が表示されるような省エネの工夫がなされていた。もっと電池が長持ちするデバイスを必要とした業界は、液晶に目をつける。これは液体と結晶の中間みたいな物質で、流動体であり、電圧をかけると結晶が並んで光を遮るので不透明になる。これを薄いガラスの間に「日」の棒一本一本の形に整形、流し込んで使用した。液晶は光らない分電気を食わないので、表示しっぱなしでも腕時計が実用的に使えた。ただし、透明が不透明(実際には黒っぽい色に)なるだけなので、夜間はやはり見えなくなってしまう。なので液晶の裏に明かりを入れて、ボタンを押してる間光るようにした。液晶は光らないため暗いところでは見えない。しかし、明るい日中は日光の反射でよく見えた。

 さて、液晶は、そもそも液状な物質中の結晶が動くという仕組みなので、電圧をかけてから表示されるまで、また、電圧を消してから表示が消えるまで微妙な時間がかかった。「カチッカチッ」ではなく「もやっ、もやっ」と表示されていたのだ。1970年代の時計や電卓の表示には使えても、高精細で高速表示を求められるテレビやパソコン用のモニターにはなかなか向かなかった。「日」ではなく、細かいマスを並べたドットマトリクス液晶が登場して、任意の図形を描けるようになっても、動画を表示すると残像だらけでもやーっと動いてしまうため、実用出来ではなかったのだ。

 この問題は、縦横のマトリックスを順番に電圧かけるSTN方式では解決できず、画素ごとにトランジスタを配置して、高速でON/OFFを切り替えるTFT方式が登場することで解決するが、それだと電力を食うし、そもそもバックライトがないとTVやパソコンにはきついので、その分も電気を食う。なので、初期のノートパソコンでは、東芝のようにプラズマディスプレイを使用するものもあった。STN液晶ではテキストのスクロールすら耐え難い残像を引いた表示の遅さがあった。

 高速表示が可能なプラズマディスプレイは、画素単位で、放電を起こし、蛍光体を発光させる方式だ。これはブラウン管よりずっと薄いが、放電部と蛍光塗料を塗った表示部を薄いガラスで挟んで間に希ガスを封入するなどの複雑な構造になっている。1986年に、「ダイナブック」の名を冠して発売されたノートパソコン、J-3100B11/B12は、オレンジ色に発行するプラズマディスプレイを搭載していた。本格的な高解像度ノートPCの元祖的存在で、話題になり、PC-98互換でなくてもこれなら使えると結構売れた。ただし、この商品が売られたのはバブル時代であり、下位機種ですら498000円という値段だった。

 ダイナブックのプラズマは、いわばパソコンマニア向けモノクロ表示装置だが、TVでの薄型ディスプレイとしては、NHKが開発し、やがてパナソニック等が売り出すハイビジョンカラーテレビがあった。これらは、1990年代後半、40インチ以上の大型テレビで、100万円前後で売られ、金持ちが購入して、NHKのついに実験放送で終わったアナログハイビジョン衛星放送を見るためだけに売られていたのだ。なんというか贅沢な時代である。

 この時代、液晶は、TFTでも明るさが足りなくて、コントラストが弱いし、ちょっと視聴角度がずれるとほとんど灰色になるものだった。なので、安いTVは液晶、高いTVはプラズマという住み分けがなされた。液晶は、所詮透明と不透明を切り替えるデバイスで、自己発光するブラウン管より悪い。ブラウン管を超えるのはプラズマと思われていた。ただ、シャープが液晶に本気で頑張っていたので、視野角やコントラストの問題はどんどん解消されていって、「あれ?全部液晶でよくねえ?」となっていった。この時代シャープ、マジでトップランナーで、世界の表示装置の頂点に立ってた。

 1990年代から2000年代にかけて、プラズマの次を狙う表示装置の研究が各社で行われてた。この時代の主流は電界放出ディスプレイ(FED)と、その派生の表面伝導型電子放出素子ディスプレイ(SED)だ。日本のテレビメーカーはこれらにかけた。かけまくった。しかしこれらが研究を続けてもなかなか歩留まりが出ない。殆どのメーカーが撤退してしまった。現在FEDSEDはなかったことになってる。

 FEDSEDと同じ頃、有機ELの研究も行われていた。これは有機分子を励起させて発光させる、LEDとよく似た仕組みの表示装置だ。ただし、有機分子は一般的に寿命が短い。なので昔のTVなら10年も20年も使えたのに数年で色が出なくなるかもしれない。これじゃだめだろうとなる。研究をするも、なかなか歩留まりも改善しない。日本で有機EL研究してた企業は2000年代にほとんど撤退した。

 ソニーは比較的初期から有機ELの研究をし、量産にこぎつけたが、結局撤退し、PS Vitaの有機ELパネルをサムスンから調達したらしい。



 何年も前から、韓国サムスンは自社のアンドロイドスマホ有機ELを使い、日本はigzoに満足してiphoneの液晶受注してたのだよな。



 ここであげた液晶もプラズマも、FEDSEDも、有機ELも、だいたい発明はアメリカで、素材選択と量産工場の構築がアジア企業だった。これが90年代までは日本。2000年代以降は韓国になってる。これに日本企業は危機感持たなきゃいけないんじゃないかな。

ローザ・ルクセンブルク

https://upload.wikimedia.org/wikipedia/commons/5/52/Rosa_Luxemburg.jpg

 ローザ・ルクセンブルクという革命家を知ってるだろうか。レーニンとだいたい同じ時期に活動していた共産主義革命家だ。レーニンと同じくマルクス主義を奉じていたが、ロシア革命ソ連の成立には徹底的に批判をしていた。

 現代、いや20世紀初頭から、共産主義マルクス・レーニン主義と同一化され、共産主義とは、企業の国有化、前衛党理論、民主集中制があたりまえとなって、だからこそ資本主義、自由主義の敵になっていった。ソ連崩壊後に左派が「あれはスターリン専制がわるかったのだ、レーニンまではよかった」あるいは、「マルクスは正しかったがレーニンが歪めだ」みたいな抗弁をして笑われたりもしたのだが、現実問題として、20世紀に成立した共産主義国はすべてレーニンの子孫だったのだから、マルクスが正しかったかどうかなど確認しようがない。

 社会主義共産主義は、そもそも18世紀の啓蒙主義からのフランス革命を経て、より民衆の利益を図る思想として様々な人によって唱えられた。その中でマルクスがもっとも論理的なシステムを構築し、最初のインターナショナルを築くことになる。ジャコバン派やブランキスト、無政府主義、さまざまな派閥があって、共産主義は分裂しまくった。普仏戦争末期に、パリに出現したパリ・コミューン政府はおそらくもっともはやい共産主義政府であろう。これは結社、言論の自由をうたい、普通選挙を実現していたが、プロイセンとフランス保守政府の弾圧で潰えた。マルクスはこのパリコミューンを目の当たりにし共産主義の正義を構築した。

 ローザ・ルクセンブルクは、ポーランド出身の女性で、偽装結婚プロイセンの国籍を得た革命家である。第一次大戦前後のドイツで活動していた。彼女は、第一次大戦前夜、戦争回避のためのゼネストを呼びかけていた。労働者が各国で一斉にストライキを起こせば戦争自体が不可能になると考えたのだ。しかし各国は結局ナショナリズムに走り、労働者の組合組織も戦争に協力した。

 レーニンは「前衛党」という概念を提出し、共産主義革命のためには、前衛党が専制的に民衆を導かねばならないとした。ローザはこの前衛党論に反対した。彼女はロシア革命後の、憲法制定議会がボルシェビキによって解散させられたことを批判し、資本主義の「搾取者」にも選挙権を与えるべきと主張した。なんだろう。驚くほどの自由主義、民主主義ではないか。ローザ・ルクセンブルクマルクス主義がもし勝っていたなら、共産主義とは理想的な民主主義になりえたのではないだろうか。

 現実には、レーニンがすべての共産国の規範になり、前衛党によって思想・表現の自由は弾圧されていった。ローザはドイツ革命に失敗し、銃床で撲殺され、ナチスによって墓を暴かれるハメになる。

.NETの WebBrowserコントロールでajaxが動作しない場合

 僕は「なろうReader」というWindows用アプリケーションを公開している。これは「小説家になろう」「カクヨム」「アルファポリス」という三つの小説投稿サイトに対応した、小説読み上げソフトだ。基本的にWebBrowserコントロールを貼り付けたFormに各小説投稿サイトのURLを適用し、読み込まれたページからテキストを抽出して音声で読み上げるものだ。なので投稿サイトにアクセスして操作する部分は普通にIEコンポーネントに任せている。

 最近「小説家になろう」が、サイトの改修を行い、これまで通常リンクでページ遷移を伴っていた、ブックマーク登録/解除と、しおりの更新処理を、その場で完結するajaxを使った処理に変更した。そしたらこれが「なろうReader」で動作しなくなってしまったのだ。ブックマーク登録やしおりのリンクをクリックしても何も起きない。WebBrowserコントロールIEと同じ動作をすると思ってたので、動作しないのはなぜだろうと悩んだ。

 ソースを見てみると、

<a href="javascript:void(0)" >しおりを挿む</a>
<input type="hidden" name="siori_url" value="http://syosetu.com/favnovelmain/ichiupdateajax/useridfavncode/639697_475037/no/48/?token=dfc11e44e54805f3825e1a4ab26e319d">

のようになっている。なので、"webbrowser control ajax void(0)"で検索した所、
WebBrowser control - behavior with links having href='javascript:void(0)'
という質問が見つかった。

 結局のところ、セキュリティのために無効化されているWebBrowserコントロールの、Script URL Migration機能を有効にすればいいらしい。これは、コントロールが初期化される前に、レジストリに書き込む必要がある。

Private Sub SetBrowserFratureControlKey(feature As String, appName As String, value As Integer)
        Dim key = Registry.CurrentUser.CreateSubKey(String.Concat("Software\Microsoft\Internet Explorer\Main\FeatureControl\", feature), RegistryKeyPermissionCheck.ReadWriteSubTree)
        key.SetValue(appName, CType(value, UInt32), RegistryValueKind.DWord)
End Sub
Private Sub SetBrowserFeatureControl()
        Dim filename = System.IO.Path.GetFileName(Process.GetCurrentProcess().MainModule.FileName)

        SetBrowserFratureControlKey("FEATURE_SCRIPTURL_MITIGATION", filename, 1)
End Sub

このように、"FEATURE_SCRIPTURL_MITIGATION"を1にするサブルーチンを書き、
Form1_Load()の中でSetBrowserFeatureControl()を呼べばいい。

雨漏りコントの衰退

www.youtube.com

 「8時だヨ!全員集合」や「ドリフ大爆笑」などの番組で、雨漏りコントは定番ネタだった。雨が降り出すと家の中のあちこちに雨水が落ちてきて、そこにタライ、バケツ、鍋などを次々置いていく。それぞれ「カン」「ピチャン」「コン」などと音がしてどんどん賑やかになっていくというもの。このネタはバブル時代以降ほぼ見られなくなっていく。

 

 おそらく民家の屋根が老朽化して雨漏りが起きるという事態が、リアリティを感じられなくなったということなのだと思う。家の中で何箇所も雨が漏れてきて、それをあわてて受けるみたいな状況。もちろんコントだからおおげさに描かれているのだけど、あれは1970年代にはそこそこ見聞きする話だったのだ。僕の話をすると、まさに1970年代我が家の茶の間で、雨漏りをタライや鍋で受けていた経験がある。我が家は大正8年に建った瓦葺平屋であり、戦前は地主でそこそこ儲かってたが、戦後の農地解放後祖父がいろいろな事業に手を出すも没落し、家を修繕するのも難しい状況で半端に広い家屋を抱えていた。なのでまさに小学校入学の頃はコントのような雨漏りを体験したものだ。

 

 親父が一念発起して屋根職人を雇い、瓦とトタン部分の葺き替えをしたため、小学校中学年以降は雨漏りのない生活を実現できたのだが、この工事中、屋根職人見習いの若者がすげえ音を立てて屋根から転がり落ち、途中で端をまるめていないトタンを掴んだせいで手のひら血まみれになってタライにいれた水で手の血を洗っていた記憶が残っている。

 

こういう、なんてことない昔のコントから、日本の歴史を垣間見るというのもおもしろいんじゃないかな?

 

 

openMSXで、V9990に画像を出力してみる

V9990のエミュレーションが組み込まれたMSXエミュレーター

オープンソースMSXエミュレーターopenMSXには、各種拡張カートリッジのエミュレーターが予め用意されている。その中の、V9990搭載グラフィックカード、GFX9000のエクステンションを有効にすることで、V9990対応ソフトを動かすことができる。

 msx-sdcc@Wikiに簡単な解説とサンプルコードがあったので、ありがたくパク…参考にさせてもらうことにする。


www28.atwiki.jpwww28.atwiki.jp


512x424ドット、32768色モードを使いたい

 ただ、これそのままやっても面白くないので、画面モードを512x424のインターレースモードで高解像度の画像表示に挑戦してみた。なにしろ256x212ではいまどきかなり凸凹して見えてしまうので…

 で、実際画面モードを希望のものにするにはどうしたらいいかとなると、上記サイトの情報だけでは全く足りないので。
MSX Banzai! - The MSX Worshipping Shrine - V9990 Programmers Manual

をチェック。うーん、MSX2 テクニカルハンドブックを思い出す詳しい説明だ。ただ問題は英語だということなのだけど…



 どうやら、V9990の場合は、インターレースモードで2プレーンに分けて描画する必要はなく、普通の縦424ピクセルの画像としてVRAMに上から書き込んでいけばうまいことインターレース表示してくれるらしいので、そのようにする。

 以前の記事で書いた、z88dkを使用し、以下のようなコードを書く。
juangotoh.hatenablog.com

#include <stdio.h>

unsigned char inp(unsigned char addr);
void outp(unsigned char addr, unsigned char data);
void V9990Reg(unsigned char reg, unsigned char data);
void V9990Memadr(unsigned long addr,unsigned char rw);

unsigned char inp(unsigned char addr)
{
    #asm
    
    ld hl,2
    add hl,sp   ;skip return address
    ld c,(hl)   ; c=addr (LSB)
    in a,(c)
    ld h,0
    ld l,a      ; hl = return parameter

    #endasm
}

void outp(unsigned char addr, unsigned char data)
{
    #asm

    ld hl,2
    add hl,sp
    ld a,(hl)   ;a=data
    inc hl
    inc hl
    ld c,(hl)   ;c=addr
    out (c),a

    #endasm

}

void V9990Reg(unsigned char reg, unsigned char data){
	outp(0x64,reg);
	outp(0x63,data);
}

void V9990Memadr(unsigned long addr,unsigned char rw){
	unsigned char hi,mi,lo;

	lo=addr & 0xff;
	mi=(addr >> 8) & 0x3f;
	hi=(addr >> 14) & 0x7;


	if (rw) {
		/* R#3 VRAM READ ADDRESS REGISTER */
		outp(0x64,0x3);
	}else{
		/* R#0 VRAM WRITE ADDRESS REGISTER */
		outp(0x64,0x0);
	}

	/* SET ADDRESS */
	outp(0x63,lo);
	outp(0x63,mi);
	outp(0x63,hi);

}

void main(void){
	long i;
    unsigned char col[3];
    FILE *fp;
    int c;
    int cIndex=0;


	
    // R#6 SCREEN MODE 512x424 16bit/pixel
    V9990Reg(0x6,0x97);

    // R#7 ENABLE INTERLACE
	V9990Reg(0x7,0x85);

	// R#8 ENABLE SCREEN
	V9990Reg(0x8,0x82);

	// SET VRAM ADDRESS(r=0,w=1) 
	V9990Memadr(0x0,1);
    if ((fp = fopen("A004.RAW", "rb")) == NULL ) {
		//puts("file not found\n");
		return 1;
	}
    fseek(fp,0,SEEK_SET);
    while((c=fgetc(fp)) !=EOF){
        unsigned char d1,d2,tmp;
        if (feof(fp)) break;
        col[cIndex]=c;
        cIndex++;
        if (cIndex >2){
            // col[0]=R col[1]=G col[2]=B
            cIndex =0;
            d2 = (col[1] >>1) & 0x7c;
            tmp=col[0] >>6;
            d2 |= tmp;
            d1 = ((col[0] <<2) & 0xE0) | (col[2] >>3);
            
            outp(0x60,d1);
            outp(0x60,d2);
            
        }

    }
    fclose(fp);

}

これをMSXDOS用にコンパイルし、できたコマンドと同じディレクトリに"A004.RAW"という画像ファイルを置く。
 これはあらかじめPhotoshopで512x424ピクセルにした、RGB各8bit、つまり24bitカラーのRAW画像だ。RAW画像というのは、ひたすらピクセルデータが左上から右下まで隙間なく並んだ、全く圧縮されておらず、一切メタデータを含まない画像で、普通こんなものを使う用途はあまりない。なにしろ画像ファイルに縦横のドット数とかRGBの並び順とかの、表示に必要な情報が一切含まれていない。ただ、予め必要な情報を自分が持っているなら、プログラムから読み出すのに一番簡単なフォーマットである。
V9990の16bitカラーモードは、1ピクセルに2バイト使用し、RGB各5bitとなっており、その並びは
0GGGGGRR RRRBBBBB
となっている。リトルエンディアンで格納されるので、RRRBBBBBの方を先に書き込む必要がある。もとのRAW画像は、
RRRRRRRR GGGGGGGG BBBBBBBB
の順で並んでいるので、3バイト読み込んでは、下位3ビットをクリアし、左右にずらした上で合成し、2バイトにまとめなないといけないのでちょっとだけめんどい。

結果

 実行してみると、まあ呆れるほど遅い。そりゃ1バイトずつ愚直に読み込んでは表示してるんだから遅いわなあ。結果が以下の画像。
f:id:juangotoh:20170716180720j:plain

あー、縦方向の解像度全く出てない。もちろん1/60秒ごとにチラチラ切り替わる画面をスクリーンショットでうまく取り込めないという問題はあるのだけど、これ実際見てるとわかるのだけど、openMSXのインターレースモードって、エミュレーターの画面上で全く同じ位置に奇数ラインと偶数ラインが描かれてて、それを切り換え表示してる感じなんだよね。本来テレビのインターレースモードは、走査線の奇数偶数で上下にずれて隙間を埋めてるから、それで解像度上がるのだけど、同じ位置で混ざって表示されるんじゃインターレース使う意味がない。実機とエミュレーターの違いが出てしまった感じかあ。

 まあとにかく、32,768色、横512ドットモードの画面のサンプルということで。

余談

 V9990、640x400とか、640x480とかの画面モードがあるのだけど、これらのモードだと最大16色しか出ないんだよね。時代的にMS-DOSで動くPC-9801シリーズのアプリが移植できればOK的なモードだったのかなあ。

Kiwi:68008+V9990+SID音源×2という「あの頃ほしかった系」コンピューター

f:id:juangotoh:20170709105210j:plain

www.ist-schlau.de

 

 以前たまたま見つけたドイツのサイトだが、自作コンピューターの説明と販売を行っている。販売ページを見ると、基板と部品のセットで€333.33。ただし追加部品がいくつか必要になる。基板には表面実装LSIのみ実装済みで、他のものはすべて自分ではんだ付けする必要があり、まあそれなりに覚悟がいるキットだ。このコンピューター、なんとも「あー、昔こういう仕様のパソコンがあったらよかったなあ」的なスペックなのである。

 

CPUが68008

 モトローラの16ビットCPU、68000の8ビットバス版。これはできたら8ビットバスバージョンじゃなく、完全な68000であってほしいところだけど、自作となるとこの辺が妥当なところか。とにかくm68kアーキテクチャである。フラットな4MBメモリマップが使える。ホビーパソコンとしてこれはうれしい。

 

VDPがV9990

 あの、MSX3用に開発されたV9990 VDPである。開発の遅れから、実際には採用されず。これが使われたパソコンは存在しない。なのでカーナビとかパチンコ用に使われたらしい。VGA解像度で家庭用テレビに出力でき、32768色発色。MSX2+やturboRのV9958より格段に高速。

 

音源がSID×2

 コモドール64で使用されたSID音源を二個搭載。欧米のチップチューンでいまだ人気の音源チップである。まあC64が流行らなかった日本から見ると、ヤマハFM音源チップとかの方がうれしいけど。

各種インターフェース

 RS232C、パラレルポート、PS/2キーボード及びマウス端子、ATARI方式のジョイスティックポート、IDE/ATA ハードディスク&フロッピーインターフェースを装備。EPROMにIDEからのブートローダを格納している。グラフィックを扱えるBASICも用意しているようだ。

 

雑感

 MSX好きにとっては、V9990搭載というのがすごい魅力的だ。RAM 4MBは現代のパソコンから考えると少ないが、Macintosh Plusの最大メモリが4MBだったことを考えると十分である。適切な開発環境を整えることができれば結構使えると思う。ちなみにVRAM512KBはメインメモリとは別に確保されている。

 €333.33という価格は、おそらくApple Iの$666.66を意識していると思われる。ギャラリーページを見ると、この作者、スティーブ・ウォズニアックに会いに行ってるようだ。

 基板と部品のセットには、メモリとSIDチップが含まれておらず、これは別売りになっているが、SIDに関してはSIDのICパッケージサイズのボードにマイコンチップを乗せたエミュレーションボードであるNano SwinSIDがラインナップされている。C64の音源であるSIDは部品単体で入手が難しいこともあってこういう代替品が作られているようだ。

 

デモ動画

www.youtube.com

有名なAmigaのデモを移植したもの。

 

www.youtube.com

2Dアクションゲーム。