最近放っていたので、まとめて更新なのである。
slackware3.5でコンパイルできないという情報を頂いたので調べてみたところ、完全に私の実装ミスでした。 すみません。早いうちにパッチを作ります。
Pマガからちまちまの入力完了。相変わらずヒマだね〜。
6601上で2 FAT bad on drive 1というメッセージを見る。
PマガからEformnを入力。 ゲームは問題なく動くのだけど、タイトル画面のスクロールが異様に速く終わってしまうのはどうして? 音楽は正しく鳴るのにね。
恒例(嘘)、今日の疑問。 MON、R-0でテープからロードするとき、最初がF89Fからだったらロード終了後にF89FとF8A0の内容を見てそのアドレスにジャンプするようになっている…みたいなんだけど、この処理はROMのどこにあるのかな?
Pマガの爆弾男を調べる。 subCPUからのデータ取得でループに陥っているのだけど、ついでなので(行き詰まったので?)他の部分も読んでいた。 タイトル画面の次にかな文字で説明文が出てくるんだけど、これはアトリビュートエリアも含めて0800Hバイト分が予め用意されていて「おー、ここが説明文のデータか。じゃあグラフィック画面用のフォントデータはどこだ?」とやってみたり。 驚いたのは、このゲームは音声合成を使っているのだけど、TALK文形式の文字列はどこにもなくて、文字列をI/Oポートに出力する形に変換したものが入っている。 プログラムでは、ループでデータをポート0E0Hに出力すればいいようになっている。 ゲームを一旦起動すると、ROMには一切アクセスしてなくて全部RAMにしてしまっているので、バンク切り替えせずに済むようにしているのかな。 でも、雑誌を見て打ち込む側の意見としては、こういうのはカットしておいてくれてもいいんですけど。
結局? 解決してませ〜ん。市販品なら動くってのはどういうこった。
バンク切り替えのバグを1つ修正。
割り込みまわりを整理した0.6.1リリース。 PLAY文が少しマトモになった…はず。 それから速すぎたタイニーゼビウスは、タイマ割り込みが増えたおかげでだいぶふつーの速さに近づいたように思う(ウェイトありの場合)。 ブラスターを放った瞬間だけ速くなるのは未だに謎。 あと、0.6.0ではキーの反応が悪かったのも直してます。 ただ、ドアドアmk2は0.6.0では動く(と思う)けど、0.6.1では動きません。 ごめんね。
X版はときどき'Broken pipe'と言う捨てゼリフと共に終わってしまう。 (UPeriodを極端に大きくしていると起きる?) サウンド出力の為に別プロセスを生成しているので、それとの通信だと思うのだけど、詳しくは分かっていません。 もしゲームの最中に落ちたら、誰だって怒るよねぇ。
ちょっと遊びで作ってみました。まだ違う?
N60m-BASICのTALK文は最後に'.'がないとエラーになるが、N66-BASICならエラーにならない(それで?)。
DREAM 6000のきゃんきゃんバニーを見てて思ったんだけど、今のようにCD-ROMでねーちゃんの画像を見るだなんて、当時は想像だにしませんでしたよね。 私的にはあおいさんが見れたのが嬉しい。
0.6.0をリリースしました。0.5.5は幻のバージョンになってしまいましたね。
pc6001.noc.ntt.co.jpって一体どんなマシンなんだろう。
本日の成果。 今週中にリリースします。
昨日の倉庫番の予想は大当たり(こういうのは当たってもあんまり嬉しくない)。 原因やホンモノのSRの挙動は把握できたので、後は対処を考えるだけ。 1行書き直すだけで、というレベルではなさそうなんだけど。
前から気にしてるんだけど、メイン画面がXlibで設定画面がXtってヘンですか?
AX-7のデモも60のROMで実行すると、ROM部分に書き込もうとしていることが分かった(普段はmk2のROMを使っている)。 エミュレータのバグの可能性も十分にあるのだけど、プログラムはその後も動作しているし、本物のマシン上でROMのあるアドレスに書き込もうとしても無視して進むだけなので、もしかしたらこのままで良いのかも知れない。
倉庫番(mk2用)が動かないのはSRでKANJI文が使えないから?
動的にメモリの内容やI/Oポートにアクセスできる、もっと便利なデバッグモードが欲しいよう(gdbの上で走らすのが一番早いという話あり)。
速すぎるタイニーゼビウスについてI/Oポートを疑っていたのは、エミュレータのI/Oポートはほとんど待ち時間が生じないから。 もうちょっと詳しく書くと、CPUがサブCPUなどの周辺LSIにデータを送るには
なんて手続きがあって(嘘度10%くらい?)、データを受け取るときも似たようなのがあって、実際にある程度の待ち時間が生じている(と思う)。
が、エミュレータではたいてい相手は常にデータを受け取れる状態で、データを送ると同時に受け取った状態になることができてしまう。
だからコイツがまずいのかなと思ったのだけど、もしこれが原因だとして待ち時間ができるようにプログラムを修正すると、今度は他のゲームが軒並み遅くなってしまうわけで、やっぱり見当違いじゃないかと思う。
解析してたらやたらLDIRが多かったので(スクロールするゲームなら当然?)、これが速すぎるんじゃないだろうかと半分当てずっぽで言ってみたりして。
60のみのグラフィックモードでアトリビュートを変更している途中に画面を更新してしまうと256x192の外に描いちゃうことがある。 市販ソフトだと変更してる最中は他のページを見せるとかするだろうからいいか、と思ってたけどやっぱり対処しておいた方が良さそう。
SRでKANJI文が使えないバグを思い出した。
一日ヒマだったので、ノートパソコンと66を並べていろいろやっていたが、あまり成果はあがらなかった。うむぅ。
AX-7のアステロディアンが暴走する件、どの機種のROMで起動するかによって状況が違うという情報を頂いたので試してみたら、60のときだけROMのあるアドレスに書き込もうとしていることが分かった。 書き込もうとするとすぐに暴走するわけでもなくて、暫くはそのまま続いているし、これだけではまだ何も分からないのとあまり変わらないのだけど…。 ソフトのマニュアルに載っているプログラムマップを参考にして試してみたら、UFO(敵機)ルーチンが原因(みたい)なんだけどそれ以上は今のところ不明。
ウワサの謎ワークエリアに値を入れてやるとSRのROMでも1Dディスクが使えるみたい? 試してないけどソースをいじれば1DDも使えるかも?
タイニーゼビウスが速すぎるのが気になるので逆アセンブルしてみる(アステロディアンはどこへ行った?)。 インタプリタROMを読むのと違い資料が無いのでどこまで分かるか不安だったが、敵の出てくる順番が全部分かってしまったりして、思ったよりは理解できた。 で、問題のスピードなんだけど読む前はI/Oポートじゃないかと勝手に予想していたのに、ROM内のルーチンを使っている部分はあってもゼビウスのプログラムから直接ポートにアクセスしているのはサウンド出力だけみたい。 要するに解決しなかったのさ。
こういう解析結果って、公開した方がいいのかなぁと思ってはいるのだけど、テクニカルな文書を書き慣れていないのでどの程度詳しく書けば良いのか分からないとか、書いて誰が読むのかとか考えるとまぁいっか、となってしまう。 こういうのに興味があるひとは10年くらい昔に自分でやってそうだし。 自分で分かった所と分からなかった所をハッキリさせて公開すると、他の人が解決してくれたりっていうのが理想ではあるんだけど。
教諭が爆発物を持って高校に侵入したニュースで「爆弾男」という字幕を見てニヤリとしてみたり。
ページをちょっと整理。
タイミング調整のテストに、66のユーティリティに入っているチゴイネルワイゼンの演奏をエミュレータ上でやってみる。 やっぱり速くなったり遅くなったりするのだが、だいぶ進歩したなぁとも思う。 画像はスクリーンショットのページにありますが、音をお聴かせできないのが残念。 66ユーザだったヒトには懐かしいこと必至。
AX-7のアステロディアンが動作しないので逆アセンブルしてみる。 結局解決はしなかったのだが、解析封じなテクニックを見付けたりしてそれはそれで面白かった。
60onlyなグラフィックモードはサポートした(つもり)だが、AX-7のデモンストレーションでまだヘンな個所があったので、今度は60onlyなゼミグラフィックモードを実装してみたらビンゴ。
色はよく分からないので今はテキトー。
moriya氏にWin版のソースを頂いてタイミング調整を組み込む。 実行してみたらとんでもなく速くなってたり遅くなったりして、ナニを間違えたのだろうとソースを見直すが、実はコンパイル前の問題ではなく実行時に与えるパラメータが間違っていたことに気付いてトホホ。 結局組み込み自体は成功だったのだけど、設定用にユーザインターフェースを作るのはこれから。
時間を計るのにgettimeofday、ウェイトをかけるのにusleepを使っているのだけど、これってたいていのUNIXにはある関数なのだろうか。
PC88のエミュレータM88用に2DディスクをAT機で読む為のツールを使って、6601の3.5"-1Dを読んでみる。 ちゃんと読んでくれるみたいなんだけど、ID情報まで含めてデータ化してくれるのでこの辺は取り除かないといけないかな。 2DDにも対応しているらしいので66SRの1DDも読めると思うんだけど未確認。
半日ほどアテナウィジェットと格闘。設定パネルがちょっとすっきり。
fdutilsを使って6601の1Dディスクの読み込みに再挑戦。 どうやらトラック0だけが読めてるみたい。 前にやったときは全然読めなかったら、進歩はしたんだけどこれじゃあ使えないなぁ。
% setfdprm /dev/fd0 dd head=1 sect=16 ssize=256 cyl=35 % cp /dev/fd0 p6fd cp: /dev/fd0: I/O error % ls -l p6fd -rw------- 1 next66 users 4096 Feb 27 21:48 p6fd %
最近、6601の内蔵ドライブのエラーが多い気がする。 今日はセーブ時に"1 FATbad on drive 1"というエラーメッセージが出た。 なんでエラーが出るのよ、という気持ちもあったが、それよりも「そんなメッセージ、ROMの中にあったっけ?」という方を先に思ってしまった。
バグチャルというボードゲームを打ち込んだんだけど、BASICではちょっと大きなものを作ろうとするだけで面倒なんだなぁと実感。
6001特有のグラフィックモードを実装。AX-7のデモもこの通り。
(mo)氏から頂いたディスクドライブ部のコードをUNIX版に組み込み。
普通にBASICプログラムをload/save/filesくらいは出来たので、6601ユーティリティディスクのクラスタ0を使ってオートスタートのテスト。
iP6のページにHow to apply patchを追加。
スクリーンショットを増強。
ディスクと音声まわりのROMを眺める…が、あまり成果は上がらず。 固定語の出し方があんまりにも簡単なのに呆れる。
AX-7、PC6000NOTE、アスキーのゴルフのテープをイメージ化。 アステロディアンが途中でリセットがかかってしまう…。
コムパックのグラフィック麻雀、九十九の地獄の黙示録、ポニカのシューティングインベーダーとギャラックコンボイをイメージ化(だから試験中だってば)。 ちゃんと動いてるみたい。
AXシリーズをテープからディスクにセーブしようとしたが失敗。 正確にいうと、セーブはできるのだけどロードしてもちゃんと動いてくれないの。 テープにはBASICとマシン語をひとまとめにしてあって、cloadで全部読めるようにしてあるのだが、ディスクでは扱い方が違うのかな? というところでやめ。もっとも、ディスクを使うということはN60-拡張BASICを使うということで、ディスク用ワークエリアが必要になったりするから、それもあるのかもしれない。
試験真っ最中のような気がするが、こういうときこそ違うことがしたくなるもの。 ということで、Lode Runnerのディスク解析を再度始める…が、やはり同じ所で行き詰まってしまった。 ほとんどの部分はふつーにセクタ単位の入力で良いのだけども、一部でそれ以外の方法で読み込みをしているらしい。 60mk2では使ってなかったポートを66では使っていることもあって、Lode Runnerのディスクを調べる前に本体ROMのディスクアクセス部を調べないといけないかも。
先週作ったディスクのオートスタートプログラム、公開したら使う人いるかな? 公開するならもうちょっと整形しないといけないし、元はユーティリティディスクのオートスタート部を使っているからやっぱりダメ?
最近、エミュレータより本体を使うことの方に興味が行ってるような。
iP6のデバッグモードでqを入れても終わってくれないことに気が付いた。
0.5からはちっちゃいバージョンアップが続いていて、早く0.6にしてあげたいのだけど、タイミングを見失ってしまっている気がする。
ハイドライドのローダ部とメイン部の間にゴミがあることに気がつくまでの状況を文章にして公開しておくと、他の人が他のソフトを調べるときにもちょっとは役に立つかなぁと思ったり。
イヴ・モンタンの遺作はIP5というらしい。
使っているノートパソコンには「東芝音声システム」という音声合成や音声認識ソフトが入っている。 この音声合成は漢字も読めるし、英単語でも登録されていれば("Windows"とか)きちんと読むし、登録されていなくても適当に推測して読むみたい。 で、iP6のreadmeを読ませてみたら、「あいぴーろく」とは読まずに「いっぷろく」と読むので笑ってしまった。
6601のユーティリティディスクのオートスタート設定プログラムでは、BASICモード、ファイル数、ページ数を予め決めないといけないが、ユーティリティディスクは最初にメニューを表示して、番号によってファイル数やページ数を決めている。 この部分を盗んで、ゲームが幾つか入っているディスクで真似をした。 ほとんど一日かかってしまったが、ユーティリティディスクより偉い点はBASICモードも可変ということ。 ユーティリティは全てモード5なのである。
今迄SRについてはモード1〜5しかサポートしていなくて、そのうちモード6も作ろうと思っているのだけど、考えてみたらSRの機能そのものを良く知らないことに気がついた。 一番気になるのは、画面サイズが倍になってその分遅くなることなんだけど、新しく開発しないといけないのはこれとFM音源くらいで、あとはバンク切り換えのポートが変わるとか、その程度の書き換えで済むのかなぁと思ったり…甘いか? (その前に誰かSRください)
ver0.5.4をリリース。実は試験前なのだけれども、ちょこちょこ更新できているので自分で嬉しい。
6601のユーティリティディスクにあるフォーマットプログラムを調べてみたら、音声合成ROM内のルーチンを呼んでいるだけだった。
ついでにN60での画面モード3と4について調べてみる。 BASICではSCREEN命令を実行した時点で画面全体が初期化されてしまうのだけど、POKEでアトリビュートエリアをいじってやると、同じ画面に同居させることが出来る。 で、これは好きなところで分割できるのか、それとも制限があるのかを調べたかったのだ。 結果はどこでもOK。 ま、上と下が別というパターンは実用的ではないのだけども、ハードウェア的には出来るようになっている。 ここまで分かったのでえみれた上に実装。 ちょっと速度が落ちるかな? というのが心配。
iP6-0.5.3をリリース。0.5.2のことは忘れてクダサイ(^_^;
シャープのホームページにはX1やMZ2000の2000年問題について書かれていると聞いて、NECはどうなんだろうとみてみる。 2000年問題のトップページには80や88の名はあるが60や66の文字はなく、「やっぱり」と思いながら80の文字をクリックすると、P6についても書かれているではないか。 カレンダー機能がないので問題ありません、と。 ん? 66SRは内蔵時計がなかったか?
ついでに見つけた、NEC PCマニュアルセンター。 P6のマニュアルのコピーも購入できそう。 ハードウェア商品情報検索では出てこないのにね。
昨日ごちゃごちゃっと書いたハナシ、実は相手は「リンク」の意味も分からないようなヒトだったみたい。
iP6-0.5.2をリリース。0.6が間に合わない故の苦し紛れという説があるが、気にしないよーに。
ホームページに何かを書く(あるいは置く)ということは、誰でも見て良い(見る可能性がある)ということであって、文章(あるいはデータなり何なり)を公開するということは、それなりの責任も生ずるわけで、公開したものについて批判されることだって有り得るのは当然。これはホームページだろうが新聞だろうが雑誌だろうがおんなじ。 誰にでも見られると困るのなら、他の手段を使うとかパスワードを設定するとかすれば良いのだ。 (突然何の話だ? と思われるかも知れませんが、これもP6関連の話題なのです。)
66SRを夢で見た。「夢にまで見た…」とはこのこと。よっぽど欲しいらしい。
Lode Runner(66版、3.5"-1D)が、ディスクのロードに成功したり失敗したりするので、解析してコピーを作ろうと企む。 まず、普通にセクタ単位でロードできる部分をコピー。 これで起動すると"IPL ERR-P"と言われる。 ふむふむ、とホンモノのIPLを読むが難しそうなのでしばらくねばった後、断念。 I/OポートのD4からDFって一体何なんだ〜。
fMSX Unix/X 1.5にスナップショット機能を追加するパッチがだいぶ理解できたぞっと。
プログラミングの書籍って、入門書は山とあるけど中級以上の本になると急に数が減るのよね。 Xのプログラミングでもリファレンスやmanはあるけども、サンプルが欲しいようなときは何かのソースを読むくらいしかない。 かと言って、ftpサーバを回ってみても、目的のものはなかなか見付からなかったり(例:athena widgetの使い方が知りたくてもX libしか使ってないものしか見付けられない)。 しかし考えてみると、普段から「WindowsよりUNIXだぜ〜」なんて言ってるが、他人のソースを読むということをあまりしていないのは他ならぬ自分だったりする。
チップの名前についているμは日本電気製を表すんだって。 知ってた? ボク知らなかったの。
X版のユーザ様に質問。 テンキーがジョイスティックの代わりに使えたら嬉しい? P6ユーザならカーソルキーで遊ぶのには十分慣れてるから意味ナシかな? テンキーを使うならトリガーはどのキーだ? っつー問題もあるのよね。
今日発売のゲームラボ2月号でiP6が紹介されています。 三才ブックスさん、ありがとう。みなさん、ゲームラボ買いましょうね。
色調整したものでハイドライドを起動してみる。
スクリーンショットのページにある色調整前のものとはえらい違いだ。
fMSX Unix/X 2.0b がリリースされていた。 先月の話らしいが全くチェックしていなかった。不覚。 ふむふむ、単体の Z80 エミュレータや EMULib を使うようになったのか。 8bpp 以外にも対応したようなので iP6 で真似してみる…がどうもおかしい。 いろいろ考えたが fMSX の動作を確認していなかったことに気付き、コンパイルしてみるとやはり同じ現象。 な〜んだ。
スクリーンショットが増えたので見てね。
色調整してみる。確かに近づいたような…9番以降も要調整かな?
今までは66より60mk2の方が小さくて軽いので扱い易いという理由で専ら60mk2を使っていたが、ディスクを使うようになったので66の方に移った。 で、前から書いてるけどキーの反応と色の問題があるので60mk2と部品を取り換え。
コンフィグパネル製作中なのだけど、配置やらを決めるのに時間がかかってしまってなかなか進まない。 愚かなことだ。
XtやXlibはまともな本を持っていないのでリファレンスかサンプルがあるといいなぁ。 ソース入りのCD-ROMを買えということか?
模様替えをしたかったのだが、良い案が浮かばなかったので結局現状維持にする。
8bpp固定をどーにかしろと2件頂く。 X版ユーザは確実に居るのだなと分かり元気づく。 実は以前にも同じ内容を他の方から頂いていたのだが、要望が多かったらやればいいや、と思っていたのである。 すまぬ。
3.5"-2DDの10枚セットを買ってきたので、エミュレータで入力したゲームを66でディスクにセーブする。 それなりに沢山打ち込んだつもりだったが、ディスク1枚にあっさり入ってしまった。 2枚組でも十分だったかも知れない。
N60の画面モード4はエミュレータでは白黒の画面でも66ならカラーが出るので、やはりが白黒なのは寂しいよなぁ、なんとかしようかなぁと思っていたらなんとパッチがあった。 これこそインターネットの醍醐味?とか思う(UNIXの、フリーの、ソース公開の、いずれでも可)。
実家から下宿へ舞い戻る。 帰省中に入力したプログラムのうち、唯一エミュレータで動かなかった爆弾男を66で動かしてみると動いてしまった。 エミュレータに問題があるということらしい。