ここから本文です
Dr.Kikkie (KIKI) : 不許無断天才|免責:本稿を真に受けて損害があっても知らん。

書庫過去の投稿日別表示

全1ページ

[1]

苦悶式SDカード 2

以前から不思議に思っているのですがね。
レジスタの値の特定のビットを「1」にしたり「0」にしたりするときに、なんで「AND」や「OR」が多用されるんでしょうか?
ちゃんとビット操作用の命令「SET」「RES」があるのに。
 
イメージ 1
 
例えば、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カードアクセスのコーディングに向けて、肩をグルグル回している状態とご理解ください<(_ _)>ペコリ

全1ページ

[1]

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
31

過去の記事一覧

最新のコメント最新のコメント

すべて表示

kik**41010
kik**41010
非公開 / 非公開
人気度
Yahoo!ブログヘルプ - ブログ人気度について

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

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

[PR]お得情報

数量限定!イオンおまとめ企画
「無料お試しクーポン」か
「値引きクーポン」が必ず当たる!
ふるさと納税サイト≪さとふる≫
実質2000円で好きなお礼品を選べる
毎日人気ランキング更新中!

その他のキャンペーン

みんなの更新記事