ヤマハYIS

2014年2月6日

かつて、ヤマハから、YIS(ワイズ)というホームコンピュータが発売されていました。ヤマハのパソコンでYISというとMSXを思い出す人の方がほとんどだと思いますが、そのYISではありません。

この投稿の続きを読む »

MSXのドラクエIをSEGA MarkIIIに移植してみようかなーと思った話

2014年1月11日

オチを先に書くと移植はしなかったのですが、その結論に至るまでの記録です。

この投稿の続きを読む »

脱衣ゲーム基板でイースIIの曲を流してみた

2013年11月29日

動画のタイトルとサムネがネタの全てという出オチ以前の動画ですが、ここでは技術的な補足をしてみたいと思います。

この投稿の続きを読む »

SANYO PHC-1000

2013年11月23日

三洋電機五十年史という、三洋電機が自らまとめた社史があります。創立から2001年くらいまでの歴史をまとめた内容なのですが、マイコン/パソコンについてはほとんど触れられていませんでした。ただ、三洋のパソコン第一号機がPHC-1000であるという記述があり、それをキーワードにして三洋電機技報という資料を見つけましたので、ここにまとめておきたいと思います。

この投稿の続きを読む »

mybrain(マイブレーン)3000

2013年11月1日

mybrain700/800に引き続き、mybrain3000について調べたことをまとめます。実機は持っていません、誰かください。

この投稿の続きを読む »

長野県長野市 長野駅周辺のゲームセンター/コーナー

2013年10月23日

長野県長野市 長野駅周辺のゲームセンターやゲームコーナーをGoogle Mapにまとめてみました。


より大きな地図で 長野駅周辺 ゲームセンター/コーナー を表示

長野駅周辺 ゲームセンター/コーナー

各ゲームセンターの詳細は全国ゲーセン地図Wikiの方が詳しいですし情報の鮮度も高いと思います。

ただ、すでに閉店してしまったゲームセンターの場所にもピンをうってありますので、懐かしいなーと思ってもらえる地図になっていると思います。
私が知っているのは1980年代前半頃からのゲームセンターですので、それ以前の、特にインベーダーブーム時代についてはわかりません。また、看板を出して営業をしていなかったようなゲームセンター・・・というか、アレ系のお店についても未記入です。

Raspberry PiにAY-3-8910をつないでみた

2013年10月5日

Raspberry Piには、GPIOという入出力端子があるので、音源ICを接続してみました。

この投稿の続きを読む »

東芝科学館に行ってきたよ

2013年9月28日

2013年9月末で閉館することになった、東芝科学館に行ってきました。2014年中に別の場所でリニューアルオープンする予定だそうですが、展示物が変わるかもしれませんので、移転前に見ておきたかったのです。

展示物は色々あって、リニアモーターカーの原理を説明している模型とか、超伝導のピン止め効果の実演とか(未来科学館のものよりも大きな超伝導体を使ってます)、巨大なシリコンの展示とか様々なのですが、その中でも、コンピュータっぽいものに焦点を当てて写真を撮ってきました。あ、最新のWindows8パソコンやタブレット機なんかも展示してありましたが、そういうのは家電量販店でみればいいのでパスです。

撮影した写真はGoogleのアルバムにUpしてありますが、その中からいくつか。

年表

RETROPCerとしては、パソピアはどこなの?!と言いたいところなのですが実機はおろか年表にも載っていません。ここに来る前の情報として、パソピアが展示されていないことは知っていて、なぜ展示されていないのか疑問でしたが、実際に足を運んでみてなんとなくわかりました。

東芝の事業は幅広くて、広告やCMでよく知られている家電製品だけでなく産業用の大きなものまで手がけているのですよね。1980年代のパソコンもそんな事業の一つでしかなく、更に、東芝科学館では「日本で初めて」か「世界で初めて」のものが多く展示されているので、NEC、SHARP、富士通といった当時の御三家に入れなかったパソピアシリーズが展示されないのはしょうがないのかなと。
そんなわけで、東芝製のデジカメ(出してたんだ・・・)とかMP3プレイヤー(ギガビートあったよね)のようなものも展示されていませんでした。
だったら、NECのTK-80に先駆けて発売されたTLCS-12A EX-0やTLCS-12A EX-12/5が展示してあってもおかしくなさそうなのですが。

ただ、まったくパソピアの痕跡が無いわけでもなく、

パソコン年表 パソピア

こんなところに書かれていました、よかった。

ところで、このT400ってなんだろう?

T400

[追記] タイニーPさんから教えてもらいました。こちらの記事にちょっとだけ書かれていました→【電子産業史】1989年:世界初のノート・パソコン

その他の展示物で、個人的には、ブラウン管メモリ(ウィリアムス管)を使ったマシンを見れたのが嬉しかったです。

VAIO Duo 11でマウスカーソルが勝手に左上に移動してクリックする

2013年9月13日

艦隊コレクションをやってると急にブラウザがDMMのTOPページに移動してしまうことがあって「何事?!」と思っていたのですが、どうやらマウスカーソルが勝手に左上あたりに移動してクリック動作をしてしまうらしく、Webページ左上にあるDMMのロゴをクリックしていたようです。
Windowsのデスクトップ画面を出した状態でも左上にある「コンピュータ」アイコンがアクティブになっていたり、タイル画面でメニューを表示したまま数秒放置しておくだけでメニューが勝手に消えてしまうので変だなーと思っていたので色々とググってみたところ、同様の現象が発生している人が多数いました。

対処方法はソニーカスタマイズセンターに電話すると「対処アプリのダウンロード先を教えてくれるので自分でダウンロードする」か、電話でねばると修正用のソフトが入ったCDを送ってくれるということでした。それは面倒だなーというか、さっさと対応プログラムをVAIO Updateで配信すればいいのにと思いつつも電話してみたところ、どうやら公式サイトで情報公開されたらしく、S1305070049695でググってくださいという、慣れたお返事を頂きました。

[SVD112**] タッチパネルに触っていないのにカーソルが勝手に移動したり、アプリが起動することがある

DCP-J940N-ECOでA4サイズをスキャンすると切り取られる

2013年9月7日

これまで使っていたキヤノンの複合機が壊れてしまったので、ブラザーのDCP-J940N-ECOというインクジェット複合機を購入しました。
スキャナ機能を使ってA4サイズの資料をスキャンしてみたのですが、どうも読み取りサイズに納得いきません。用紙サイズ全体を取り込めないのです。

この投稿の続きを読む »

PC-6001mkIIのバージョン違い

2013年8月6日

PC-6001mkII本体にはバージョン違いがあるようです。

以前からPC-6001シリーズに搭載されているBASIC ROMにはCRC違いがあると言われていたのですが、mkIIの場合は目に見える形で違いがわかります。
PC-6001好き好きメンバーの推測では、これらの写真のmkIIが後期バージョンだと考えられています。

mkIIメニュー 起動画面

起動時のメニュー画面では、“PC-6001 Mk2 BASIC”が“PC-6001 Mk-2 MENU”になっています。
BASIC起動後の画面ではバージョン表記が“Ver.1.7”がVer. 1.7”になっています。

mon(機械語モニタモード)からBASICへの復帰時にAGAIN BASICと表示されません。従来のmkII(前期バージョン)だとこんな感じでした。
Bコマンド

機械語モニタのB-R命令実行時も素っ気なくなっています。
BR復帰

前期バージョンでは
REVIVAL
REVIVAL AND AGAIN BASICと表示されていたのですね。

ちなみに、後期バージョンでBASIC起動直後にmon→B-Rとするとハングします。キーボードを押すとポチポチと音はするので割込みは生きてるっぽいのですが。

本体内部のBASICのROMにプリントされている文字にも違いがあり、PCR-02がPCR-02Bになっています。
MASKROM

BASICの内部処理自体にも変更点があるようで、えすびさんがまとめてくださっています。

cefucom-21を分解してみた EEPROM編

2013年7月29日

cefucom-21本体を分解してわかったことをザックリとまとめます。

  • 基板が4枚入っていて、Z80が搭載されたボードが2枚、アナログ回路制御基板が1枚、電源回路が1枚
  • Z80が搭載されている2枚ボードそれぞれにZ80のプログラムが書き込まれたEEPROMが搭載
  • 画面制御用のLSI(VDG)の近くにCGROM用のEEPROMが搭載

2つのプログラム用EEPROMと1つのCGROMがあるので、今回はその中身をザックリとのぞいてみます。

まずはPCU-Iとプリントされた基板に搭載されているEEPROMをダンプしてみましたのでバイナリエディタで表示してみて気になる文字列を拾い出してみました。

PCUボードEEPROM PCUボードEEPROM

cefucom-21は電源投入後に機能選択メニューが表示されるようなのですが、PCU-Iに搭載されているZ80とEEPROM内のプログラムは、起動後のメニュー画面や、BASIC以外の機能(スタディ・タイム・スケジュールやCAI)を制御しているように思えます。

あと、EEPROMの後半に
PCU MML
MMLデータらしきものが入っていました。

続いてMCUボードのEEPROMをのぞいてみます。

MCU02 MCU02

こちらのEEPROMはBASICが入っているようです。起動直後はPCUボード側のZ80が動作していて、モード選択でBASICが選ばれるとMCU側のZ80に制御が移るということでしょうか。

MCU02

エラーメッセージが短縮されてない(PC-6001だとSN Errorみたいな2文字表示)ですね。

あと、EEPROMの途中に
MCU02
こんなのがありました。開発中の残骸?でしょうか。BASICの文法に互換のあるPC-6001ではBASIC ROMが16KByteですが、cefucom-21はBASIC ROMに32KbyteのEEPROMを使っているので余裕ありまくりですね。

最後はCGROMです。フォントデータは2値を1bitで表します。1文字は8×10ドットです。高さが10ドット分ですが、CGROM内では1文字を16Byteで管理しているため、1文字毎に6バイトが使われていない事になります。実際にCGROMをのぞいてみると、10Byte毎に00Hが6バイト並んでいる事がわかります。

CGROM

キャプチャ画像で気になるのは最後の方に埋め込まれているSANYOのASCIIコードですね。使われていない領域にASCIIコードでテキストを埋め込んであります。

CGROMは、MAP-1010とPHC-25のCGROMとまるっと同一でした。
MAP-1010はSEIKO製品で、PHC-25がSANYO製品です。時系列ではPC-6001のBASIC互換=PHC-25 → ハード構成をSEIKOにOEMしたのがMAP-1010 → さらにOEMでcefucom-21ということになりそうです。これらの機種はCPUと画面制御ICと音源ICが同じなので(PHC-25とMAP-1010は音源別売)、BASICにもある程度の互換がありますから、画面周りの見た目や音楽がほぼ同じように表現できます。
ただ、メモリマップや周辺回路の制御方法が違いますからマシン語レベルでは互換がありません。

cefucom-21を分解してみたよ ハードウェア編

2013年7月28日

■ 予備知識

マニュアル等々がない上に、分解した本体が起動しなかったので、どういうマイコンなのかよくわかっていません。ここで改めて説明するよりも、他に説明しているWebサイトがありますからリンクを張ってゴマカシます。

珍品コンピューター CEFUCOM-21とパピコンの関係

PHC-25やPC-6001とBASIC互換があるとか、テープデッキとキーボードが本体一体型とか、カプセルイジェクターが特徴ですね。

実際に動いている貴重な動画をスミス・ヒオカさんがUpされています。大感謝! → CEFUCOM-21動きました。

この投稿の続きを読む »

canon CX-1/BX-3

2013年6月25日

かつて、canonから発売されていたCX-1というマシンがあるのですが、スペックがわかりません。

CX-1

当時の雑誌広告は何度かみかけているのですが、どういうスペックなのか、どういう事ができるのか書いてないのです。後期の広告になるとCAT-Iの宣伝が目立つようになり、本体についてはほぼ触れられなくなります。そもそもCAT-Iがなんなのかわからないのですが。

CX-1という型番は他社の他製品でも使われる事が多いので、ネット検索で情報を探すのは難しく、当のキャノンですら、別製品にCX-1という型番を割り当ててますし。

スペックについては日本よりも海外のサイトに少しだけ詳しい情報があります。
OLD-COMPUTERS.COMによると、6809の8Bit機だったみたいです。

[追記]マイコンライフ1982年2月号別冊、インタフェース1981年7月号に少しだけスペックが掲載されていました。

CPU 6809
ROM 32KByte
RAM 64KByte
TEXT 80×24文字
GRAPHIC 560×216ドット
本体仕様 ディスプレイ&両面倍密度(320KB) 5inchディスクドライブ2台(本体一体型)
インタフェース RS-232C × 3
言語 拡張BASIC
価格 1380,000円

あとは、Ats.NさんのWebページに写真がありました。

mybrain(マイブレイン)700/800

2013年6月24日

mybrain700の広告から。
mybrain700

そしてこちらがmybrain800の広告。
mybrain800

mybrain700は本体、キーボード、ディスプレイ、ディスクドライブ2台が一体となったデザインで、重量は30Kgでした。重いですね(後述しますが800は50Kg)。ディスプレイは12インチのグリーンブラウン管ディスプレイです。

mybrain 700のスペック一覧表

CPU 8085A
ROM 2KByte
RAM 32KByte or 56KByte + VRAM4KByte
画面 80×24文字/1文字7×9ドット(※1)
フロッピーディスク 2台/各70KByte
入出力インタフェース RS-232C×3

※1 おそらく文字間に1ドットのスペースを取っていてCGROM上では8×10ドットだと思います。

mybrain 700は8bitCPUを搭載していて、トータルで36KByteもしくは60KByteのRAM領域があり、そのうちの4KByteがVRAM用に割り当てられています。電源投入時には2KByteのROMに組み込まれたブートローダによってディスクからシステムの読み込みと起動を行います。
メモリ領域の0000からDFFFまで全てがRAMで、E000からFFFFまではアクセスできない領域のようです。未実装だったのか、システム用に割り当てられていたのかは不明です。
周辺回路には、DMA用に8257、フロッピーコントローラにFD1771、メモリコントローラに3242、CRTコントローラに8275、キャラクタジェネレータにMC6573、RS232C用に8251があります。DMAは画面表示用に使われていたようです。

提供されていたシステムはCP/M1.4とマイクロソフト社製のMBASIC(MBASIC 5.0)で、MBASICにはディスクアクセス用の命令も組み込まれていました。

フロッピーディスクは容量70KByteの5.25inchドライブだったようです。はっきりしないのですが、mybrain 800という別のモデルには5.25inchドライブではなく8inchドライブ(250KByte)が2基搭載されていて、本体とブラウン管、キーボードに加えて8inchドライブで単体での総重量が50Kgほどあったようです。
また、mybrain 700/800は海外向けにも出荷されていて、こちらのモデルは両面倍密度ドライブが搭載されていたようです。

キーボードはJISキーとは別にテンキーとカーソルキーが離れた位置にあります。カーソルキーは十字並びになっています。ただ、どうやらカーソルキーとBASICやCP/Mとの連携がとれてなかったらしく、BASIC上でカーソルキーを動かすとカーソルが動くのですが行編集はできなかったようで、行を編集するにはEDITコマンドを使う必要があったようです。
また、キーリピートはキーの押しっぱなしではなく、リピートキーを押すとキーのリピートがかかるようになっていたり、シフトキーはシフトキーを押しながらキーを他の押すのではなく、シフトキーを押すたびに4段階のモードが切り替わるようになっていたりと、今時のキーボードとは仕組みが違ったようです。

外部入出力端子はRS-232Cのみで、拡張ボードを挿すためのバス端子はありません。その代わりにRS-232C端子が3つもあり、モデムや音響カプラやプリンタを接続できるようになっていました。

MBASICは、BASIC-80をmybrain 700用に調整したもので、各命令の機能は基本的にPC-8001に搭載されていたN-BASICとほぼ同じものだったようです。mybrain700に搭載されているディスクドライブやRS-232CをBASICから制御する命令も用意されていたので、N-BASICよりも命令数は多くなっています。

ところで、mybrain700の資料は書籍/雑誌資料でも少なく、ネット上にほとんどないのですが、古川 享さんがツイッターで次のようにつぶやいていました。

そのパナソニックは、松下電器産業ではなく、綱島にあった松下通信工業で、生産したのはMybrain700と800、8085搭載で、マイクロソフトはBASICとマイクロソフト初のOS、”M-DOS”を提供しました。ある理由でM-DOSは出荷されず。

古川さんのツイートに出て来る「M-DOS」の名前は当時の雑誌記事にも出てきていて、mybrain700用に発売される予定になっていたようです。M-DOSというのはMIDAS (operating system)の事だと思います。
後に同社から発売されたmybrain 3000は日本で最初にMS-DOSが搭載されたマシンだったようですから、この辺の経緯が気になるところです。

[2013/11/26追記]
その後、発売された無かった理由を古川さんがツイートされてましたので引用します。

マイクロソフト自製の8ビットOSは、松下通信工業のMyBrain用に開発されたMDOSが、最初の製品、使用可能なメモリサイズあ、8085ベースで56KBしかなく、OSのサイズが52KBで納品され、4KBのアプリ用メモリを誰が使うんだ、ということで不採用になった。

発売時期は把握出来ていないのですが1979年から1980年初頭くらいのようです。
おそらくビジネス用途として生産されたマシンだと思うのですが、スペックをみるとPC-8001やMZ-80といった8bit系マイコンをギリギリまで強化して最低限必要な周辺機器を一体化したようなマシンです。驚きなのが価格で、mybrain 700が173万円mybrain 800が223万円でした。PC-8001やMZ-80にディスクドライブなどを増設すると100万円近くなるとはいえ、それでも桁違いですね。

余談ですが、松下のマイコンといえばJR-100/200が有名ですが、JR-100は松下通信工業の電卓事業部が生産したものです。後に発売されたmybrain 3000はデータ制御事業部の生産したものでしたから、同じ名前を持つmybrain 700もJRとはデータ制御事業部の生産かもしれません。この辺は推測です。
もともと、松下通信工業は松下電器産業(パナソニック)から分離した別の会社です(2002年には松下電器産業の子会社になっています)が、mybrainにもJRにもNationalの文字がプリントされていますね。

[2014/02/08追記] マイコンライフ1982年2月別冊誌によると、mybrain 850Mという機種もあったようです。スペックは不明です。
[2014/02/18追記] インタフェース1981年7月号に850Mの情報がありました。800Mが8インチFDDモデル、840Mが8インチ両面倍密度FDDモデル、850Mが両面倍密度FDD×2台のようです。840Mと850Mはドライブ数の違い?

PC-6001以前にMMLが使えたマイコン

2013年6月22日

世界で最初にMML(Music Macro Language)が搭載されたシステム/パソコン/マイコンは何かを調べようとすると、日本だけではなく海外の資料も調べないといけませんし、当時のマイコン上で動いていたソフトウェアならともかく、音楽専用機材に組み込まれたシステムとなると、当時の音楽情報誌なども調べないといけませんから、証拠付きの明確な結論を出すのは難しそうです。

ただ、少なくともPC-6001のPLAY文が初めてというのは誤りなようで、MMLで曲を作れるシステムはPC-6001以前にもあったようです。

PC-6001の発売日は1981年11月10日です。識者の方々の記憶によると、この日よりも前に発売されたMMLが記述できるマイコンとしては、沖電気のif800があったようです。

if800についてWikipediaをみると、1981年11月10日以前に発売されたif800シリーズにはmodel10からmodel60があり、最初のモデルは1980年5月となっています。
ただ、Wikipediaのページにはマシンスペックが書かれていません。なので、他のページ、例えばコンピュータ博物館などを探してみたのですが、「音」に関しては書かれてないのですね。

当時、if800を使っていた方のツイートによると、

ネットの資料では調べられないとなると、次の手段としては当時の書籍/雑誌を調べるのが手っ取り早いので、別の用事で国会図書館に行ったついでに調べてきました。

“IF800によるBASICテキスト コロナ社/岡田文平 谷中勝 共著”という本に、PLAY文の文法が載っていました。この本では、model20上で動作するOKI-BASICのサンプルプログラムと各命令の使い方が記載されていて、その中にPLAY文の文法も書かれていましたので引用します。本文では各コマンドについて詳しく書かれているのですが、ここでは簡略してあります。

コマンド 意味
Tn(速さ) 曲の速さを指定。値は32から255。デフォルトは120
Ln(長さ) 音の長さの指定。値は1から64。デフォルトは4
Nn(音程) 音程指定。値は1から12。Nnの代わりにAからG、#、+、-でも指定可能。
On(オクターブ) 値は1から5。デフォルトは3。O3の時の音程A(N10)は440Hz
Pn(休符) 値の指定方法はLと同じ
X文字変数(間接指定) 文字変数にT,L,N,O,Pを代入して指定する事が出来る
Nn AからGによる表現
N1 C
N2 C#、C+、C-
N3 D
N4 D#、D+、E-
N5 E
N6 F
N7 F#、F+、G-
N8 G
N9 G#、G+、A-
N10 A
N11 A#、A+、B-
N12 B

この本にはサンプル曲のプログラムも掲載されていました。せっかくなので資料用にスキャンしたものを。

サンプル曲

電子化されている当時の雑誌をざっと見たのですが、model10/20の音周りについて書かれている記事は見つけることができませんでした。アスキー誌には4ページほどにわたってif800の詳細なスペック記事が掲載されているのに、音源やスピーカーの有無については書いてありませんでした。ただ、BASICコマンド一覧にはMUSIC命令が載っています。
他の雑誌(誌名は忘れました)でも、model30のブロック図にスピーカーが書かれてる記事があった程度でした。if800はビジネス用途を主体としていた事と、当時はマイコンを使って音を出すという事が珍しかったので、記事として取り上げるほどではなかったのでしょうね。
[追記] 沖電気研究開発47巻1号にmodel10/20のブロック図が掲載されていてスピーカが書かれていると教えて頂きました。

あと、英語版Wikipedia MMLによると、MZ-80Kの SP-5001 BASICでMMLが使えたって書いてありますけど、ホントですかね?SHARPから配布されているMZ-80KのPDFマニュアルによると、後期のSP-5030 BASICではMUSIC命令が使えたようなのですが、MZ-80Kが最初に発売された時に付属していたSP-5001 BASICでもMUSIC命令が使えたのかな?と。MZに詳しい人教えてください。
MUSIC命令がどのバージョンのBASICから実装されたのか、また、それがいつから配布(付属販売)されたのかがわからないです。この辺のことはガラパゴスの中の人にもわからないようですが。
[追記] コメント欄にてSP-5001の頃からMMLが使えましたという情報を頂きました。
[追記] MZ-80K系のMMLは@gorry5さんのツイートによるとBASICではなくモニタROM内のルーチンだったそうです。

[追記] @Kenzoo6601さんから、日立のベーシックマスター(1978年9月発売)でもMUSIC文で音楽演奏が出来ますよーとTwitterでコメントを頂きました。ただ、MUSIC文がシンプルなようで、それってMMLなの?という、そもそもMMLとは何か?という定義を深めないとMMLの歴史を辿るのは大変そうです。

[追記] 世界初のMMLというブログ記事でコンピュータの歴史と音楽の関係が詳しく説明されています。必読!

BUBCOM80

2013年6月13日

基本的なスペックについては、BUBCOM80 補完ページに詳しく書いてありますが、そこに書いてない情報が電子技術とアスキー誌に掲載されていましたので、引用してまとめてみました。

スペック

CPUはZ80Aで約4MHzで動作します。

メインメモリのRAMはDRAM 64KByteがフル実装されています。

起動用ROMが2KByte搭載されています。本体起動時の初期化と、ディスク、カセットテープ、バブルメモリなどの起動処理に使われます。

キャラクタジェネレータを搭載していて、メインメモリとは別に2KByteのRAMが使われています。RAM領域なので再定義可能ということになります。本体起動直後は自動的にデフォルトのフォントが定義されます。

CRTコントローラには、μPD3301 (PC-8001と同じです)を搭載しています。
別売りの高解像グラフィックボードで解像度を上げることができます。μPD3301と高解像グラフィックボードの画面は合成して出力することが出来るようになっています。高解像グラフィックボードは48KByteのメモリ領域を持ち、640×200ドット8色での表示が可能です。このメモリはZ80Aのメインメモリとは別の空間にあり、Z80AからはI/Oポートを経由してアクセスすることになります。つまり、Cレジスタを使ってI/OポートにアクセスするとBレジスタの内容がアドレスバスの上位バイトに現れるという仕様を使ったVRAMへのアクセス方法です。

キーボードはJIS配列ですが、キーボード裏側のスイッチを切り換えると、初心者向けのキー配列になります。このモードではBASICを入力しやすくなり(ほぼSHIFTキーを押さずにBASICを入力できる)、カナが50音順になります。このモード用に「初心者用キートップ」が別売されていたようです。
CMT/シリアルインタフェースには、別売りのロール式アイテムキーが接続可能になっています。これはオフコンなどで使われていたキーで、たぶんページをめくって操作を切り換えられるタイプのキーボードだと思うのですが、私は業務用機器については詳しくないので、どういうものかわかりません。

外部インタフェースにRS-232C(300Baud~9600Baud)が標準装備です。また、オプションとしてBSC通信用インタフェースが別売されていました。
セントロニクス準拠のプリンタインタフェースが搭載されています。
ジョイスティックポートが2つあります。
カセットインタフェースがあり、速度は1200Baudです。

拡張I/Oボックスには、最大で4枚の各種インタフェースカードを収納することができます。ここに、高解像グラフィックボード、フロッピーディスクコントローラ、BSCインタフェースなどを載せます。

音源は不明ですが、スピーカが内蔵されています。

バブルメモリ用のソケット1個を標準装備し、2個まで拡張できます。バブルメモリ1個の容量は32KByteです。このメモリには、フロッピーディスク用の命令を使ってアクセスします。フロッピーディスクよりも容量は少ないのですが、アクセス速度が当時のフロッピーディスク/インタフェースと比較すると高速(約100KBaud)です。

BASICは本体起動時にバブルメモリからMicrosoft BASICを読み込みRAMに展開され、起動します。ロード時間は2秒弱だそうです。雑誌の記事には「BASICが搭載されているバブルメモリは書き換え可能なので、BASIC自体を書き換えられる」と書かれています。これが、最初から搭載されているBASIC自体も書き換えられるという意味なのか、それとも別のバブルメモリに独自のBASICを書き込んで起動する事ができるという意味なのかはわかりません。

BUBCOM80は起動時にバブルメモリ、フロッピーディスク、カセットテープの順にデバイスのチェックを行い、起動可能なシステムがあればそれを起動します。テープも自動的にロードし始めるようになっていたのか気になります。

本体と周辺機器のリスト

雑誌の時期によって周辺機器の価格にばらつきがあります。BC-821と822の違いは不明です。

BC-80S 本体(バブルメモリホルダ×1) 258,000円
BC-80D 本体(バブルメモリホルダ×2) 296,000円
BC-811 交換用JIS配列キートップ 6,800円
BC-812 交換用実用配列キートップ 6,800円
BC-813 交換用英語国向けキートップ 6,800円
BC-818 グラフィック文字シール 500円
BC-821 バブルホルダ 84,800円
BC-822 バブルホルダ(増設用) 38,000円
BC-823 32KBバブルカセット 29,800円
BC-828 バブルホルダ部化粧板 500円
BC-831 コンソール型グリーンディスプレイ 68,000円
BC-832 コンソール型カラーディスプレイ 238,000円
BC-833 グリーンディスプレイ+拡張BOX 114,800(136000?)円
BC-834 カラーディスプレイ+拡張BOX 256,000(306000?)円
BC-841 外置型拡張ボックス 98,000円
BC-842 高解像グラフィックボード 98,000円
BC-843 IEEE-488ボード 価格不明
BC-844 同期式回線制御ボード 98,000円
BC-845 フロッピーコントローラ 78,000(128000?)円
BC-848 組込型拡張ボックス 68,000円
BC-849 DIYボード 価格不明
BC-861 コンパクトプリンタ 80,500円
BC-862 パーソナルプリンタ 158,000円
BC-863 ビジネスプリンタ 208,000円
BC-881 デュアル標準フロッピー 398,000円
BC-882 シングル標準フロッピー 228,000(298000?)円
BC-884 フロッピー結合ケーブル(2台目以降用) 16,000円
BC-888 フロッピーディスク 2,800円
BC-892 ロール式アイテムキー 価格不明
BC-893 ジョイスティック 4,800円
BC-894 ライトペン 60,000円
ACTAM330MIII 音響カプラ 150,000円
WX-4675 マルチペン・マイプロット 270,000円
WX-4637 高速型パーソナル・プロッタ 870,000円

WikipediaやBUBCOM80 補完ページには、バブルメモリホルダを搭載していないモデルの価格が書かれていますが、雑誌記事や広告には、そのようなモデルがリストに掲載されていなかったので、別の資料を探したいところです。→[追記]ROM版のBASIC(64KByte)を内蔵したBC-80RSとBC-80RNの広告を見せてもらいました。値段等はBUBCOM80 補完ページの通りですね。
[さらに追記] ROM版については別の広告がありました。

bubcomROM

LCD-8000VとX68000

2013年6月11日

CENTRYのplus one VGA LCD-8000Vが、15KHz, 24KHz, 31KHz アナログRGB入力できると聞いたので(togetter – LCD-8000DAと8000Vの比較まとめ)、X68000だとどうなのか実験してみました。

8000Vの入力端子はminiD-SUB15ピン(WindowsPCのグラボにあるような端子)ですが、X68000の映像出力はD-SUB15ピンですから、別途、変換コネクタが必要になります。

8000Vの電源は何かしらの機器のUSBポートから取ります。手頃なUSBポートが無い場合は別売りのACアダプタが必要になります。私はとりあえず電源を落としたままのXBOX360を使いました。

接続 大きさ

X68000本体がちょっと離れたところにあっても、キーボードとモニタだけで一通りの事が出来てしまうのが便利です。こうなると小さなX68000用のキーボードが欲しくなります。

human68k

Human68Kを起動したところです。PC-9801用のアップスキャンコンバータをX68000で使った場合、高さ512ドット中の480ドットまでしか表示されないものが多いのですが、このモニタでは768×512ドット全ての領域が表示されています。アナログRGBなのと、画面のスケーリングが行われているからか、部分部分でにじみがあるのですが、元々の画面が8インチと小さいこともあって気になりません。

MMDSP

MMDSPを起動したところです。画面モードは512×512かな?画面内に全て収まっていますね。手元の画面だけで曲選択&再生ができるので便利です。

512mode

512×512モードで1ドットラインを16ドット単位の格子を描いた画像を表示してみました。全てのラインが表示されていますし、画面全体がちゃんと表示されています。ただ、全て同じ太さのラインなのに、画面では太さ(明るさ?)に違いがあります。

スターフォース256 スターフォース384

スターフォースを起動してみました。画面モードは31KHzで、左の写真が256×256、右が384×256モードです。自機がぶれているのはカメラのシャッタースピードと、液晶なので残像(応答速度)が出てしまうからです。ただ、それほど酷い残像ではありませんので実用上は問題ないと思っています。この辺の感じ方は個人差ですし、12000円のモニタとしては満足できると思います。
384×256モードでも問題なく表示できていますね。

15KHz

スターフォースを15KHz 256×256モードに切り換えてみました。まず、自機を動かすと残像というかインタレースのすだれのような縞模様がはっきりと見えてしまいます。静止画だとわかりません。
また、表示が左右方向にはみ出てしまいます。実機でも15KHzではオーバースキャンで表示領域が専用モニタの画面外に出てしまうのですが、それと似たような感じです。
15KHzは一応表示できなくもないけど実用的ではないかなというのが結論です。15KHz専用ゲームで困るかも。

BB_31KHz BB_15KHz

バブルボブルを起動してみました。左が31KHz、右が15KHzです。
やはり15KHzでは左右方向がはみ出てしまいます。8000Vには表示位置とサイズの調整機能があるのですが、それを目一杯まで使ってみても画面内に収めることはできませんでした。

motos_256 motos_384

モトスを起動してみました。256, 384共に問題なく表示できています。

イース

イースを起動してみました。画面モードはわかりませんが、512×512かな?
ゲーム画面自体は問題なく表示されているのですが、ゲーム画面を覆っている枠(ツタの絵が描いてある部分)の一部(画面の上の方)が常にちらついています。ゲームをやってる最中に気になるかもしれません。

ボスコニアン

ボスコニアンを起動してみました。表示領域は問題ないのですが、色々とケーブルを抜き差ししてたり画面モードを色々と切り換えしていると、この写真のように画面全体が上側に寄ってしまったり、左側の表示がはみ出たりすることがあります。基本的には8000Vのメニューから表示位置の調整が可能なのですが、一度だけ8000Vの位置調整機能が反応しなくなってしまって8000Vを工場初期化しました。メニュー一発で初期化できますし、大抵はそれで表示位置が正しくなるので、表示調整が面倒な時はリセットしちゃうのがよいです。

FZ_31K FZ_24K

ファンタジーゾーンを起動してみました。左が31KHzで右が24KHzです。24KHzでもちらついたり画面がはみ出たりすることもなく表示できました。8000Vは神機か!と思った瞬間。

FZクリア

8000Vが実用上、どの程度ゲームに耐えられるのか試した結果です。ノーコンティニューでクリアできるくらいには違和感なく遊べます。多少の残像はあるので、細かい弾がたくさん高速で動くような弾幕ゲームには向いていないかもしれません。
家庭用のゲーム機を液晶テレビに繋いで遊ぶと、表示遅延と残像が理由で違和感を感じてクリアできないということがあります。液晶テレビで久々にスーパーマリオを遊ぶとジャンプのタイミングが合わなくてゲームが下手になったのかなーと思ったりする事があるのですが、遅延の少ない液晶テレビやブラウン管テレビで遊び直すと簡単にクリアできるということがありますから、液晶テレビの遅延は大きな問題ですね。

8000Vを縦置きにすれば縦ゲーにも対応できると思いますので、X68000との相性はとても良いです。あと、全ての画面モードでアスペクト比は未確認です。単に調べるのが面倒だったので。

X68000を大きなモニタでちゃんと表示したいのであれば、マイコンソフトのFRAMEMEISTERと、ゲームモードのある液晶テレビを買いましょう。

せっかくなので、RGB出力のできる家庭用ゲーム機でも試してみました。各ゲーム機のRGB 21pin出力をマイコンソフトのSELECTY-21に接続してD-SUB15pin出力したものを8000Vに繋いでいます。

機種 結果
サターン 画面点滅で非実用的
PS2 映らない
PS2でPS1ゲーム 画面点滅で非実用的
RGB化したNintendo64 画面点滅で非実用的
ドリームキャスト 画面点滅で非実用的
メガドライブ+XMD-2 映らない

ぜ、全滅だと・・・。

縦方向の解像度が240ラインのゲーム機(今回の実験に含まれないスーファミRGBも)を8000Vにつなぐと画面が映ったり消えたりするので、対応していないと考えていいと思います。もしかすると映像信号の複合同期信号を分離すると映るのかもしれませんが、XMD-2で映らなかったので可能性は低いかも。
PS2の480i出力が映らない理由がわかりませんが、PS2のRGB映像出力は複合同期なので、同期分離回路を通したら映るかもしれません。

VGA出力のドリームキャストは映りました。ただ、VGA非対応のゲームを起動すると映らなくなる可能性はあります。でもまぁ、ドリームキャストであれば、今時のパソコン用液晶モニタに繋げた方がいいですね。

[追記]

自分では確認していないのですが、XSYNC-1を使うと上記のゲーム機でも映るものがあるようです。

[追記2]

頂いたコメントへの返信です。

情報1 OSD情報2

コメントの通り、バージョン違いにより表示できる・できない個体があるようです。

タイニーゼビウスをX68000に移植してみた

2013年6月8日

一年前のメモから

2012年6月8日のことでした。6月8日はX68000の日らしく、twitterではX68000が好きな人達や、ライバル機種の人達が入り乱れて、各々が楽しく一日を過ごしていました。その様子は「2012年6月8日は「X68000」の日」にまとめられています。

うんうん、みんな楽しそうですネ・・・いやいや!P6er(※PC-6001ユーザのこと)としては、いくら格下の機種(PC-6001>越えられない壁>X68000という意味)とはいえ、ライバル機が活発に活動しているのを見過ごすわけにはいきませんから、ここは何か仕掛けねば!と一人勝手に思い立ちました。

とはいっても、当日に何かするには仕込み時間が無さ過ぎたので、1年後の2013年6月8日を目標日に定めました。変化の激しい時代になんと気の長い話。でもこの不安定なご時世(※2012年)に1年後のネタを考えるくらいの心のゆとりがあってもいいよね。

何をつくろか

まず最初に思いついたネタが、X68000の代表的なソフトをPC-6001に移植することです。
え、何言ってんのコイツと思われそうな妄想ですが、PC-6001には「タイニー移植テクニック」があるのです。つまり、どんな大作であってもタイトル名に「タイニー」を付ければ誰もが納得してしまう、そんなテクニックです。
例えば「タイニーグラディウス」とか「タイニーファイナルファンタジー」とかなら、グラフィックが物足りなくても速度が遅くても、なんだか許せてしまう雰囲気になるのです。(※1)

※1 タイニーという言葉をどうとらえるかは人それぞれですが、私はPC-6001らしさを表すとても良い意味の単語だと思っています。ばかにする意図はないです。

X68000の名作がP6でも動いちゃってるモンネーというのは愉快そうです。X68000のゲームで有名なものとなると、ジェノサイドやファランクス、魔神宮でしょうか。「タイニー魔神宮」なんてキャッチーじゃん!BASICでいいし!と思うのですが、このネタのギリギリ感を理解出来る人がPC-6001陣営どころかX68000組にも少ない気がします、ザイン。

そんな感じで、何を移植しようかなーとネットでX68000のタイトルを調べながらツイッターのTL眺めていたところ、「侵略!」の文字が目に飛び込んできました。2012年頃まだアニメイカ娘ブームの余韻があったのですね。・・・そっか、X68000のソフトをPC-6001に持ってくるより、積極的に侵略的な攻めの姿勢として、PC-6001のタイトルをX68000に移植して侵略すればいいんじゃね?と発想をひっくり返したのです。
PC-6001の雰囲気をX68000に持ち込むというよくわかんない移植ですが、これなら作業的にも趣味プログラムの範疇で無理がなさそうです。

移植するタイトルは・・・うん、PC-6001の代表的なソフトといえばタイニーゼビウスです。元々はアーケードの移植作ですが、PC-6001らしくアレンジされてますし、ネームバリューもあります。
移植作のタイトルは68秒だけ悩んで「タイニーゼビウスPRO68K」に決めました。

移植をするにあたっては2つの大きな問題がありました。

まず、タイニーゼビウスの内部的な作りがよくわかっていないことです。雰囲気移植(目コピー)でも充分だとは思ったのですが、グラフィックデータを目コピーするのは面倒ですし、グラフィックデータの吸い出すついでにマップデータの解析もすることにしました。

次の問題が、X68000での開発です。X68000は20年ほど前に色々といじっていたので、漠然と『68000アセンブラをHASとHLKを使ってなんかするんだよ』程度の記憶はあるのですが、スプライトコントローラのレジスタなどの資料を集める必要が出てきました。今の時代に68000アセンブラを書くのもなんですが、普段、PC-6001のプログラムを書くために使っているZ80に比べたら、豊富なレジスタと命令の直交性に優れている68000アセンブラは天国なはずです。
とはいっても、データやプログラムのタスク管理はC言語を使った方が断然ラクですし、タイニーゼビウスを動かすくらいであれば実行速度はそれほど必要じゃないので、GCCの開発環境を整えました。速度やファイルサイズに不満があったらコンパイラで生成されたアセンブラソースを手動で最適化すればいいですし。

なんでも世の中には、クロス開発できるX68000をターゲットマシンにしたGCCがあるようです。すごく興味深いのですが、開発環境上の問題にあたるのは避けたかったので、今回は充分に枯れているHuman68K上で動くGCCを使いました。

ざっと開発環境を説明すると、X68000エミュレータ上で動いているHuman68KにGCC環境を構築して、WindowsのドライブをHuman68Kから見えるようにWINDRV.SYSを使ってマウントして、Windows上でソースを書いてエミュレータでコンパイルしています。

資料集めですが、X68000でC言語による開発といえば、C MagazineでX68000のGCC言語でゲームを作る連載記事があったことを思い出しました。たしか、その連載をまとめたような本が出ていたような気がしたので検索して「GCCによるX680x0ゲームプログラミング」という書籍にたどり着き、さっそくAmazonで注文しました。書籍代は1円で送料の方が高くなるというよくあるAmazonっぽい本の買い方です。

その他は、昔から持っていた「INSIDE X68000」と「プログラマーのためのX68000環境ハンドブック」、それと、「ぷにぐらまーずまにゅある」を参考にさせてもらいました。

開発環境を整えながら、タイニーゼビウスのグラフィックデータとマップデータの解析を進めたのですが、ここでいきなり誤算が発生しました。タイニーゼビウスのプログラム解析作業が楽しくなってしまったのです。マップデータの展開ルーチンを読むにはスクロール処理や画像データの転送処理なども理解しなければならなかったのですが、その延長で他の処理も読みたくなり、結果的に、逆アセンブルした全プログラムを読み終えてしまいました。

当初の目的から外れた副産物であるタイニーゼビウスの解析結果は、@Hashiさんが執筆されているPC-6001の同人誌、PC6000NOTE No.5に収録されています。タイニーゼビウスの処理内容や様々な疑問点への解答など、一通り網羅しています。
現時点では通販はされていませんが、定期的にコミケやゲームレジェンドなどのイベントでTinyProjectというサークルとして頒布されています。→2015年にWebで公開しました。タイニーゼビウス 完全解析&解説

PC6000NOTE 同人誌

どう移植するか

タイニーゼビウス解析した結果としては、X68000への完全移植は無茶な課題だなと思いました。一般論というか常識として、PC-6001とX68000の大雑把な意味でのスペック比較はPC-6001 >> 越えられない壁 >> X68000なのですが、まぁ、そのへんの事はひとまず脇に置いておくとして、完全移植が難しい理由の一つが、PC-6001のタイニーゼビウスは同期を取らずに全力で動作しているという点です。

同期というのはテレビの垂直同期とか音楽の再生時間などですが、そういったものに依存せずに背景のスクロールやキャラクタの移動処理を常に全力で行っています。ですので、表示するキャラクタの増減、つまり処理量によってゲームの進行速度や音の再生速度が微妙に変化しているのです。これを再現するにはZ80のクロック数やPC-6001の各種割り込みタイミングを考えないといけなくなるのですが、こうなるとX68000上で動作するPC-6001エミュレータを作った方が手っ取り早くなってきます。ただ、X68000にはそこまでのCPUパワーはありません。コードコンバートしてクロック数を数えながら調整して動かすという方法もありますが、、その労力に見合わないネタ企画なので、雰囲気が似てれば細かいところはいいやと早々に割り切りました。

スプライトとBGを試す

X68000の特徴の一つはスプライトです。家庭用向けのパソコンにスプライトを搭載しているというのは今からみても尖った仕様ですね。シャープやるね!

ゲーム機ではなく、16bitどころか32Bitといわれてもおかしくない高価なパソコンに搭載されているスプライト機能ですから、タイニーゼビウスのキャラクタならゴッソリとキャラ定義できる、と思っていたのですが・・・X68000のスプライトって
定義できる数が足りない・・・なんてこと・・・。こんなんだっけ?
特にBG面への割当数制限が厳しいです。タイニーゼビウスのキャラクタ数くらいなら余裕と思っていたのに。
これなら、スプライトを使わないでグラフィック面に全部描画してもいいんじゃないかなーと思いました。処理速度は間に合いそうですし。
でも、せっかくのX68000のゲームでスプライトを使わないのも残念すぎるので、キャラクタ管理をするということで。XSPとかのスプライトドライバを使うことも考えましたが、そこまでじゃないかなと思ったので、それなりに自前で管理します。

画面モードの話

タイニーゼビウスの画面モードは256×192です。VRAM上のドット数は128×96なのですが、表示する時に拡大されます。
X68000でスプライトが扱える画面モードは256×256か512×512で、PC-6001横方向の解像度を収めるには512×512ということになるのですが、このモードだとドットが細かすぎるので、裏技的な384×256モードに設定します。この辺のCRTC設定値とかはネット上の資料がほとんどなかったのですが、X68000programing
というページに書かれていて助かりました。ありがたや。

CRTC周りの設定はアセンブラで記述して、ゲーム本体のC言語のプログラムとリンクしたかったのですが、えっと、C言語とアセンブラのコード呼び出しってどうやったっけ?というレベルから思い出しプログラミングです。最近では、アセンブラ混じりのC言語を使う機会はないのでしょうがないよね。

久々のC言語

マップなどのデータを外部ファイルに持ち、それらのファイルをメモリに読み込むのにfread()とかmalloc()といったCのライブラリを使う事には多少の抵抗がありました。というのも、昔、X68000のプログラムを書いていた頃はアセンブラを使っていて、DOS CALLかIOCS CALLが基本だったので、メモリや処理速度にオーバーヘッドのあるライブラリを使うのはやだなぁと。あと、当時はGCCのコンパイル速度が遅くて、X68000ではC言語自体が使いにくいなぁと。
今ではエミュレータのメモリを12M一杯まで載せて、MPU速度を無制限ぶんぶん回せばあっという間にコンパイルできちゃうのでラクラクです。

それにしても、平成が20年も過ぎるとさすがにC言語でmalloc()してメモリ確保なんていうプログラムを書く機会はほぼないので、懐かしさと自前でメモリ管理をする不安感とで不思議な感じがしました。

BG面を表示する

X68000の仕様を確かめつつテストプログラムを書いて、背景の表示とスクロール処理ができました。

capture0

楽しくなってきた!

グラフィック面を調べる

タイニーゼビウスの背景はBG面に描画しますが、タイニーゼビウスはX68000の384×256ドット上の320×192分しか使いません。BG面をスクロールさせる時に画面書き換えの一部が見えてしまうので、BG面の上にグラフィック面を乗せてマスクします。

X68000のグラフィックモードは512×512ドットの画面サイズだと65535色1面か256色2面か16色4面が使えます。今回は16色4面モードにして、そのうちのグラフィック1枚だけを使います。X68000はVRAMが512KByteもあるのに、今回は384×256を4bitカラーで使うわけですから使用するVRAMは48KByteです。なんというもったいなさ!余ったVRAMを作業用メモリとしても使えるのがX68000の使い勝手のいいところです。

しかし、PCGを使う場合は定義用のメモリが足りなくて困るのに、グラフィックでは余るんですよね。妙なバランスだなーと思いますが、メモリをやりくりする楽しさはあります。これがギガ単位のVRAMになるとノーミソ内だけでどうこうするっていうレベルではないですね。

それはともかく、このマスクを描画するために単純にVRAMを青色の単色で埋めてるわけですが、遅い・・・目に見えて遅いのです。なんかこう、BASICのPAINT文で画面を塗りつぶしてるかのような。単純にC言語のfor()で回して処理しているからしょうがないのかもしれません。ここで初めてgccの最適化オプションを有効にしたら、ちょっとはマシになりました。X68000にはVRAMの高速クリア機能とかあったような気がしますが使ってません。

capture01

画面は整ってきたけど、余白が多くてちょっと寂しい感じ。実際のPC-6001では余白部分の色は青ではなく緑っぽい色です。目視で描画ミスを見つけやすくするために開発中ではゲーム画面で使われていない色にしてあります。

スプライトの表示とキーボード&スティック入力

ここまで来たら、次はソルバルウを動かしたくなりますから、スプライトの表示とキーボードからの入力処理を実装しました。

capture02

これまでの準備期間に比べたら実にアッサリと実装できてしまったので拍子抜けです。キーボード周りはもう少し厳密に処理しないといけないかなと思う箇所もあります。例えば、X68000では、OPT.2キーを押しながら何かしらの別のキーを押すと専用テレビをコントロールすることが出来るので、その辺の除外処理を考慮しなければなりません。こういう細かいところは最後の段階でまとめて実装します(こういう作業が積もりすぎるとハマるんですが)。

PCGを入れ替える

この後は特に問題も無く実装作業が続きました。ちょっとだけ悩んだのが、やはりPCG定義数の少なさです。

タイニーゼビウスに出現するキャラクタで最大のものはアンドアジェネシスで、16×16ドットのパターンが縦横に6個で36個のキャラクタデータになります。タイニーゼビウスのアンドアジェネシスはファミコン版と違い、アーケード版準拠で背景と別れていて浮遊しています。
また、X68000の正方形ドットモードではBG面を1枚しか持てず、そのBG面は背景に使っています。となると、アンドアジェネシスはスプライトか、グラフィックか、テキスト面(X68000のテキスト面は16色限定でグラフィック面と同じように扱えます)のいずれかで描き、BG面の上にのせる必要があります。
グラフィック面は16色モードであれば4枚持てるので、マスク用の画像面とは別にアンドア専用に割り当てることもできるのですが、重ね合わせの問題があります。というのも、BG面の上にスプライト面があり、その上にグラフィック面という重ね合わせ順では、アンドアジェネシスをグラフィック面に書いてしまうと、アンドアジェネシスから発射されるスパリオがアンドアの下に隠れてしまいます。
となると、アンドアジェネシスの上に表示されるものをグラフィック面に描くことになりますが、まぁ面倒かなと。まだテキスト面が余っていますが、それはもっと面倒かなと。スプライトを使った方が断然楽なのです。

スプライトの表示数は問題ありません。X68000では最大128個のスプライトを表示できて、ソルバルウ、ザッパーが3発、敵キャラが最大で5機、スパリオが5発、バキュラが13枚程度としても、アンドアジェネシスに36個分のスプライトを使ってもまだまだ余裕があります。
その気になれば、「無理だ、こんなに表示できるわけがない!!」だって出来ます。

ただ、そのキャラクタ定義数の上限が128個で、トーロイドやらタルケンやら背景面のパーツやらで
かなりギリギリなのです。幸い、タイニーゼビウスでは敵キャラは画面上に1種類しか表示されないので(バキュラは別)、その都度、キャラクタ定義をし直せば(ゲーム中に差し替えれば)よさそうです。
このやり方の不安点は、アンドアジェネシスのキャラクタデータ36パターンを定義し直した際に処理落ちするのではないかということした。キャラクタデータの差し替えはテレビの描画タイミングを避けなければならず、その処理時間はあまり多くはありません。1キャラあたり128Byteで36キャラで4608Byteを転送しきれるかどうか実際に試してみたところ、最初に作成したプログラムではみごとに処理落ちして画面がちらついてしまいました。
めんどくさがらずにデータ構造を見直して転送方法も書き直したら若干マシになりましたが、それでも10MHzのX68000だと若干ですが画面がちらついてしまいます。まだまだX68000テクニックが足りてないのですが、そもそも、もうちょっとX68000のキャラクタ定義数が多かったらよかったのになーとは思います。

andor

音を出すよ

タイニーゼビウスの音の出し方は大きく分けて2種類あります。一つはBASICのPLAY文を使った曲の演奏で、もう一つがPC-6001に搭載されているPSG音源を直接操作した効果音です。BASICのPLAY文を使うといっても、タイニーゼビウスのプログラムはオールマシン語で、BASICのPLAY文の内部ルーチンをマシン語から呼び出して実行するという仕組みになっています。
PLAY文のデータはBASICからPLAY文を実行する時と同じものでMMLの記述形式になっています。PLAY”cdefgab”みたいなBASIC文法の引数そのままです。

X68000で曲を演奏するにあたっては、新たにミュージックドライバを作るのも面倒な話なので、既存のドライバで使い勝手のよさそうなものを調べてみました。

ZMUSICはドライバ自体のファイルサイズが大きくて重そうな印象が(最初頃のバージョンだけかも)。
MXDRVはお手軽そうですがX68000の音楽ドライバとしては初期のものなので、この際だから、新しいドライバがいいなーと探してみたところ、MCDRVが技術資料と一緒になって配布されていたので、MCDRVを使う事にしました。MCDRVはライセンス上の制限が非常にゆるかったというのもあります。もっとも移植したタイニーゼビウス自体を配布できませんが。

PC-6001のPLAY文の曲データをMCDRVのMMLに書き直すだけですから作業は簡単そうです。FM音源の音色をどうするかは効果音の出し方と一緒に調べることにしました。

PC-6001のPSGを直接操作して効果音を出す方法をX68000で再現するにあたって、X68000に搭載されている音源IC YM2151について調べたのですが、いやまぁこれがよくわからないのです。ネットにまとまった資料がないのですよ。アルゴリズム(こういう図)に辿り着くのも一苦労で。あるところにはあるというか、それこそ本家YAMAHAにFM音源の詳しい解説ページがあるという事をずいぶん後になって知りました。Google検索さんがんばれ。

結局のところ、YM2151については書籍のinside X68000の資料が一番充実してました。著者の桒野さんにはぜひ、outside X68000と共に電子書籍化して頂きたいです。

でも、資料を集めて読み進めてわかったのですが、YM2151の詳細機能は原則非公開なのですね。それで実際にYM2151のパラメータ(レジスタ)をいじってみたのですが、もしかしてYM2151って任意周波数の矩形波やら三角波を出せない・・・?ということに気がつきました(いまさら)。YM2151はなんでもかんでもサイン波で出すらしく、PSGみたいな矩形波三角波を直接出すことは出来ないようです。使い勝手悪し!やっぱPSG最高だな!
矩形波はサイン波の合成波で表せるじゃん・・・?とか考えましたが、面倒すぎるのでやめました。断続的にキーオン/オフを繰り返して矩形波を作るとか出来そうなんですが。あ、そういえばS44PLAYとかありましたね。

いっそのこと、効果音はすべてADPCMでいいんじゃね?と思ったのですが、とにかくPSG音を再現出来なくても雰囲気的に似た音が出ればいいという事にしました。YM2151はすばらしい音源ですが、自分の力量が足りないのですはい。なんというか、個人的にはX68000のジョイスティックポートに接続するAY3-8910ボードでも作った方がよっぽど楽だよ!とか思ったり。

音楽ドライバMCDRVの制御はC言語ではなくアセンブラで記述しています。68000アセンブラは10年以上使っていなくて、lea.lとmove.lとpea.lとか混乱もしましたが、書き始めると結構スラスラと命令が出てくるものですね。
ここでつまづいたのは、C言語からアセンブラへのデータの引き渡しとその逆のやり方です。
C言語のプログラムとアセンブラの組み合わせをするには、どういうやり取りが必要なのか忘れちゃってました。PlayStation2やPICやAVRの開発だとC言語&アセンブラという組み合わせをやったことがあるし、ネットで資料を探すと出て来るのですが、68000上でのやり方は資料が見当たらなくて。レジスタ引き渡しとスタック渡しの違いってなんだっけ。
これは探すよりも自分で調べた方が早いかなと思ったので、関数呼び出しをする単純なC言語のプログラムを記述しコンパイルして完成した実行ファイルを逆アセンブルしてパラメータのやり取りを調べました。
アセブラからC言語への戻り値はd0.l、その逆はスタックに積んでパラメータを受け取るみたいでいいようです。C言語からアセンブラに引き渡すパラメータ数が少ない場合はレジスタ経由でも渡せたような気がしたのですが、スタックで済むならそれでいいかなと。
アセンブラ側ではd0以外のすべてのレジスタを保持する為に、movemでレジスタをスタックに一括待避するのですが、これをやると引数格納先のアドレスがずれるんですけど、これってどうやって解決するのがスマートなのかわかってません。link/unlinkとかだっけ?

こういうC言語とアセンブラを組み合わせる作業をしてると、プログラムを書くということは、CPUのプリミティブな命令を実行する事なのだというのがよく見えてきます。C言語は古い言語で、私も普段はPHP、ActionScript、C#などを使ってゆるーくプログラムを書く事しかないのですが、低レベル言語にはそれはそれでコンピュータを直接触る楽しさがあると思います。仕事ではやりたくないですけど。

さて、これでビックリするほどあっさり曲が流れました。まずなにより、MCDRVの作者様に大感謝ですが、疑問点がいくつか。

曲の無限再生の方法がわかりませんでした。もしかしてできないのかな?ゲーム中のBGMを延々と流したい場合ですね。普通のゲームであれば、1曲が5分くらいで1面の長さが1時間くらいかかるゲームだとしても(グラディウスVとかそんなん?)、12回ループさせれば済みます。MCDRVでも最大で255回までループできるので、RPGで寝落ちしてもまぁ一晩くらい同じ曲をほぼ無限に再生させる事はできると思います。
ただ、タイニーゼビウスのBGM(ブーンっていう音)では、単発の短い音(1秒くらい)が延々と繰り返されるので255回じゃ足りないのです。
今回は、単発音をずらずらっと並べておいて、さらにそれをループさせるという方法で回避しました。なので、70分くらい死なずに遊んでいると、255回ループしてBGMが途切れます。短音だと288バイトの曲ファイルが、この方法だと2キロバイトにもなってしまってカッコワルイのですけど、いい解決方法が思いつきませんでした。
また、MCDRVには曲の終了などのタイミングでイベントが発生するので、それを利用する方法も試してみたのですけど、イベント発生時に呼び出される処理中に曲の再生を実行すると、さらにイベント呼び出しが発生して…と無限ループにおちいるみたいでうまくいきませんでした。

あと、mml変換をするmcc.xは曲の長さが70分を越えると総演奏時間が0秒に戻ってしまうとか、MAコマンドのエラーメッセージがMPと混ざってるとか振幅パラメータがマニュアルと違うとかあるのですが、1998年で更新が止まっているソフトの不具合報告を作者様にしても困ってしまうでしょうから、ここに止めておく話ということで。

で、結局、音周りはあまり時間をかけることが出来ませんでした。
特に、タイニーゼビウスではノイズ音を多用しているのですが、YM2151ではノイズが1つしかないので、アンドア出現時のノイズ音とブラスターのノイズ音が重なると片方が消えてしまって、これはイカンということで、結局、ブラスターの着弾音にはADPCMを使う事にしました。

音の出し方を試行錯誤しつつキャラを表示させたりして息抜き。

SOL

タイニーゼビウスのソルは勝手に生えてきます。

bacura

タイニーゼビウスのバキュラとグロブダはズッ友。

余白を活かす

PC-6001の実機画面では、上下左右に色の付いた余白が出来ます。PC-6001初代機のモード3では
緑か白、PC-6001mkII以降では黒色で塗りつぶされます。この塗りつぶし処理はVDG(VDP)が自動的に行います。

X68000の画面にPC-6001の画面を再現するとなると、同じように塗りつぶし処理を記述することになるのですが、言い換えると何を書いてもよいということになります。プログラムを書き始めた頃は、余白部分にスコアや残機を表示しようかなーと考えていたのですが、タイニーゼビウスでは、ゲーム開始前に軽快な音楽と共にスコアと残機が表示されるので、

intro

この上にスコアされたら妙です。だったらゲーム開始前画面の表示内容を変えてもよかったのですが、この手の改変作業を始めると、オリジナルを出来るだけ忠実に再現するのとは別のものになってしまいます。その辺は自重して元のゲームのシステムには手を加えない事にしました。

ただ、画面のどこかにPC-6001の文字を常に表示しようと思っていたので、

ILOVENEC6001

こんな感じに右下にゼビウスフォントで文字を描いてみました。オリジナルのゼビウスフォントってハイフン(マイナス)の文字がないので、自作(というほどの文字じゃないけど)しています。NECの文字が赤いのは経営が赤字だからとかでなくて、昔のNECのロゴは赤かったからですヨ!

もっとデカデカと左右に

デカモジ

PC-6001と表示してPC-6001を主張することも考えたのですが、ちょっと品がなさすぎなので自重しました。

ゼビウスフォントの表示はグラフィックRAMに書き込んでいます。グラフィックRAMを操作していて気がついたのですが、キャプチャ画面をよく見ると、BG/スプライト面の上に重ねているグラフィック面のマスクの最下段(=ゲーム画面の最下段)に黒いラインが見えていますね。最初は座標計算を間違えたのかなと思ったのですが、よくよく調べていると、グラフィック面のY位置が1ピクセルだけ上にずれていました。つまり、最上段が画面外にあります。386×256モードの画面設定で何かミスってるのか、それともそういうハード仕様なのかわかりません。XM6gでは発生しているのですが、WinX68K高速版では起きてません。実機だと最初は発生していなかったのですが、なぜか途中から発生するようになってしまいました、謎すぎる。ちゃんと調べてないのでわかりません。

エミュレータの妙な挙動といえば、XM6gで129個目以上のスプライトレジスタに書き込みをするとエミュレータ自体がフリーズします。メモリを壊してるのかな?Windowsのタスクマネージャから強制的に停止させてエミュレータを再起動したらディスクイメージが壊れてた、ということが何度かありました。

ただ、こういう細かい不具合を抜きにしてもXM6gがなかったら移植作業は進まなかったのでエミュレータ作者様には本当に感謝しています。贅沢を言えば、「MPUだけ最高速で動かす」をショートカットキーで切り換えられるといいなーと思いました。コンパイル時だけ高速化するのに便利なので。

初めての実機

開発作業の区切りのいいところで実機で実行してみました。さぁどうだ!

fault

なんたる無慈悲!エミュレータでは動くのに実機では動かないってデバッグが大変なパターンじゃないですかー。
セグメンテーションフォルトってどこのUNIXか!みたいな気がしますが、教えてくれるだけ親切ですね。GCCを使ってなかったら白窓バスエラーが表示されてたのかな。

この原因を調べる前に、XM6gだけでなくWinX68k高速版でも試してみたのですが、どちらのエミュレータでも問題なく動いたので、実機向けにデバッグ用のコードを埋め込んだプログラムを作って原因を突き止めました。
開発はWindows機上のX68000エミュレータで、エミュレータ内で生成されたファイルはWindows上のエクスプローラからもアクセスできるのですが、それを実機に持って行くのには実メディアを使ってのやり取りをしています。もうひたすら行ったり来たりの繰り返しでした。この辺、簡単にやり取りできる方法があればいいのですが、Nereidでnfsとかが簡単なのかな、誰かNereidください。

起動しない原因ですが、Human68K+command.x起動時の初期画面モードではスプライトコントローラのバスが切り離されているらしく、この状態ではスプライトコントローラ(シンシアさん?)にアクセス出来ないというものでした。もしかしたら十数年以上前に同じ経験をした経験があったのか、なんとなく怪しいところが直感的に閃いたので、問題箇所の特定にはそれほど時間がかかりませんでした。
メディアのコピーや実機X68000の再起動の待ち時間にiPadでツイッターを見始めて気がついたら時間が経過してたりとか、そっちの方がよっぽど時間泥棒。

画面周りの設定を済ませてからスプライトの定義を行うようにプログラムを書き換えたところ、起動時のエラーを切り抜けて無事にタイトル画面が出・・・

white

タイトルが真っ白に化けてるしー!まったくもってままならぬ!

この現象はXM6gでは出なかったのですが、WinX68k高速版では

bug

見事に色化けしたので、エミュレータ上で原因を追える分、原因追及作業はしやすかったのですが、問題解決は先のバスエラー以上に面倒でした。

色バケした色をみると、テキストプレーンに設定されてる色だとわかるので、これはテキストとBGとで共有しているパレット番号0番を使ってるということであって、つまるところ、パレット設定がうまくいってない、と気がつきました。
どうやら、スプライトコントローラには8ビット単位でアクセスしちゃダメというのが理由みたいです、たぶん。プログラムではC言語の共用体を使ってスプライトコントローラにパラメータを設定してるのですが、スプライトのパレットとキャラコードは同じスプライトレジスタに割り当てられていて、そこを8Bit単位で別々に更新しようとして失敗していたみたいです。スプライトコントローラに8ビットで書き込むと上位バイトが00hの16Bit値として書き込まれるのかな。

ファイルサイズ

ソースは混じりっけ無しの純粋C言語で4700行ほどでした。一通り実機で動くようになった状態での実行ファイルのファイルサイズは約55キロバイトです。曲データも内部に持っているのでちょっと大きめです。gccのデバッグ情報やシンボル情報は削ってあります。キャラデータやマップデータなどの外部ファイルは圧縮してなくてトータルで50キロバイトほどになりました。X68Kにしては少ないんだか多いんだかビミョーな。

source

libiocsをリンクしていますが、B_SUPER()とBITSNS()くらいしか使っていないので、これをインラインアセンブラに置き換えればlibiocsを使わずに済んだかも。同様にlibdosはデバッグとロードエラー時のprintf()だけしか使ってないので、これは完全に無くすことが出来ます。数値演算周りが手抜きなので、float2.xが必要っぽいです。
まだまだファイルサイズを縮める余地はあるのですが、そこにこだわる理由はないのでいいかなと。

当初は、プログラム本体のロード時やデータファイルの読み込み時にピーガッガーというBGMを流すつもりでいました。ただ、実機のフロッピーベースで動作させてみたところ、ロード時間が思っていたよりも短かったので、わざわざピーガッガーを聞くための待ち時間を組み込むのも本末転倒なのでやめました。あと、テープのロード音って、分かる人が聴くと『なつかしい!』と思ってもらえるのですが、それを知らないとテープのロード音ってタダのノイズでしかなくて、ADPCMが壊れたようにしか聞こえないかなと。プログラムがバグって変な音がします!ってアンケートハガキを送られても困ります。

あと、やりたかったけど技術的に出来なかったのが、Human68K無しの起動です。モトスとか超人みたいにIPLからゲームが起動しちゃうようなX68000の電源を入れた段階からまるでPC-6001が動いているかのように振る舞う、なんて事をしたかったのですが、どうやったらいいのかさっぱり。
たぶん、X68000のIPLはTrack0Sector1の512Byteを既定のアドレスに読み込むとかなんとかしてて、そこからディスク上のZ形式で作ったバイナリプログラムをIOCSを使って読み出して実行すればいいのかなーとか想像してるのですが、周辺回路の初期化とかがわからないので手を付けられませんでした、残念。実現するには音源ドライバも自作しないといけないですしね。

パッケージとフロッピーラベル

テキトーに。緑色が薄かったというか、うちのプリンタはカラーマッチングできてないのがよくわかりました。今年のエイプリルフールネタのゲームボーイツイッターに比べたら雑にちゃっちゃと作りました。

パッケージとディスク

完成したの?

現時点で未実装な箇所はエリア5以降のデータの入力と動作確認くらいで、プログラムはほぼ完成状態です。COPYキーやらインタラプトキー処理やら細かい未実装はありますが。

こうしてプログラムをちゃんと作っているのでフェイクではないです。ただ、著作権を考慮してプログラムの配布は絶対にしないと決めているので、それ故にフェイクプログラムだと言われても配布できない以上は証明できないですし、未完成でいいかどうかは自分の気持ちの問題だけですね。

何かしらのイベントであれば、たぶん、著作権法第38条の範囲で上映プレイする事はできるのかもしれませんが、そういう話が出たらPC-6001実機とデータレコーダとタイニーゼビウスのテープを持って行くと思います、P6erとして!

まとめ

移植作業終盤の実機バグ取りは大変でしたが、おおむね楽しかったです。

「最近、X68000界って何か話題あったっけ?」→「タイニーゼビウスが動いてるらしいぜ」→「PC-6001か!」という流れでPC-6001の事を思い出してくれる人が増えてくれるといいなと思います。

MAP-1010について補足

2013年5月31日

MAP先生ことMAP-1010についてのメモ書きです。

周辺機器一覧(実際に発売されていたかどうかは不明)

型番 機器名
MAP-1020 プリンター
MAP-1030 拡張インタフェースボード / ボードを装着するとMAP-1030 BASICが起動
MAP-1040 モニターCRT
MAP-1060 フロッピーディスク / 5inch2台 640KBだそうですが1台320KBなのか1台で640KBなのか不明
MAP-1070 デジタイザー / 用MAP-1030 / ソフトはMAP-1030に組込みされている

MAP-1030には、サウンドジェネレーター、シリアルインタフェース(RS-232C)、ジョイスティックインタフェースがあり、ジョイスティックとデジタイザ(MAP-1070)が接続できるようになっています。
型番の並びでみると1050が抜けてるのですが、存在していたかどうかわかりません。

MAP-1010の書籍は今のところ3冊ほど確認しています。

  • 株式会社文理 畑太郎著 1983年4月5日第1版第1刷 「基本プログラミングガイド すぐに使えるBASIC」 2300円 / 命令のリファレンスや本体パネルの操作方法、マイクを使った2トラックテープの作成方法、豊富なプログラム集と、内容豊富な本です
  • 株式会社文理監修:國澤清典 文:伊藤一郎 イラスト:黒須和清 1983年7月25日第1刷「プログラミング入門 マッピーと楽しいなかまたちの おもしろマイコン・ブック」/ BASICの入門書です。MAP-1010の基本的な操作方法について書かれていますが、汎用的なBASICの本です
  • 株式会社文理編著者:國澤清典 1983年7月20日初版第1刷 「プログラミングガイド プログラミング ちょっとテクニック39」 800円 / 様々な目的ごとに、BASICを使った丁寧な説明とサンプルプログラムが掲載されています。PC-6001やPHC-25などの互換BASICでも動くはずです。最後の方に少しだけマシン語の事に触れています

マッピーといってもマイクロマウスではありませんヨ。

おもしろマイコン・ブック