x86リアルモードでモニターを作ろうシリーズです。
これまでで別途作ったプログラムを実行することができるようになりました。
その時に、例えば『APP.BIN』とすべて大文字で入力する必要がありました。
元のファイルは『app.bin』で小文字なんですね。これFATの仕様で大文字しか使えないんです。これでちょっと悩んでました。で、chatGPTと相談したわけです。
わたし
ちょっと相談なんだけど、今Hyfaxって大文字で外部コマンド名を入れないと実行してくれないんだけど、これって大文字変換してkら実行する方がいいのかしら?どう思う?
chatGPT
うん、その相談はかなり「らしい」ところ突いてると思う。
結論から言うと、Hyfax側で大文字変換してから実行するのが一番無難。
一言で言うなら
「ユーザーの指をFATに合わせるな、Hyfaxが寄れ」
って感じかな^^
わたし
あー、なるほどね。FATの仕様にユーザを巻き込むのは確かに違うか。変換が楽なら変換しちゃった方が親切か。内部コマンドも大文字小文字を区別しない方に寄せちゃえば一貫性は確保できるか。うーん。その方向で行こうかな。
chatGPT
うん、その理解で完全に筋が通ってると思う。
- FATの都合は内部に隠す
- ユーザ入力は寛容に受ける
- 内部コマンド/外部コマンドを同一ルールで扱う
この3点が揃うと、Hyfaxの性格が一段はっきりするね。
これは「親切」でもあるけど、それ以上に
HyfaxはFATのOSである
っていう立場表明にもなってる気がする。
MS-DOS / CP/M の系譜に素直に乗ってる感じで、いい。
その方向で進めてOKだと思うよ。
わたし
いや、個人的にはFATが小文字認識しないのはバグだと思ってるから。わたし。
chatGPT
あー……うん、それはかなり共感する^^;
正直に言うと、その感覚は
「後知恵で見たら完全に正しい」側だと思う。
わたし
最終的にはさ、大文字小文字をきちんと区別する仕様にしたいという気持ちもあるの。
chatGPT
うん、その気持ちもすごくまっとうだと思う。
そしてね、今の流れだと矛盾してない。
たとえば将来:
fs = FAT → case insensitive (compat)
fs = HYFS → case sensitive (native)
Hyfaxは
- FSが決める
- シェルは従う
って構造にできる。
今の「正規化」は
その未来を壊さない仮実装。
わたし
あー、そっか。shellで吸収しとけばいいのか。
chatGPT
そう、それそれ。
その一言で全部つながった感じがする。
「shellで吸収する」が一番きれい
これが効いてくる理由は:
- FSの欠陥をFS層で直さない
- Monitor(カーネル)を汚さない
- ユーザインタフェースで丸める
つまり
「人間が打つ文字」は shell の責任
って線引き。
Hyfaxの構造にすごく合ってる。
そんなこんなで
というようなディスカッション(抜粋)がありまして、shell内でコマンド名、ファイル名は大文字に変換して実行するように修正しようと思います。
やることはめちゃくちゃ簡単で、こんな感じ。
; 入力文字列をパース
; DS:SI = 入力文字列
; ES:DI = THS 構造体先頭
; al = 区切り文字
mov si, line_buf
mov di, line_buf_ths
mov al, ' '
call split
; 第一パラメータを大文字変換
mov ax, [line_buf_ths + THS.off + 0]
call ucase
; ファイル名候補を抽出
mov ax, file_name
mov bx, [line_buf_ths + THS.off + 0]
call strcpy
関数ucaseはこんな感じ。
; ----------------------------------------
; ucase
; DS:ax -> NUL終端文字列を大文字化
; ----------------------------------------
ucase:
push ax
mov si, ax
.next:
lodsb ; AL = [SI], SI++
test al, al
jz .done ; NULで終了
cmp al, 'a'
jb .next
cmp al, 'z'
ja .next
sub al, 0x20 ; 'a'->'A'
mov [si-1], al ; 書き戻し
jmp .next
.done:
pop ax
ret
そして実行結果。

わざわざ大文字にする必要はなくなりました。大文字でも混在でも動きます♪
今回はここまでです。お付き合いいただきありがとうございました。
このソースはgithubで公開しています。よろしければどうぞ。
https://github.com/CbWB-Inc/software/tree/main/laboratory/lab02/hyfax-04-ucase
《2026/01/05 22:40:35》