|
以前から不思議に思っているのですがね。
レジスタの値の特定のビットを「1」にしたり「0」にしたりするときに、なんで「AND」や「OR」が多用されるんでしょうか?
ちゃんとビット操作用の命令「SET」「RES」があるのに。
例えば、PSG#15の初期状態が「11001111B」だったとしますね。いわゆるジョイスティックポートBが使用されている状態。
で、8番端子を「H」にしたいときは「OR 00100000B」とするんでしたっけ。
でも、値がレジスタAに入っているとして「SET 5,A」でもいいんでしょ?
事前に「CS EQU 5」と定義しておけば「SET CS,A」でもいいはず。
なんでこだわっているかと言うと、
CS EQU 5
CLK EQU 3
DI EQU 2
と抽象化しておきたいのです。
16進数でANDやORするより、「SET CS,A」のほうが「CSをHにしたな」と分かりやすいでしょ? それに、気が変わって「ジョイスティックポートAを使おう」と思ったり、ピン割り当てを変えようと思ったら、
CS EQU 4
CLK EQU 1
DI EQU 0
などと定義を書き換えるだけで済みます。ANDやORを使っていると、該当箇所を探し出して書き換えないといけません。
とはいえ、端子をひとつずつ制御する前提ですけどね。
「SET」や「RES」では、「OR 00101100B」のように一挙に変更することはできません。
実は、愛用の「MSX-DOSスーパーハンドブック」のASM.COMが2進数を扱えないという事情もありましてね。いまだに2進数をパッと16進数に置き換えられないし、ANDだっけ?ORだっけ?と混乱することもあったりして(自爆)
あ、そうそう。このASM.COMを愛用する理由をもうひとつ書いておきます。
M80などのアセンブラが信用ならないのです。MSX-DOS(1)版とMSX-DOS2版で挙動が若干違うし、MSX-DOS2版でCOMファイルを作るとリダイレクトやパイプの機能を勝手に付け加えて肥大化しちゃう。
ターミナルソフト「mabterm」で有名な馬淵さんから「それはライブラリの問題で、気に入らなければライブラリに手を入れればいい」と言われちゃいましたが、そんなことできるほど優秀なアタマではありません。アホをバカにしないでください(笑)。
それだけではありません。
MSXには「できるだけBIOSを使う」という不文律?があって直接I/Oを叩いていいのはVDPだけとなっています。でもね、PSG関連のBIOS「WRTPSG」の本体部分(1102H〜)を見ると、
DI
OUT (PSG.LW),A
PUSH AF
LD A,E
OUT (PSG.DW),A
EI
POP AF
RET
ほれほれ、勝手に割り込み許可してRETしてるでしょ!
M80とかMSX-Cとか使ってると、素知らぬ顔してこういうコードを吐き出してくるのです。「だって、BIOSを使うのがキマリだも〜ん。」
こういうのを見ると、MSXのBASIC-ROMを書き換えてやりたくなります。
なんか、今日は愚痴ばかりになりました。「私はASM.COMから進化しません!」宣言みたいな部分もw
SDカードアクセスのコーディングに向けて、肩をグルグル回している状態とご理解ください<(_ _)>ペコリ
|
全体表示





>ちゃんとビット操作用の命令
たしかに便利な命令があるんですよね。最近は、あれっ、これはどうやって使うんでっけ?と思うことが多くなりました。
覚えることも、使うことも最小限ですまそうとしているかもしれません(汗;)。これはもう、脳細胞が劣化してますね。脳が活性化できるよう、命令もいろいろ使う訓練をしないといけないようです。
>ASM.COMを愛用する理由をもうひとつ
大変便利なツールです。だいたいは、これだけで済ませることができると思われます。MマガのMSX-CはMSX-DOS2用なのが気になっています。BASICを愛するならまちがいなく「ASM」を選ぶでしょう。
>コーディングに向けて、肩をグルグル
なるほど、ひざを回しながら、「ぐるぐるぐるぐる、グルコ*ミン」ってやつですね。
>BASIC-ROMを書き換えてやりたくなります
景気づけとして、書き換えてよしっ!
[ dotallcafe ]
2014/12/9(火) 午後 10:49
どーもーどもども(・∀・)
>BASIC-ROMを書き換えてやりたくなります
ターボRでは、
R800+RAM
R800+ROM
Z80+RAM
Z80+ROM
の4モードがあって、RAMが選択されている場合は「書き換え可能」と先人から聞いております。
「DI」「EI」の部分を「NOP」に書き換えできるということですね。
それどころかZ80+RAMモードなら、削除されたカセットBIOS丸ごと復活も可能かも?
ただし、システム側からはROMとして認識されているようなので、書き換えには何らかのワザが必要なようです。
PDL関数の復活を図りたいですねえ。MSXは奥深いです〜。
[ KIKI ]
2014/12/10(水) 午前 0:52
>Z80+RAMモードなら、削除されたカセットBIOS
あ〜、Babooかどこかで見たような気がします。すっかり忘れていました。
>PDL関数の復活を図りたいですねえ
これは、懐かしいPDLを使った「ダメよ〜ダメダメ、すかっしゅだけよん」でしたっけ?でBIOS吸い出していましたよね(汗;)。
そのBIOSを組み込んで。「今だけZ80(PDLのBIOS処理を使う時だけZ80モード切り換え)」を使ってturboRで遊んだ記憶があるようなないような気がします(笑)。
これはたしか、「ダンナ」と呼ばれていたプロジェクトだったと思います。その後、turboRで動作するMSXエミュレータでもPDLが使えることを確認した?かもしれません。
今となれば、このエミュレータとカセットI/Fカートリッジがあれば、turboRでもカセットが使えそうな気がします。これもまた夢の夢でしょうか。
懐かしい記憶がよみがえりました。
[ dotallcafe ]
2014/12/10(水) 午後 7:02
turboRは、最初こそ「おおっ速い!」と感動しましたが、しばらくすると「この進化の方向は誤っているのでは?」という疑念が湧いてきたものです。
コナミの機能提案に耳を貸さなかったのでコナミがそっぽ向いたというウワサとか、カシオの安かろう路線を許したツケとか、残念な分岐点がいくつもありました。
それでもいまだにMSXが生き延びているのは、内部情報をさらけだしたフレンドリーさにあると思います。
端子をいじり倒す楽しさの点では、Arduinoを先取りしていました。
turboRをMSX1化するなんて、酔狂で面白いですねえ(・∀・)
[ KIKI ]
2014/12/10(水) 午後 9:29