ここから本文です
Dr.KIKKIE(KIKI) MSX DeuxLaque
免責:記載誤りによる損害一切

書庫全体表示

記事検索
検索

Mii(3)

イメージ 1
知らない間に7月に入っていた。
いつ7月に踏み込んだのか、記憶がない。おそらく暑さのためであろう。自分の脳ミソはCMOS以前の古いタイプなので熱暴走しやすいのかもしれない。
大き目のヒートシンクをネジ止めしてはどうか、などと考え始める時点で既に変調がかかっている気がする。

■承前
続いているのかどうかよく分からんが、一応、Miiの続きにしておこう。
Wiiリモコンシステムは加速度センサに赤外線送受信機が併用されているというハナシと、ライントレーサーのハナシと、PDL関数で通信もできるんじゃない?というハナシがごっちゃになって、少しヒカリモノを揃えてみた。
ヒカリモノとは、コハダ、サヨリ、キス、アジ、サバ、イワシなど青魚の事で、もちろんその素材の煌めきに由来する。青魚だから必ずヒカリモノというわけでもなく、サバですらヒカリモノといわないこともあるらしい。
サバといえば、大阪名物サバの押し寿司「バッテラ」が好きである。サバと昆布が寿司飯の上で出会ったシュールな旨味はなんともいえない。ただし生臭い店もあるから、せっかくのインターネット時代、よくチェックしてから出かけよう。ちゃんとHPに「ウチのは生臭いでっせ」と書いてあるはずだ。知らんけど。

■写真の説明
(1)はフォトトランジスタ、(2)はCdS、(3)は赤外線トランシーバモジュール、(4)は赤外線リモコン用の受光用モジュール、ちなみに赤外線LEDの入手を忘れている。覚えていたら購入しておこう。忘れていたら・・・購入できまへんわな。そら。

■今後の展開
寄席の大喜利でよく観る「三題噺」のような取り揃え(写真には4種類あるから「四題噺」だけど)になっているが、これを一遍に使うわけではない。バラバラに使うかもしれないし、そうでないかもしれない。要するに、まだ何にも考えてないのである。
とりあえずは、フォトトランジスタかCdSを使ってライトペンとか光線銃とかできるかなあ、赤外線トランシーバーや受光素子を使ってリモコンができるかなあ、とモヤモヤ考えている今日この頃である。
そういえば、昔、「MSXで学習リモコン」みたいな話題があったっけな。ところで、これって本当にMiiの続きやろか?

Mii(2)

イメージ 1
実体配線図の一歩手前で、考えをまとめる。

■電源周り
パスコンは記載省略。
実際に電源供給しているラインと、たんにプルアップ/プルダウンしているラインがあり、後者には抵抗を入れるべきかも。といいつつ、たぶん入れない。

■74LS14
MSXの汎用ポート8端子を反転してLMC555のトリガに入力する。内蔵の6個のインバータのうち、使うのは1個だけ。残りの入力ピンはGNDに落とす。
TTLとCMOSが混ぜこぜになっているが、シュミットトリガだからまあいいでしょ。

■LMC555
問題はココである。
回路自体はデータシート記載の「パルス幅変調回路」そのままである。よく分からないのは、(1)C及びRの適切な選択、(2)Control端子から入力した電圧でうまくパルス幅変調できるか、の2点である。調べつつ計算しつつ、結局、試行錯誤になるのでしょうな。

■KXM52-1050
通常使用しない2、4、5ピンのうち、4、5ピンの処理について説明書に矛盾をみつける。
「各ピンの説明」表では「4ピン:通常は、どこにも接続しない(無接続)」「5ピン:通常は通常はGND(3番ピン)に接続する。」(註:原文ママ)と記載。一方、本文説明では「4番ピン(パリティ)は、GND(3番ピン)に接続する。」「5番ピン(セルフテスト)は、どこにも接続しない(無接続)」とある。
つまり、両者が入れ替わっている。英文データシートを参照する。「Party:Checks EEPROM for parity error.」と特に指示はないが、「Self Test:When NOT in use, this pin must be tied to ground.」となっている。従って「各ピンの説明」表が正しいと判断する。「通常は通常は」と繰り返しているのは強調しているのであろう。
とりあえずX軸方向の1系統だけで実験(いたずら)してみる。

■まとめ
「Mii(ムィー)」を考えることで、可処分時間を無為に過ごしているわけだが、仮にハードが完成しても活かすソフトがない。ソフトづくりにまた可処分時間を無為に費やすわけで、今回の「Mii(ムィー)・プロジェクト」は文字通り全て無為に運命づけられている。
この、「無為に過ごすこと」の贅沢さが、やめられない止まらないカッパえびせん、それにつけてもオヤツはカールなのである。

Mii(1)

イメージ 1
「おいおいパドルはどうなった?」「turboR対応はどうなった?」とお嘆きの諸兄、ご安心召されい。
「パドル」はまだまだ続くのである。もういいって? そう言うなよ。

■部品の説明(右写真)
使う予定の部品を並べてみた。本当にこれでいいのか分からない。ダメなら無かったことにするし、上手くいけば「これでいいのだ!」と自画自賛する予定である。
上から、
(1)HD74LS14P(シュミットトリガインバータ)
(2)LMC555(CMOSタイマ)
(3)KXM52-1050(3軸加速度センサモジュール)

簡単に説明すると、(1)はシュミットトリガのインバータ。(2)は産業用標準555シリーズ汎用タイマのCMOSバージョン。(3)はカイオニクス社3軸加速度センサを実装した8ピンモジュール。秋月電子通商製と言っていいのかどうか知らんが、高性能なチップをDIP8ピン(実質5ピンと言っていいかも)にまとめてくれた、ありがた〜い部品である。

■考えちうの展開
中心となるのはKXM52-1050。重力加速度に応じて、傾きなり、動きなりを感知、電圧変化として出力。
LMC555は、単安定マルチバイブレータとして使用。センサの電圧変化をControl端子に入力し、出力パルスのデューティ比を変化させる。トリガ入力はMSX汎用ポートの8端子から、出力は汎用ポートの1端子かどれかに。
HD74LS14Pは、LMC555の負理論トリガ入力のため、汎用ポートの8端子の反転に使用。

以上により、センサの出力をパルス幅の変化に変換、PDL関数によりMSXに取り込む。
要するに、Wiiリモコンっぽいことを目論んでいるわけである。MSXのWiiリモコン。略して「Mii(ムィー)」。ちょっと無理があるかも知れんが、ムィーは承知である。

■まとめ
最も重要な働きをするのが最も小さく、一番デカいツラしているのが実はちょびっとしか働いていないところに、社会の縮図を見る思いがする。
ちなみに、これを書きながら映画「ヴィレッジ」(製作・監督・脚本:M・ナイト・シャマラン)を観ていたのだが、こんな感動作とは思わなかったよ。「シャマランは、つまらん!」と思っていたが、これはイイ! とにかく「絵」が市川崑に劣るとも勝らない出来栄えである。
とりあえず口直しに「秘密結社 鷹の爪 THE MOVIE〜総統は二度死ぬ〜」を観ようっと。
それにしても最大のナゾは、これのどこが「まとめ」なんやら?

パドル(16)

イメージ 1
日頃ゲームには興味がないと言っておきながら、人が遊んでいるとつい「どれどれ」と手を出してしまう。ゲームヲタクじゃなくて、知的好奇心旺盛と言ってもらいたい。
ゴタクはいいから早よ本題入れ? ワシも今、そう思うておったところじゃ。

■パドル向きのゲームとくれば。
「ブロック崩し」か「スカッシュ」が定番じゃろな。
ちょうど、ふうせん Fu-sen.@msx.msさん(表記はBaboo!JAPAN準拠)作成の「いわゆるスカッシュ」を教えていただいたので、チト試してみる。
それにしても僅か20行451バイトでゲームが出来るなんて、恐れ入りやの焼き蛤である。違う? その手は桑名のナガシマスパーランド? まあいいや。
HPはプログラムのほか、BASICコマンドやCPUコードなどがコンパクトにまとめられていて、リファレンスにも重宝しそうである。
(ふうせん Fu-sen.@msx.msさん(表記はBaboo!JAPAN準拠)のHP)
http://msx.ms/

■ちょいと手を入れてみる。(右写真)
さて、いじっているうちに、もうチョイいじりたくなるのが人情であろう。
本論のパドルネタとは直接関係なくなり少し寄り道、ということで「スカッシュだけよん」と命名。このネーミングセンスは好みが分かれるところであろう。
以下、脊髄反射的にリストを載せる。リスト部分だけFDに入れれば、MSXPlayerでも試せるハズ(turboRでは速すぎてダメかも。保存版3ゲーム開発版では何故かエラーも。各個撃破のこと。)。
試行錯誤的にいじったので大量のスパゲティ状態。IF〜THEN〜ELSE〜IF〜THENのアラシにマルチステートメントのオンパレード。「こんなん見ちゃダメよ」の見本としてご覧ください。
原作者の名誉のために付記するが、ほぼ完全に換骨奪胎。スプライト割り込みとか使ってるし。
大きな変更点は2点。
(1) カーソルキーを離しても画面上のパドルは移動し続ける。これで、かなりイライラする。テニスの選手の動きを真似たんだがな。
(2) 最初は眠くなるような進行だが、あれよあれよとスピードアップする。作者の自分ですら6〜7点のスコアである。はっはっは。あーイライラする。

100 '================
110 ' SQUASH DAKEYON
120 '================
130 'SAVE "BALL.BAS"
140 COLOR,1,4:SCREEN 1,2,0:WIDTH 32:KEY OFF:DEFINT A-Z
150 R=RND(-TIME):DX=1:DY=1:X=RND(R)*256:Y=1:XX=128:YY=176:C=2:S=0
160 S0$=STRING$(4,255):S1$=STRING$(4,255)+STRING$(12,0)
170 SPRITE$(0)="<"+"~"+S0$+"~"+"<":SPRITE$(1)=S1$+S1$
180 LOCATE0,0:PRINT"SCORE";S;:CT=0:ON SPRITE GOSUB 290
190 ' MAIN LOOP ----
200 IF CT=0 THEN SPRITE ON
210 X=X+DX:IF X<0 THEN X=0:DX=DX*-1 ELSE IF X>248 THEN X=248:DX=DX*-1
220 Y=Y+DY:IF Y<0 THEN DY=DY*-1:ELSE IF Y>194 THEN GOSUB 340
230 IF STICK(0)=7 THEN CX=C*-1 ELSE IF STICK(0)=3 THEN CX=C
240 XX=XX+CX:IF XX<0 THEN XX=0 ELSE IF XX>240 THEN XX=240
250 PUT SPRITE 1,(XX,YY-1),12,1
260 GOSUB 320:CT=CT-1:IF CT<0 THEN CT=0
270 GOTO 200
280 ' SQUASH ! ----
290 SPRITE OFF:S=S+1:LOCATE0,0:PRINT"SCORE";S;:CT=4
300 DX=DX+(S\3):DY=DY+(S\3):C=C+(S\3):DY=DY*-1:Y=Y+DY-2:GOSUB 320:RETURN
310 ' PUT BALL ----
320 PUT SPRITE 0,(X,Y-1),10,0:RETURN
330 ' TRY OR END ----
340 LOCATE 3,12:PRINT"FAILED! TRY AGAIN? (Y/N)";
350 I$=INKEY$:IF I$>"" THEN 350
360 I$=INPUT$(1):IF I$="Y"ORI$="y" THEN RUN ELSE SCREEN0:COLOR,4:END

■まとめ
Y座標が−1から始まるスプライトって、やっぱどっかヘンだよな。
ヘンはお前じゃ? ほっとけ。

パドル(15)

turboR対応のための材料集め。

■turboRであることの確認
MAIN-ROMの002DHにROM versionIDが記録されている。
 00H:MSX(1)
 01H:MSX2
 02H:MSX2+
 03H:MSXturboR
ちなみにアセンブラリストで見ると、MSX(1)の002DH以降3バイトは次のとおり。
 DB 00,00,00
しかし、MSXturboR(A1-GT)では次のようになっている。
 DB 03,01,00
03Hの次の「01H」は何を意味しているのであろうか?
ひょっとしてA1-STは「00H」で、A1-GTになってマイナーバージョンアップした?
確かめてみたいところではあるが、所有していたSTはとうにお陀仏になったのでございます。南無阿弥陀仏。

「MSX turboR テクニカル・ハンドブック」(1991年7月31日初版 アスキー出版局)によると「自分が必要とするバージョン番号以上の値を得られれば、ソフトウエアが動作するようにプログラムしておこう」とエラそうに書いているが、MSX(1)以降で動作するように書いても動作しないのがturboRじゃないか!プンスカプン!
それはともかく、turboRであることを確かめないといけない。

 RDSLT EQU 0000CH  ;スロット間リードBIOS
 ROMVER EQU 0002DH ;ROM version IDのアドレス
 EXPTBL EQU 0FCC1H ;MAIN-ROMの所在を示すワークエリア
     LD A,(EXPTBL)
     LD HL,ROMVER
     CALL RDSLT
     CP 3
     JR NC,TR  ;3以上ならturboR以降

って感じでしょうかね? ダンナ。

■モード変更
turboRの動作モードは3種類ある。
正式に「動作モード」と呼ぶのかは知らんが、ここではそう呼ぶ。
 モード0:Z80
 モード1:R800+ROM
 モード2:R800+DRAM
ROMよりもDRAMのほうが一般にアクセスが速いこともあり、モード1と2が用意されたらしい。
今回は、本体プログラムをあまり書き換えたくないので、カウンタのタイミングを測る際、turboRで採用されたシステムタイマーは使わず、モード0に切り替え、Z80のステート数に依存することにする。
以下、関係BIOS。turboRであることを確かめてから使うこと。

GETCPU(0183H)
CALLするとAレジスタにモード番号が返される。

CHGCPU(0180H)
Aレジスタに値をセットしてCALL。CPUを切り替えた際、AFとR以外のレジスタはそのまま引き継がれる。CALL後は割り込み許可状態。
Aレジスタにセットする値は次のとおり。
 L00000MM
 MM=00:Z80
 MM=01:R800+ROM
 MM=10:R800+DRAM
 L=0:CPUにかかわらずLED変化なし。
 L=1:CPUに応じてLED変化。

CHGCPUで「MM=11」にするとどうなるんでしょう? また、「0の部分は必ず0を書き込む」と注記があるが、変えたらどうなるんでしょう?
何か災いがあるとイヤなので、いつになく素直に従うことにする。

■まとめ
プログラムの改修は、次のようになろうかな。
(1)プログラムの冒頭でturboRか確かめ、フラグを立てておく。
(2)カウンタの手前でフラグを見て、turboRだったら現在のモードを保存し、CPUをZ80に切り替える。
(3)カウンタ終了後フラグを見て、turboRだったら元のモードに戻す。

あー面倒だー。面倒だから楽しいなー。
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Dr.KIKKIE(KIKI)
Dr.KIKKIE(KIKI)
非公開 / 非公開
人気度
Yahoo!ブログヘルプ - ブログ人気度について

よしもとブログランキング

もっと見る
本文はここまでですこのページの先頭へ

[PR]お得情報

コンタクトレンズで遠近両用?
「2WEEKメニコンプレミオ遠近両用」
無料モニター募集中!
お肉、魚介、お米、おせちまで
おすすめ特産品がランキングで選べる
ふるさと納税サイト『さとふる』
ふるさと納税サイト『さとふる』
11/30まで5周年記念キャンペーン中!
Amazonギフト券1000円分当たる!

その他のキャンペーン

みんなの更新記事