X1turbo Agency

X1turbo Agency ブログ

8bitコンピュータ X1turboの探求サイト

X1turbo Agency

X1turbo Newグラディウス デモ

X1turboの性能探求のため、グラディウスのデモを作ってみました。
今の時代になってなんでそんなものを作ろうと思ったのか?

理由は、X1は当時のファミコンと比べて、どのくらいリアルタイムゲームに向いていた?いなかった?が知りたいから。
ハードウェアでは歴然とした差があるのは判っているけど、それをどのぐらいソフトウェアでカバーできるのか?

当時のゲームを題材にしてそれを探求してみます。
テーマにはシューティングゲームの「グラディウス」を選んでみました。

X1turbo New グラディウス デモ

今後何回かに分けて、内部で実装した技術についてブログにアップしてみます。
動画をキャプチャしてニコニコ動画Youtubeに上げてみました。

www.nicovideo.jp

www.youtube.com

「マンハッタン・レクイエム」のフォントについて

f:id:x1turbo_agency:20180822004757p:plain

最近フォントづいているので、またフォントの話を書いてみる。

マンハッタン・レクイエム

大好きなゲームの一つに、「マンハッタン・レクイエム」があります。
当時、完成度の高さに夢中になってプレイしました。
印象的なBGM、魅力的なストーリー、8色で描かれたリアルなマンハッタンのグラフィックは本当に素晴らしい。
今でもサウンドトラックを聞いています。
(今にして思えば、容疑者が多すぎるような気もするが)

フォント

中でもゲーム中に登場するフォントが素晴らしい。
640x200の解像度で、16x16の文字フォントを書くと縦に伸びてしまって美しくない。
かと言って、16x8にしてしまうと潰れてしまって読みづらい。

その後、「マンハッタンレクイエム」の内部を解析した事があるのですが、
「マンハッタンレクイエム」の文字フォントは、16x10で作られていました。
ゲーム中は文字フォントが480フォント使われていることや、
タイトルデモでは別の文字セットになっている事が判りました。

X1にかかわらず640x200の解像度は、4:3のTVに表示するとドットがかなり縦長になります。
ディティールを持たせながら、縦に伸びすぎない微妙な所が素晴らしい。

f:id:x1turbo_agency:20180822004820p:plain

これはフォントのデータの一部分だけを画像化したものです。
ゲームの進行に合わせてデータ化したんでしょうね。

冒頭の画像は背景です。サイズは432x156。 この画像はゲーム中のキャプチャではなくて、画像を解析したものです。 内部では圧縮してデータ化されています。

色々な機種で発売!

X1での実装はメモリが厳しかったのか、かなりアクロバティックな所もありました。

「マンハッタン・レクイエム」はX1版,PC-88版,FM-7版,MSX2版,PC-98版を持っています。
Windows版やNintendoDS版も購入しました。

「マンハッタン・レクイエム」についてはまた書くかも。

漢字ROMのナゾにせまる

漢字ROMのナゾ

今回、X1turbo Remote Monitorで漢字ROMの読出しを対応しました。
漢字ROMについては、以前からナゾだったことがあります。

X1truboの漢字ROMは、1文字に付き32byte使用しています。
第1,2水準の漢字ROMアドレス領域を計算するとそれぞれ4096文字です。
8192文字分アサインがあるわけですが、第1,2水準はそれだけ文字があるわけではないです。

そうすると、そのスキマや使われていない文字には一体何が入っているのか?
普通に考えれば、なんにもない空白でも入っているのかと思います。
もしくは、CZ-8FB02でよく登場する '※' が入っているとか…?
そこがずっと気になっていたので調べてみました。

漢字ROMダンプ

次の画像は、漢字ROM並びでフォントを読出してそれを一部ビットマップ化したもの。
というわけで、使われていない領域は右側にドットを打った縦線が入っていました。
うーん、なぜだろう。なぜこの縦線にしたのだろうか…。

f:id:x1turbo_agency:20180715210022p:plain

SJISに変換した場合

そして、漢字ROM並びをSJIS並びにした場合の画像が以下になります。
漢字ROM→SJIS変換は自前で用意しました。
未定義の領域では、先ほどの縦棒が格納されています。

f:id:x1turbo_agency:20180715211620p:plain

対して、Windows上でフォントデータを自動作成したファイルの中身だと以下になります。
未定義領域ではブランクになっていますね。

f:id:x1turbo_agency:20180715211646p:plain

そして、X1turbo Remote Monitorで出力している内容は以下になります。
未定義になっている文字は、'・' と縦棒が入っています。
これは、.Net FrameworkのEncodingで変換すると未定義には'・'が割り当てられるためです。

f:id:x1turbo_agency:20180715211635p:plain

これらのフォントを見比べると、
X1turboフォントには、Windowsでは標準で入っている '⇔' や罫線などは入っていませんね。
機種依存文字ってことなんですが、意外とありそうなものがない事に時代を感じますね。
これらの文字はフォントファイルによってはエミュレータでは表示されますが実機では表示されません。

更に機種依存

X1turboシリーズの中でも、漢字ROMに第1水準しか載っていない機種もあるようですね。

以上、ナゾ解明!

X1turbo Remote Monitor v1.1.5リリース

X1turbo Remote Monitor v1.1.5リリース

X1turbo Remote Monitor v1.1.5 をリリースしました。
詳しくはX1turbo Remote Monitorのページを見てください。

ずっと欲しかった、ROM読出しの機能を追加しました。
フォント (8x8, 8x16), 漢字フォント(16x16), BIOS ROM

まずはこれがないとエミュレータ生活は始まらない!

それぞれのエミュレータでは、フォントファイルが無い時は、
Windowsフォントを使って自動的に用意する事が多いので、
それほど不便を感じることは少ないでしょうね。

でも、やっぱりフォントの印象は大きいのです。

スクリーンショット

  • フォント (8x8) やっぱりコレでないと。 f:id:x1turbo_agency:20180708013727p:plain

  • フォント (8x16) X1turboのハイレゾにハッとなったのはこの画面だ。 f:id:x1turbo_agency:20180708013738p:plain

ああ! せかいに エックスワンターボが よみがえる。
イースの じだいが よみがえる。
ゆうしゃよ! いまが たびたちの ときだ。

 ー イースI ロダの木のセリフから ー

X1 for ZAURUS

X1 for ZAURUS

2003年。スマートフォンが登場する以前にシャープから発売されたLinuxZaurusシリーズ。
その時に制作していたX1エミュレータ ''X1 for ZAURUS''。
ホームページ移動の問題から閉鎖する事になったけど、当時のページを少々掲載。

X1 for ZAURUS(SL-C700) -世界で一番小さいX1- (※ 2003年当時)

プログラミングの習作を兼ねて、X1エミュレータ for ZAURUS(SL-C700)を作ってみました。
解像度が VGAになったので、X1の画面が再現できるようになりました。
これで、ポケットの中にX1の世界が誕生する…!!

f:id:x1turbo_agency:20180624215922p:plain

更新履歴

日付 バージョン 内容
2003/6/29 Ver 1.5 漢字フォント関係を更新しました。
SJISやJIS並びではなくスピードを考えて、漢字ROM並びに変更しました。
またフォント作成関係がわかりにくかったのでWindows上から実行できる
フォント作成ツールを用意しました。
ファイル選択ダイアログをいじっている途中でハングしてしまうバグを修正しました。
2003/4/21 Ver 1.4 X1turboをサポート開始しました。Z80DMA,Z80CTCをサポートしました。
(turboのCTCのみです)
ポーズ機能をつけました。スクリーンショット取るときにやはりないと不便ですから。
ExKeyに CapsLockを付けました。
(イースIIでは、スピードアップに使われますからして…)
Optionに、X1turboかどうかのフラグを付けました。
デフォルトは、X1turboになっています。
キーボードのモードBもサポートしています。テンキーエミュレーションが
入っている時に反映されます。
以前入力できなかった、IPLのTOPのキー入力ができるようになりました。
2003/3/30 Ver 1.3 PSGサウンドの調整。音程がずれてました。
サンプリングレートを12500Hzにしたので少し軽くなったかも
フォント表示の横倍角を実装
ディスクのフォーマットに *.2Dを追加
特殊キーとしてファンクションキーカテゴリを追加
2003/3/16 Ver 1.2 PSGサウンドの再生を追加
d88ファイルのフォルダーを記憶するように修正
2003/3/11 Ver 1.1 ジョイスティックエミュレーションモードを追加
4MHzモードを追加
*.d88ファイルを開くときにファイルダイアログを追加
2003/03/xx Ver 1.0 とりあえず公開

スクリーンショット

スクリーンショットサンプルは、リバーヒルソフトの「マンハッタンレクイエム」と、
日本ファルコムの、「イース」です。どちらも私の大好きなゲームです。
X1turboエミュレーション用にスクリーンショットを追加しました。
X1turbo用に機能を追加してイース2が動作するようになりました。
しかし、画面描画時に音がブツ切れになる症状がひどくてブルーです。
また、オープニングになぜか青い画面が出ます。
(データ的には出るのであってるんですが)

動作機種

Linux ZAURUS (SL-C700)専用

インストール方法

パッケージをダウンロードして、ファイルメニューからクリックしてインストールしてください。
SDカードにもインストールできます。
X1用のBIOS ROMを、ipl_x1.bin (ファイル名が間違ってました)
X1用のフォントファイル(8x8)を、font8x8.binの名前で用意します。
X1turbo用のBIOS ROMを、ipl_x1t.binの名前で用意します。
ver1.4からはデフォルトがturbo起動なのでこちらが起動されます。
(x1起動にすると、ipl_x1.binが選択されます)
X1turbo用漢字フォントファイル(16x16)x1t_kanji.bin(x1kanji.binから変更しました)

漢字ROMは ver1.4では画面表示ができていませんが、フォントの読み出して文字の描画などに使用します。
並びはShift-JIS並びにしてください。将来的には高速化を考えて、漢字ROMアドレス並びが必要になります。
漢字ROMの吸出しは近いうちに手順やプログラムを紹介しようと思います。

Ver1.5でも漢字テキストはまだ実現していません。漢字ロム関係を先に入れてしまいます。
Windows上から実行できる漢字ロムデータ作成ツールをいっしょにアップします。
このツールで、フォント作成を行って、ファイルとして保存して利用できます。
高速化を考えて漢字ROMアドレス並びになっています。

起動方法

アプリケーションに追加されたアイコンをクリックして起動します。
その後、[OPTION]-[BIOS & FONT]を選んで、BIOSとFONTが入っているパスを指定します。
ここで指定されたROMは、コンフィグに保存され、次回起動時にも反映されます。
(コンフィグファイルは、/home/zaurus に zx1.cfgというファイルを作って保存されます)
(※ SDカードのLinuxからのパスは、/usr/mnt.rom/card/になります)
後は、.d88形式で用意したディスクイメージファイルを、[FDD]-[FDDSet]のファイルセレクタで選択します。

オプション

  • テンキージョイスティックエミュレーション ZAURUSはキーが少ないので、テンキー部分がありません。
    テンキーを使うゲームなどは困ってしまうので、オプションでテンキーエミュレーションを設定できます。
    矢印キーでテンキーの2,4,6,8の入力を置き換えます。
    Ver1.1以降からジョイスティックの入力エミュレーションを追加しました。(ジョイスティック1のみですが)
    割り当ては、以下のようになります。

    • 十字キー … カーソルキー
    • ボタンA … 'Z'
    • ボタンB … 'X'

また、そのままでは速すぎる場合があるので、4MHzモードを付けました。
(起動時は4MHzモードになっています)

  • サウンド PSG(AY-8910)の実装を行いました。
    色々と調整を行ってそれなりにスムースに音が出るようになりました。
    fMSXやM88のソースを参考にして、ZAURUS用にチューニングを行いました。

再生中にプチノイズが出ることが多かったですが、サウンドのPCMバッファを16分割にすることで回避できました。
波形合成自体はそれほど処理はかかっていませんが、PCM発声そのものに処理がかかっています。
PSG再生をONすると、4MHz制限を外してもあんまり速くならないですね…。

ダウンロード

現在はipkの配布は行っていません。

未サポート部分

まだ作りかけなので、あちこち実装していない機能があります。
PSG部分 (音が出ません) → やっと出るようになりました。
PCGの倍角表示や、点滅,反転。 → 横倍角は入るようになりました。
turbo部分 (X1のエミュレートなんで…) → ちょっとだけ入りました。
IPLのタイトル画面で、'F'のキーとかなぜか入らないです。 → 入るようになりました。
実行中に2Wayをビュースタイルにすると画面が崩れます。インプットスタイルで使ってください。
実行中にスクリーンセーバーが起動すると画面の表示がおかしくなります。

X1turbo Remote Monitor v1.1.3リリース

X1turbo Remote Monitor v1.1.3リリース

X1turbo Remote Monitor v1.1.3 をリリースしました。
詳しくはX1turbo Remote Monitorのページを見てください。

従来バージョンと比較して、ディスク読み取り時にデータ圧縮を行って高速化しました。
BASICのディスクなどはクラスタ単位で使われているため、スキマが多く高速化が期待できます。
単純なランレングス圧縮なので圧縮率はほどほどです。

f:id:x1turbo_agency:20180617020355p:plain

高速化について考察

実装するかは未定ですが、更なる高速化を考えてみます。

アイディア1 データ通信とディスク読出しの非同期化

現在は、WindowsPCから読み出しコマンドを送って、ディスク内容を返してくるまで
待っている状態です。なので、データを送っている最中に次のトラックを読みにいけば、
高速化できるはずです。計算してみると30%位は早くなりそうです。

アイディア2 データバッファを大き目に確保して一括読出し,転送

非同期化を行う前提として、読出した結果をストックする領域を増やせば
高速化できると思います。EMM,GRAM,バンクRAM…などを駆使すれば実現は可能ですが、
EMM,バンクRAMは持っている人に依存するので、GRAMを使った
高速化というのが実現度が高そうです。
96KB分のディスクを先行して読み込み、非同期でデータを転送していく感じです。
ディスクを読み込む方が早く、割とすぐ追いつかれてしまうので、意味ある?って感じですが。

ケースファン交換

ケースファン交換

X1turboZIIIのファンの音がうるさくなってきたので思い切って交換することにした。
使われていたファンは、SERVO Co.,Ltd. のDC軸流ファン PUDC12D4。
12V 80mmx25mm 風量 26CFM 騒音 23db。
現在でもまだシリーズは続いているらしい。

f:id:x1turbo_agency:20180610140220j:plain

交換品はオウルテック PCケース用ファン OWL-FY0825L
12V 80mmx25mm 1600rpm 風量 20.5CFM 騒音 20db

f:id:x1turbo_agency:20180610140238j:plain

ファンよりもコネクタが今のPCと全然違うのでなかなか見つからない。
色々探して基板コネクタで使えそうなものを見つけた。
con-702 2P コネクタ

f:id:x1turbo_agency:20180610140257j:plain

基本的には分解して、コネクタを付けて、ファンを交換するのみ。
心配していたコネクタも若干形状が違うものの、うまくコネクタにはまった。

f:id:x1turbo_agency:20180610140319j:plain f:id:x1turbo_agency:20180610140328j:plain f:id:x1turbo_agency:20180610140337j:plain

以前のブォーという音から、かなり静かになった。
まだまだハードウェアもいじりたいので、これで仕事がはかどる。

X1版 ドラゴンクエスト1

X1版 ドラゴンクエスト

1986年のあの日。
FC版ドラゴンクエスト1をプレイして、ああ、これが自分のマシンで動作したらどんな感じなんだろうか?
と思う人も多かったのではないでしょうか。

その熱気に当てられて作ったのが、X1版のドラゴンクエスト1。
プログラムよりもその素材(地形データ,絵素材,セリフ,BGM)を用意するのがはるかに大変でした。
BGMは友人に頼んで耳コピしてもらってたけど、とてもマネできないと思いました。
現在と違って楽譜も出回っていない頃だったので、とても大変でした。

途中で時間が無くなってしまって、完成しなかったんだけど、せっかくなので残しておく。

↓は動画を撮ってyoutube,ニコニコにアップしたもの。


【勝手に移植】ドラゴンクエスト1をSHARP X1に移植してみた

【勝手に移植】ドラゴンクエスト1をSHARP X1に移植してみた。 - ニコニコ動画

f:id:x1turbo_agency:20180603125128p:plain f:id:x1turbo_agency:20180603125149p:plain f:id:x1turbo_agency:20180603125159p:plain f:id:x1turbo_agency:20180603125211p:plain

映像表示について

X1の映像表示について

ご存じの通りX1/turboはデジタル/アナログRGB出力があり、アナログRGBの場合でも15KHz/24KHzの2種類がある。
純正ディスプレイ(CZ-600D)等であれば表示も可能だが、経年劣化もあり液晶ディスプレイの置き換えが必要になる。
2018年に発売されている液晶ディスプレイの多くは、15KHz,24KHzの表示に対応しておらず、
解像度 640x480以上の30KHzが中心になっている。

色々と試してみたが現在は電波新聞社のXPC-4を使用して液晶ディスプレイに表示している。
XPC-4はアナログRGBをダウン/アップスキャンしてS/コンポジット/D端子に出力できる変換装置。
X1(15/24KHz)や、D端子(コンポジット D2/D3/D4/D5 480p/525p/1080i)をDVI-Dやコンポジットに変換できる。

フレームバッファ内臓でアップスキャンとダウンスキャンのどちらにも対応している。
またファームウェアのバージョンアップで15KHzも対応しているので X1turboも対応できる。
コンポジット/S端子以外は大体変換して出力が可能なので、昔のPCとかD端子の家電とか色々接続できてとても便利。

設定はリモコン/本体で可能だが、たまに自動検出に失敗して表示が崩れる事がある。
その場合は背景色を青色等にして自動検出を行うと正常に表示されるようになる。

f:id:x1turbo_agency:20180527141756j:plain

X1turbo Remote Monitor

X1turbo Remote Monitorとは

X1turbo Remote Monitor は、X1turboとWindowsPCをシリアルケーブルで接続して制御を行うツールです。

X1turboでは RS232Cを使って通常9600Bpsで通信を行いますが、任意のボーレート設定が可能な
USBシリアル変換ケーブルを使用する事で9600Bps以上の速度で通信できます。

X1turbo Remote Monitor の特長

  • BASIC(CZ-8FB02/3)からのモニター起動
  • 起動ディスク作成
    • 以降は起動ディスクからモニターが起動できます。
    • S-OS U.C.様謹製 CZ-8EB4ブート作成
  • 最大62500Bpsでの通信設定が可能
  • フロッピーディスク(2D/2DD/2HD)の吸い出し
    • v1.1.3以降 データ圧縮による高速化
  • フロッピーディスク(2D/2DD/2HD)/EMMへの書き出し
    • 出力トラック指定可能 (v1.1.8以降)
    • EMM0(指定アドレスへの)の書込み (v1.1.8以降)
  • 実行ファイル指定 (v1.1.8以降)
    • 指定ファイル(.bin/.2D/.d88)をメインメモリに転送して実行可能。(v1.1.8)
  • メモリダンプ
  • ディスク読出し,通信時にデータ圧縮を行って転送時間を短縮。(v1.1.3以降)
  • ASCIIフォント,漢字フォント,BIOS ROMの読出し機能 (v1.1.5以降)
  • ディスクIDダンプ
  • 背景色変更

※ ディスク作成ができれば、X1側はキーボード操作を行わなくても済むようにしています。

スクリーンショット

X1turbo Remote Monitor のスクリーンショット

X1turbo Remote Monitor v1.2.1

ダウンロード・更新履歴

日付 バージョン ファイル
2022/12/18 Ver 1.2.2 x1_remote_monitor_v122.zip
・d88ファイルの種類によっては、読込時に例外が発生していたので対応を行いました。
2022/11/19 Ver 1.2.1 x1_remote_monitor_v121.zip
・FD書込み/FD読込みの安定性を向上と、書込み時のVerify機能を追加しました。
2022/10/22 Ver 1.2.0 x1_remote_monitor_v120.zip
・ディスク 2HD書込み時に77トラック以上のデータだとアプリケーションが落ちてしまっていたのを164トラックまで拡張しました。
2021/05/25 Ver 1.1.8 x1_remote_monitor_v118.zip
・ディスク書き出しにトラック指定を追加しました。
 プログラムを転送/実行機能を追加しました。
2019/07/28 Ver 1.1.6 x1_remote_monitor_v116.zip
・起動ディスク作成時に2HD版を指定できるようにしました。
 他機種作成用に 2HD形式のd88ファイルも同梱しました。
2018/07/07 Ver 1.1.5 x1_remote_monitor_v115.zip
・ROM読出し機能を追加しました。
 フォント(8x8,8x16,漢字),BIOSを読出してファイルに保存する事ができます。
 詳しい説明は「ROM読出し」を参照のこと。
2018/06/16 Ver 1.1.3 x1_remote_monitor_v113.zip
・ディスク読出し時、データ圧縮を行う事で高速化しました。
 25%程度速くなっているようですが、もちろんディスク内容に依ります。
2017/09/24 Ver 1.1.0 x1_remote_monitor_v110.zip
・読出し時にセクタエラー等が発生しても読出しを続行するように修正しました。
 (ディスクIDが読めないトラックがあった時は中止しています)
・ディスクID(CHRN)のダンプ機能を追加しました。
・背景色を黒/青から選択できるようにしました。主に画像調整用です。
・起動ディスクイメージに通常と最小の2種類を用意しました。
2016/05/15 Ver 1.0.3 x1_remote_monitor_v103.zip
・複数のシリアルポートが使用可能な場合に、指定と異なるポートを使用する不具合を修正しました。
・起動ディスクイメージを付属しました。
 ディスクイメージが作成可能なマシンがあれば、このファイルを使って起動ディスクを作成可能です。
・メモリダンプ時にアドレス表示を追加しました。
Windows7(32bit) , WindowsXP(32bit)の動作確認を行いました。
・初期D88ファイル(最大トラック数 160)の読み込みに対応しました。
2016/04/29 Ver 1.0.0 x1_remote_monitor_v100.zip
・公開バージョン

動作環境

  • WindowsPC

    • Microsoft Windows7/8.1 (64bit), XP (32bit)
    • .NET Framework 3.0以降

      • .NET Framework 3.0は必要であればインストールして下さい。
    • シリアルポート使用可能機種または、USBシリアル変換ケーブルを使用。

      • WindowsXPではオンボードのシリアル9Pでの動作チェックを行っています。
      • Windows7 はノートパソコンでのUSBシリアルでの動作チェックを行っています。
    • おススメ: USBシリアル変換ケーブル BUFFALO Avel SRC06-USB

  • X1turbo/II/III/Z/ZII/ZIII (使用アドレス SIO 1f90h-1f93h, CTC 1fa0h-1fa3h)

  • シリアルクロスケーブル

  • サンワサプライ KRS-L925-2K 等のインタリンクケーブルが最適ですが、
    オス/メスが逆なので、ジェンダーチェンジャを取り付けています。
    別ページでも書きましたがインタリンク対応ケーブルでない通常のクロスケーブルでも
    高速通信は成功していました。

内部でハードウェアフロー制御は入れてあるのですが、処理の前後にウェイトを入れている事もあって、
特段フロー制御は発生していないようです。

動作確認

使い方

インストール


zipファイルを展開し、フォルダを任意の場所に配置してください。
内部にある X1RemoteMonitor.exe を実行することで利用できます。
アンインストールする場合は、フォルダを削除して下さい。
レジストリは使用していません。

基本動作


  • 接続テスト Monitorにテストコマンドを送って、正常にコマンドがやりとりできるかどうかをチェックします。
  • ポート 通信を行うポート(COM1~COM10等)を指定します。
    シリアルポートを持っていないマシンではツール自体が使用できません。
  • ボーレート 9600(デフォルト)から、設定可能なボーレートに変更できます。
    Windows側でボーレートを設定すると、ボーレート変更コマンドをX1turbo Remote Monitor側に
    送信して、ボーレートを変更します。
    9600bps以外のボーレートは SRC06-USB 等の自由に速度が設定できるUSBシリアル変換ケーブルが必要です。
    現在こちらで確認が取れている最大ボーレートは、62500bps です。

v1.1.8以降では各コマンドの前後でボーレート設定を変更するように修正しました。
今までコマンドの途中でIPLリセットを掛けた場合など、Win側とX1turbo側との
ボーレートがずれると通信が正常に行われなくなっていました。
こちらを改善するために、コマンドの先頭でボーレート変更を行い、コマンドが
終了した時点で 9600bpsに戻すように修正しました。

セットアップ


[1] WindowsPCとX1turboをRS232Cシリアルケーブルで接続して下さい。

  • WindowsPC側にRS232Cポートがある場合
    • Win ⇔ X1turbo  シリアルクロスケーブルで接続。
  • WindowsPC側にRS232Cポートが無い場合 or 9600bps以上の高速通信を行いたい場合
    • Win ⇔ USB-シリアル変換 ⇔ X1turbo  シリアルクロスケーブルで接続。

[2] X1側でBASIC(CZ-8FB02/03)を起動後、下記のコマンドを実行して下さい。
 LOAD "COM:6N81RN"
 ※ LOADコマンド実行時に以下のエラーが発生することがあります。
  Reserved Future
 これはBASICの Startup.bas等の設定で NEWON命令により、RS232C関係の命令が
 削除されてしまうと発生します。
 その場合は、Startup.basからNEWON命令を削除するか、NEWON 8以降を指定すると
 RS232Cが使えるようになります。

[3] ツール側のセットアップタブ "LoaderBasicの転送" ボタンを押して下さい。
[4] 転送が成功すると、'Illegal Direct' がX1側に表示されます。その後 RUN コマンドを実行して下さい。
[5] 次に、'X1 Monitorを転送して起動' ボタンを押すとモニターを転送後、起動します。

X1 Monitor起動ディスク作成


Monitorが起動した状態で、起動ディスクを作成します。
[1] ブランクディスク(2D/2HD)をドライブ0にセットします。 (2HD指定はv1.1.6以降)
[2] ''X1 Monitor 起動ディスク作成'' を押すと、メディア(2D/2HD)指定後、起動ディスクの作成を行います。
[3] 以降はそのディスクからMonitorが起動できます。

付属の起動ディスクイメージを使って起動ディスクが作成できるのであれば、
他機種(PC88など)で作成しても問題ないと思います。

X1 Monitor再起動


X1Monitorを直接入れ替えて起動する事が出来ます。
開発用なので普段使う事は無いと思いますが、専用の機能として、
S-OS U.C.様謹製のCZ-8EB4でのROMブートに対応しました。
チェックを入れていると、CZ-8EB4にモニタを書き込み、次回からディスクレスでモニタを起動できます。

FD読出し


フロッピーディスクの吸出しを行います。
トラックのセクタ情報(256/512/1024byte)を読み取って、セクタデータを読み込みます。
混成状態のトラックでも対応しています。
通常のHuBasicやS-OS形式、ゲームで良く使われる1024byte x 5セクタの形式では問題ないですが、
同じセクタ番号が複数ある等、特殊なプロテクトがかかっているディスクには対応していません。
FD読出しの際は念のためプロテクトシールを付けておく事をお勧めします。

  • ドライブ番号(0-3)
  • メディアタイプ(2D/2DD/2HD)
    ※ 2DDを読み込む場合は本体背面またはX1turbo内部のディップスイッチで2DDモードに切り替えて下さい。
     トラック番号はチェックしていないので、2Dドライブに対して2DDアクセスを行うとオーバートラックが
     起きるので、注意して下さい。
  • トラック番号 (開始,終了)
  • 出力ファイル名 (.d88形式)
    開始ボタンを押すと、ディスクの読み取りを行います。
    セクタがエラーで読み込めない場合は、以前は停止していましたが、
    v1.1.0以降では、出力ファイルにCRCエラーとして出力して継続するようになりました。

FD書出し


FDへの書出しとEMMへの書出しの2つを行うコマンドです。

FD書出し

.2d/.d88形式のファイルを読み込み、フロッピーディスクへの書き出しを行います。
.d88形式内のファイル(1セクタ256/512/1024byte)のトラックフォーマットを行い、データを書き込みます。
.2d形式は 1セクタ 256 byte x 16セクタ@トラックのフォーマット固定です。

ある程度セクタ長が混ざった場合でも、書込みができるようにしていますが、以下のものが良く使われます。

  • 1セクタ 256 byte / 16セクタ@トラック (BASIC,S-OSなど)
  • 1セクタ 1024 byte / 5セクタ@トラック (市販のゲームなど)

セクタ番号は通常 01h~10hの範囲ですが、プロテクトのかかったディスクなどは
f6hやf7hなど、X1では通常書き込めないセクタ番号が使われている事があります。
これらのデータは正常に書き込めないと思います。

v1.1.8以降はファイルに内包されているトラック番号を参照するようにしました。
またトラック番号を指定することで、指定トラックのみ書き込む事も可能です。

メディア形式によって最大トラックが変わります。 それ以降のトラック番号に書込み可能かはドライブごとに異なります。

  • 2D 00~79
  • 2DD 00~159
  • 2HD 00~153 (154トラック以降はオーバートラック)

ディスク書込み時に Verifyを行うオプションを追加しました。(v1.2.1以降) データを書き込み後、再度トラック内容を読み出し比較します。

一致しない場合は、再度書込みを行いますが、劣化したドライブでは、 何度繰り返しても書込みやVerifyチェックが成功しない場合があるようです。

メディアやドライブによっては書込めない場合がありますので、ご注意ください。

EMM書出し

指定ファイルをEMMの指定アドレスへ書き込む機能を追加しました。
主に開発用ですが、事前にEMMへファイルを書込んでおいて、実行時に高速にデータを読み出す事が可能です。
グラフィックリソースなど、開発中は更新頻度の少ないものをEMMから読み出すようにすると便利です。

  • ドライブ番号(0-3)
  • 入力ファイル名 (.d88形式)
  • トラック開始番号,終了番号

開始ボタンを押すと、ディスクへの書き込みを行います。

プログラム実行 (v1.1.8以降)

指定したファイルをX1turboに転送して実行する機能です。
通常X1turboでプログラムを実行する場合は、FDにファイルを書込んで実行するしかありませんでした。
このコマンドはRS232C経由でプログラムを転送して直接実行することが可能です。

実行可能なファイル

以下のファイル形式が実行可能です。

  • バイナリファイル

    • ファイルを読み込むとファイルサイズを取得します。
      開始アドレスを指定するとその場所に転送して、先頭アドレスを実行します。
  • バイナリファイル (LOADM形式)

    • ファイルの先頭に、開始アドレスと、終了アドレス(-1)の4byteが追加されたファイルです。
    • この形式のファイルを作っておくと、プログラム上から起動位置を指定可能です。
  • .2D/.D88ファイル

    • ディスクイメージファイルのIPL領域を部分を取り出して、そのファイルを転送して実行します。
    • つまり、そのディスクイメージのブート部分を転送/実行できます。
    • とは言え、ブート後は元のFDを読み込みに行ってしまうので、ゲームではあまり使い道はありません。
    • S-OSやCZ-8FB01/02など、DOSをブートする事ができます。
フリーエリア

0000h~0d4ffh の領域をプログラムエリアとして利用する事ができます。
(4000h~0afffh はFDアクセス時のバッファなのでプログラムエリアとしても使用可能です)

RemoteMonitorの再起動

プログラム実行時に 0d500h~のX1turbo Remote Monitor本体を破壊しなければ、コールドスタートする事が可能です。
その場合は、プログラム終了時に 0d500hにジャンプすると、X1turbo Remote Monitorをコールドスタートします。
その後は、再度Win側と通信が可能です。

コールドスタートは、以下の初期化を行います。

  • 全パレットを透明,グラフィックプライオリティを初期化
  • CRTCを前面ボタンに合わせて設定
  • SIO/CTCを初期化
  • キーボードの割込みを無効化
  • Iレジスタを初期化
  • スタックポインタを初期化
サンプルプログラム

サンプルとしてX1用Ballsを付けておきます。
同梱の x1balls.d88を指定して起動すると Ballsが実行できます。
キーボードの 'Q'を押すとballsを終了して、X1turbo Remote Monitorをコールドスタートします。

メモリダンプ


主に検証用です。指定したメインメモリの位置から読み出します。
ファイル名が指定されている時は、ファイルへ書き出しを行います。
ファイル名の指定が無い場合は、書き出しは行われずログウィンドウへ表示のみ行います。

ID読出し


フロッピーディスクからディスクIDを読みだしてダンプします。
IDは以下の 8byte構成です。

オフセット 項目 メモ
+0 Cylinder (0-39 2D時)
+1 Head (0-1)
+2 Record (0~) いわゆるセクタ番号。
通常は 01h~10hの範囲ですが、プロテクトのかかったディスクでは
0f6h,0f7hなど,X1が本来生成する事の出来ないIDが書き込まれている事が
あります。データ自体の読出しは可能です。
+3 Num (01,02,03,04) セクタ長 00:128byte, 01:256byte, 02:512byte, 03:1024byte。
プロテクトのかかったディスクでは 06hなどのありえない値が
使われている事があります。
+4 CRC0
+5 CRC1

ROM読出し


v1.1.5以降追加された機能です。
以下のROM情報をファイルへ読み出します。

  • ASCIIフォント (8x8)
  • ASCIIフォント (8x16)
  • 漢字フォント (16x16) 第1水準,第2水準
  • BIOS ROM (32KB)

読出しを行いたいROM情報の所に、保存ファイル名を指定してください。
空欄になっている箇所は読出しを行いません。
ファイル名を指定して、'開始'ボタンを押すと、ROM情報を読み出してファイルへ保存します。

初期ファイル名は以下のようになっています。

  • ASCIIフォント (8x8)  FNT0808.X1
  • ASCIIフォント (8x16)  FNT0816.X1
  • 漢字フォント (16x16)  FNT1616.X1
  • BIOS ROM (32KB)  iplrom.x1t

TakedaさんのX1turboエミュレータのファイル名がベースになっています。

上記の漢字フォントは、漢字ROM並びでは無く、
エミュレータで使用する事の多いSJIS並びにしています。

ちなみに、文字コード変換(SJIS→JIS)は、.Net FrameworkのEncoding(50222)を使っています。

メニュー

  • 設定
    • 背景色変更 背景色の切り替え(黒/青)を行います。
      画面自動認識系のディスプレイだと画面境界が判らず表示が乱れる事があります。
      その場合は、背景色を青色にして調整を行うとやりやすいです。

不具合/トラブルシューティング

USB-シリアルで接続に失敗する

Elecom UC-SGT1などでうまく通信が出来ない事があるようです。
購入して接続テストを行っていましたが、こちらではまだ再現できませんでした。

  • バイスマネージャ > USB Serial Portのプロパティ > ポートの設定 > 詳細設定

で受信バッファ,送信バッファのサイズを最小にするとうまく行く事があるかもしれません。

電圧レベル

RS232Cの電圧レベルは ±5~15Vですが、海外製USBシリアル変換ケーブルの中には 0~+5V程度しか出ていないものもあるようです。 またUSBハブ経由よりも PCから直接出力する方が安定するようです。

謝辞・その他

ずっとこのツールを作りたかったので、実現できて一安心です。

  • X1リソースセンター 様
    制作にあたって、X1リソースセンター様で公開されている hssio を参考にさせて頂きました。
    どうもありがとうございます。
    最初はどうにかして動作できないかと色々といじっていたんですが、ウチのX1turboでは
    正常に動作しなかったので、SIO周りは別に組んでいます。

  • UME-3 様
    いつも動作確認ありがとうございます。

  • 「試験に出るX1」 祝一平
    この本には毎度お世話になっています。
    購入してからずっと読んでいるような気がします。
    それだけに祝一平氏が亡くなられた時は本当に残念でした。
    氏の考え方やユーモアに富んだ文章などは今でもたくさんのライターの方に伝わって、
    更に影響を与え続けていると思います。

X1で高速通信

X1turboで高速通信にトライ

X1turboはスタンドアロンなパソコンなので、どうにかしてネットワーク接続ができないか考えていました。

Etherボードを作って試したりしたけど機器が特殊だったので、パッケージを小さくできるRS232Cでのシリアル接続を試してみました。

X1リソースセンターさんの所で、高速通信(HighSpeedSIO)ドライバが公開されていたので試してみました。

実際に速度計測すると、ケーブルを取り換えてみても 23000bpsぐらいが限界でそれ以上は overrun error が出てしまいました。

マシン個体差があるのかも?これ以上の通信速度の実現は難しいのか…。 

USBシリアル変換ケーブル

そして、もう一つの問題。それはWindowsマシンにシリアルポートが搭載されなくなってきた事です。

レガシーなシリアルポートはそれほど使われなくなってきて、同じシリアル回線BlueToothが標準搭載されるようになりました。

出来るだけ手軽にWindows⇔X1の接続を行いたいと考えていたので、この辺りも問題でした。

その後、何年か経った時、BUFFALOのUSBシリアル変換ケーブル(''SRC06-USB'')の事を知りました。

このUSB⇔シリアルは、USBを経由してシリアルポートに接続が可能。

そして大きな特徴はボーレートが自由に設定可能な事です。

バイスのプロパティを見る限り、一見自由にボーレートが設定できるようには見えませんが、プログラムからボーレートを設定すると任意のボーレートで通信する事が出来ます。

そして実験の結果、X1で使用できる速度値(25000Bps, 62500Bpsなど)にしても通信が出来ました!

このUSBシリアル変換ケーブルを使うことで、以下の問題が解決できます。

  • USBに対応しているWindowsマシンであればX1turboと通信可能
  • 現在(2016-)でも入手可能な機材
  • 9600bps以上の高速通信

しかも検証の結果、X1turbo Remote Monitorではシリアルケーブルはインタリンクケーブル(ハードウェアフロー対応)ではなく、通常クロスケーブルでも、高速通信でのやりとりは正常に行われていました。

速度を合わせる事で、ムラ無くデータが受信できているからでしょうか?

BUFFALO SRC06-USB

ボーレートを自由に設定できるUSBシリアル変換ケーブル。

古いPCとの接続に便利なのでオススメ。

取説やサポートサイトにはその記述が無いので非常にもったいない。送信/受信バッファも4096byte設定可能。

(X1turbo Remote Monitorでは64byteに設定しています)

X1turbo接続では 62500bpsまで接続できました。

125000bpsは受信はできているけど、送信に失敗するので、まだ調査中です。

現在は後継機種として、''BSUSRC0605BS''がリリースされています。こちらでも動作するようです。

f:id:x1turbo_agency:20180520154322j:plain

USB-CVRS9

これは古くからある16550互換UARTタイプ。

転送バッファも16byteで確保できるが、ボーレートは固定で、高速転送には使えない。

f:id:x1turbo_agency:20180520154406j:plain

上記のどちらもハードウェアフローには対応しています。

ブログ開設

X1turbo Agency ブログ開設です。

 

このブログは、1980年代にシャープ株式会社より発売された、

8bitコンピュータ X1turboの探求サイト、X1turboエージェンシィです。

 

wikiでページを開いていましたが、アクセスが不安定で引越し先を探していました。

ブログ形式にする方法も模索するため、はてなブログを検証してみることにします。

 

X1turboとWindowsPCを接続して高速通信にトライしてみました。
それらを使ったモニタツール「X1turbo Remote Monitor」を公開しています。