Hyfaxのこと-あろけーと

x86リアルモードでモニターを作ろうシリーズです。
Windows11+wsl2で構築しています。

発端

なんかけっこう長くやってる気がするんですが、動くコマンドはechoの一つだけという現状。とってもさみしいです。ここはコマンドを増やしたいところ。
ファイルシステムまわりのプログラムの勉強と修行を兼ねてlsなんかはどうだろうか、とか思うわけです。

ルートディレクトリのLBAは保存してあるし、ディレクトリエントリをファイル名でサーチする処理はファイルロードで作ったし、ちょっと流用すればできそうな気がするんです。

ええと、ルートディレクトリをバッファに読み込んで……
バッファのサイズはどうしよう……
位置はどこにあればいいんだろう……
ほかの処理とかち合わないようにしないと……
ええと、ええと、ええと……

えぇい!面倒くさい!使い捨てのバッファなんか、いちいち細かいところなんか考えてられるかっ!!

というわけでメモリ・アロケータを作成することになるのでした。

仕様っぽなにか

もうね、使えるメモリは全部対象にしてしまおうと思うんです。面倒くさいので。
0x10000~0xA0000までをアプリケーションエリアとしているので、ここが対象です。

管理はビットマップで行きましょう。対象が(今どきのメモリサイズと比べて)大きくないので、それほどエリアコストになりません。

ページサイズは4KByteで。4KByteは大きすぎる気もしますが(今どきのメモリと比べれば)大した問題にならないでしょう

ビットマップそのものは最初のユーザーとしましょう。対象の1ページ目はビットマップスペースです。

システムコールで取得、解放できるように。

ビットマップのビットが使えるかどうかのテスト、そしてセットとクリアはマクロにします。処理が小さいこと、呼び出しコストがもったいないことを考慮しました。

厳密な排他処理は考慮しません。所詮はシングルタスク、シングルユーザのシステムですし。

こんなもんでしょうか。

マクロ

マップのビットが立っているかどうかを確認するマクロはこんな感じです。
bxで指定したbitの内容を8bitレジスタに返します。

bitをセットするマクロです。bxで指定されたbitをセットします。

bitをクリアするマクロはこう。bxで指定されたbitをクリアします。

初期化・アロケート・フリー

初期化はこうなります。何はともあれまず最初にこれを実行します。
自分自身の登録もしています。

アロケート処理です。失敗するとdx:axが0、Cフラグが立ちます。

フリー処理です。失敗するとaxに1、Cフラグが立ちます。

定数、変数はこうです。

おわりに

既存のloadappにも組み込みました。monitorが動かないとシステムコールが使えないので、boot1から呼ばれたのかTTSから呼ばれたのかフラグで判定しました。
これでこれからは配置とか気にせずにメモリを使うことができます。

このソースはgithubで公開しています。よろしければどうぞ。
https://github.com/CbWB-Inc/software/tree/main/laboratory/lab02/hyfax-08-alloc

今更ですがalloct.asmはテスト用のドライバアプリです。TTSがコマンド待ちになったら『alloct』と打ち込めば実行されます。

《2026/01/21 22:03:47》

Hyfaxのこと-整数が足りない(3)

x86リアルモードでモニターを作ろうシリーズです。
Windows11+wsl2で構築しています。

前回は 1桁除算(A ÷ digit) まで実装しました。
今回はその続きで、多桁 ÷ 多桁 に進みます。

ただし、最初に言っておきます。

今回の除算は「商を推定しません」。


なぜ推定しないのか

多桁除算というと、

  • 上位桁から商を推定
  • 掛けて引いて
  • 外れたら修正

という方法がよく紹介されます。

でも、今回扱っているのは 10進・1桁=0..9 の BCD です。
つまり、1桁の商は 最大でも 9

ならば、

引けるだけ引いて、その回数を数えればいい

という、極めて単純な方法が使えます。

  • 推定が不要
  • 外れも存在しない
  • 最大でも 9 回で確定

リアルモードで事故らせないなら、こちらの方が安全です。


基本方針(再確認)

今回の多桁除算は、以下の前提で実装しています。

  • 計算はすべて 絶対値
  • 符号は外側で処理
  • DHS(unpacked BCD)で演算
  • 商は 上位桁から1桁ずつ確定

やっていることは、完全に小学校の筆算です。


除算の流れ(全体像)

  1. 余り R を 0 で初期化
  2. 被除数の最上位桁から順に
    • R = R × 10
    • R = R + a[i]
  3. R >= 除数 B の間
    • R -= B
    • 商の桁を +1
  4. 商の1桁が確定
  5. 次の桁へ

この 2~4 を桁数分繰り返します。


実装の核心部分

このループは、

  • 比較
  • 引き算
  • 回数を数える

だけ。


tmp_div_guard について

mov byte [tmp_div_guard], 10

これは「保険」です。

  • 10進1桁なので、最大でも 9 回
  • バグって無限ループになるのを防ぐ

実装中に自分を救ってくれるタイプのコードです。


この方法の良いところ

  • 実装が単純
  • フラグとレジスタの破壊が追いやすい
  • normalize のタイミングが明確
  • デバッグしやすい

速度は速くありませんが、
リアルモードでは 正しく終わることの方が重要 です。


実際に動かしてみると

  • 小さい数でも
  • 桁数が多くても
  • 同じ流れで処理できる

という、非常に素直な挙動になります。

「計算している感」がちゃんとあります。


ここまで来て思うこと

add / sub / mul / div が揃ったことで、
ようやく 10進整数を「普通に扱える」状態 になりました。

64bit に収まらない数を
無理に 2 進で扱わなくていい、というのは気が楽です。


おわりに

これで10進20桁の演算ができるようになりました。40桁にしようと思えば簡単にできます。それにしても……

いったいわたしは何を目指しているのでしょう???

自分でもわからなくなってきました。

今回はここまでです。
読んでいただきありがとうございました。

このソースはgithubで公開しています。よろしければどうぞ。
https://github.com/CbWB-Inc/software/tree/main/laboratory/lab02/hyfax-07-digit

《2026/1/13 16:01:21》

Hyfaxのこと-整数が足りない(2)

x86リアルモードでモニターを作ろうシリーズです。Windows11+wsl2で構築しています。

前回は BCD ライブラリを「導入しただけ」で終わりました。
おなか一杯とか言って終わりにしました。

……が、さすがに導入だけで終わると「で、何ができるの?」というお話になるので、今回は 計算のコア をやります。

やることは単純で、

  • PHS(packed) ⇄ DHS(unpacked)
  • 計算は DHS で筆算
  • 最後に PHS に戻す

という流れ。前回の変換関数(pack/unpack)はそのまま使います。


方針:符号つき四則演算は “絶対値” に落として処理する

BCD筆算は「桁列」を扱うので、符号まで混ぜると面倒になります。
なので基本方針はこれ。

  1. 符号だけ先に剥がす(signを別に持つ)
  2. 絶対値で add/sub/mul/div
  3. 最後に 符号を付け直す

これをやるだけで、気持ちがだいぶ楽になります。


まずは比較:cmp_abs(絶対値比較)

加減算は「どっちが大きい?」がないと破綻します。
DHS は 下位桁が index 0 の “リトルエンディアン桁列” として扱うことにします(0桁目が1の位)。


絶対値加算:add_abs(桁上がりだけ)

これは筆算なので素直です。
A+B を計算して、carry を次桁へ。


絶対値減算:sub_abs(借りだけ)

A-B(ただし |A|>=|B| を前提)です。


ここで “符号つき add/sub” を組む

符号の組み合わせは結局こうです。

  • same sign:絶対値加算、符号はそのまま
  • different sign:大きい方から小さい方を引いて、符号は“大きい方”

これで 符号付き加算 ができます。

(この辺は “書くのは面倒だけど考え方は小学生とか中学生なので、コードの全体は github に置くことにします)


乗算:まずは「1桁 × 多桁」(mul_digit)

いきなり多桁×多桁をやると泣くので、最初はこれ。

  • C = A * digit(0..9)

この mul_digit ができると、次は「筆算の掛け算」がそのまま書けます。
(つまり “各桁の mul_digit をずらしながら足す”)


除算:今回は 割り算の入口だけ(div_digit)

本当は除算まで行きたいところですが、除算は一気に面倒になります。
なので今回は入口として、

  • A ÷ digit(0..9)で 商と余り

を作って終わります。
これがあると「10進→2進」「2進→10進」の補助にも使えて便利です。
上位桁から順に余りを *10 倍して足し、割り算を行う筆算そのままの流れで商を構築します。


実行できること

この段階でできることは、

  • 符号つき加算/減算(PHS)
  • 1桁乗算(DHS)
  • 1桁除算(DHS)

です。

「64bitが欲しい」から始まったのに、気づいたら 10進20桁 を手に入れつつあります。
現代の感覚だと遠回りすぎますが、リアルモードだとこれが近道です。たぶん。


そんなこんなで

まだ “おなか一杯” にはなってません。
むしろ、ここからが地獄です。

次回は多分、

  • 多桁×多桁(筆算の掛け算)
  • 正規化の地獄(len と leading zero)
  • そして、みんな大好き「ゼロの符号問題」

あたりをやります。やる……はず。

今回はここまでです。お付き合いいただきありがとうございました。

《2026/1/13 12:32:06》

Hyfaxのこと-整数が足りない

x86リアルモードでモニターを作ろうシリーズです。Windows11+wsl2で構築しています。

皆さんは開発していて整数が足りないと思ったことはないでしょうか?
ない?
そうですか。16Bitリアルモードで開発している変態誰かさんとは違いますか……

気を取り直して。
そう、16ビットのレジスタひとつで扱えるのは、たかだか 65,535 まで。32ビットに拡張したところで、42億。十分大きく見えるけれど、 現代の感覚からすればちょっとした統計計算や、少し精度の高い固定小数点演算で、あっという間にその壁にぶつかってしまいます。

これを何とかしたかった。選択肢として32bitライブラリを自作するってのがあるんですがテクニカルでめんどいうえ桁数も先に述べた通り十分じゃない。んじゃ、64Bitライブラリはといえば輪をかけてめんどいという。
小学生でもわかる簡単な方法で何とかならないものか?

あるんですね、これが。その方法とは『筆算』と呼ばれます。で、64Bitで表現できる10進20桁の筆算ライブラリを作ってみようと思うわけです。

今回、Hyfaxに導入することにしたのが BCD(二進化十進表現) ライブラリです。桁数さえ確保すれば「無限」に近い精度を扱えるBCDです。64Bitどころか128Bitだって怖くはないのです。処理時間さえ気にしなければ。

実装の裏側:PHSとDHS、I64HS

今回のライブラリでは、2つのデータ構造を使い分けています。

  1. PHS (Packed Handle Structure): メモリ効率を重視した形式。1バイトに2桁を詰め込みます。20桁の数値を10バイト程度で保持できる、いわば「保存用」の姿です。
  2. DHS (Digit Handle Structure): 計算効率を重視した形式。1バイトに1桁を贅沢に使い、内部的な演算(加減乗除)はこの形で行います。
  3. I64HS (Integer 64 Handle Structure): いわゆる64Bitバイナリです。外部とのやり取りはこの形式になります。

構造としてはこうですね。

相互変換

まず最初に、I64HSを扱うユーティリティ、I64HSをPHSに変換する処理、PHSをDHSと相互変換する処理を作ります。

I64HS関連処理

I64HS構造体を0クリアする処理です。

I64HS構造体を2の補数表現にする処理です。

I64HSからPHSに変換する処理です。

PHS関連処理

PHSを正規化する処理です。

PHSをDHSに変換する処理です。

DHSをPHSに変換する処理です。

はい。おなか一杯になりました。

導入だけになってしまいましたが、今回はここまでにします。
次回以降、どうなるんでしょう。不安です。

《2026/1/12 01:41:24》

Hyfaxのこと-呼べば応えるecho哉

x86リアルモードでモニターを作ろうシリーズです。Windows11+wsl2で構築しています。

キーボードをタイプしてプログラムを起動できるようになりました。そこでコマンドを作ってみようと思います。定番ではあるものの作るコマンドはechoです。与えられた引数を表示するだけのプログラムですね。実用性はともかく、引数を受け取ってそれを操作する基本を押さえるのに重宝するプログラムです。

処理の概要

今回作るまで知らなかったのですが例えば『echo aaa bbb』とか打ち込むと途中の複数の空白を一つにまとめて『aaa bbb』と表示されるのですね。何のことはない、コマンド自体をsplitでパースして、コマンド自体を除いた引数部分を順に表示するという仕様なわけです。

ということであれば、もうsplitはできているわけで、コマンド部分を読み取り、それを実行し、コマンド内では引数部分を列挙表示すればよいということです。これならすぐできそうです。

実際の実行イメージはこんな感じでしょうか

レジスタはどれでもよかったのですが、axは成功失敗を受け取るために使用していたので、引数はbxで渡しています。bxにsplitした引数を設定して、アプリを実行です。

実際の実行部にあわせて、必要な部分で引数を設定していきます。まず最初はtss.asmですね。抜粋するとこんな感じ。

コマンドの実行はシステムコールにしています。

で、monitor.asmのsvc_execがこんな感じ。

都合、loadapp.asm、monitor.asm、tts.asmの3つを変更しています。

echo本体

echo本体は引数を受け取って順次表示するだけです。こんな感じ。

デバッグ用の表示がそのまま残っていますが、許してください。いつ必要になるかわからない開発中の状況ですんでそのままにしてあります。

実際の実行結果はこうなります。

終わりに

今回はここまでになります。

それにしても、コマンドとか作ってできることが多くなってくるとわくわくしますよね♪

このソースはgithubで公開しています。よろしければどうぞ。
https://github.com/CbWB-Inc/software/tree/main/laboratory/lab02/hyfax-05-echo

《2026/01/11 15:38:35》

Hyfaxのこと-大文字小文字

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内でコマンド名、ファイル名は大文字に変換して実行するように修正しようと思います。

やることはめちゃくちゃ簡単で、こんな感じ。

関数ucaseはこんな感じ。

そして実行結果。

わざわざ大文字にする必要はなくなりました。大文字でも混在でも動きます♪

今回はここまでです。お付き合いいただきありがとうございました。

このソースはgithubで公開しています。よろしければどうぞ。
https://github.com/CbWB-Inc/software/tree/main/laboratory/lab02/hyfax-04-ucase

《2026/01/05 22:40:35》

Hyfaxのこと-こんにちはTTS

x86リアルモードでモニターを作ろうシリーズです。
まずshell機能を独立させるかMonitorに取り込むかという問題ですが、shellとして独立させることにしました。そのうえ常駐します。このため、Monitorとほぼ同様のメモリに展開されます。アプリケーションとは完全独立です。
shellはTiny Thin Shell、小さい最低限のシェルということでTSSという名称にしました。

TTS本体

TTSはline_input(1行入力)を行います。
次にパースしたトップの文字列をファイル名とみなしてMonitorに実行依頼をします。
大枠で言うとこれだけです。

split処理

パース処理についてもちょっと触れておきますね。パースとか言ってますけど、内容はsplitです。入力された文字列を空白を区切り文字として複数の文字列に分解するアレです。データ構造はこんな感じ。

先頭にアドレス配列があり、アイテム数を持っていてこれで管理します。
splitのコードはこちら。

83形式編集処理

最後は83形式に変換する関数です。
『APP.BIN』の形式を『APP BIN』の11文字にします。

主要な関数は以上になります。
これらをうまく組み込んでTTSは成り立っています。

実行結果図

実行結果はこんな感じになります。

所感

セグメントが辛かったです。かつてセグメントが面倒臭いとか、厄介だとかいろいろ話は聞いていたのですが、思っていたより10倍も面倒くさかったなぁ。
特に文字列が複数セグメントに設置されているような場合、セグメント合わせに多大な時間がかかることがわかりました。

元日そうそう丸一日セグメントと格闘してしまいました。

はい、今日はここまでです。お読みくださりありがとうございました。

このソースはgithubで公開しています。よろしければどうぞ。
https://github.com/CbWB-Inc/software/tree/main/laboratory/lab02/hyfax-03-hello-tts

《2026/01/02 06:12:12》

Hyfaxのこと―Shellへの遠い道(2)

x86リアルモードでMonitorプログラムを作ってみようの、第何回目だっけ?
よくわからなくなってますが、始めます。

一応ね、shellからコマンドを実行するところまで作ってみたんですよ。KBからファイル名を入力すると、そのファイルを実行するっていう感じで。shellの対話環境の基礎的な部分です。でもね、なんか気に入らないという。
実行結果はこんな感じです。

コマンドを打ち込むと内部コマンドならそれを実行(ただし現状では内部コマンドないので処理なし)、違うならファイルを検索して見つけたらロードして遷移です。

ただ記事を書く気にどうしてもなれなかったんですね。もやもやしてて。
構造はこんな感じでした。

①のファイルの実行は仕方ないです。Boot1からMonitorを呼ぶ経路は一つしかないし、クリティカルパスなので外せない。でもね②と③が気に入りません。
まったく同じ機能、ファイルを探して、見つけたら読み込んで、そこに遷移するってのが2か所にある。もやもやもや。

で、結局役割分担を間違えているんじゃないかと思ったわけです。こうなる方がいいんじゃないかと。

shellはコマンドを受け取って最低限の動作をする。ファイルの検索、ロード、遷移はMonitorに任せる。内部コマンドの時だけ自分で実行する。
きれいじゃないですか?

というわけで作り直しです。一応作ってしまったものはもったいないので、懺悔と供養のために公開しちゃいます。
https://github.com/CbWB-Inc/software/tree/main/laboratory/lab02/hyfax-02-hello-tts-X

作る前にきっちり設計しようね!

というお話でした。

《2026/01/01 3:23:12》

Hyfaxのこと―Shellへの遠い道

MONITORが動くようになりAPP実行から終了までできるようになりました。でもそれだけです。まだ入力とかもほとんどできません。プログラム名の入力→実行とか出来るようにしたいな~……。

というわけで、まずはshellを目指すのでした。これがないとHyfax君と会話できないし♪
shellといっても超簡易版です。最初ですんで何かキーを押したら反応が返ってくる、それくらいのやつ。

なにはともあれechoの実装

echoから作ります。shellに組み込む前に動作確認ですね。せっかくAPPが動くようになったんで、APP内で作って動作チェックして、それからshellとして取り込みましょう。
ドライバのソースはこれ。

本体がこちら。

実行結果

ちゃんと返ってきてます。これで勝ち確ですよね。アプリ名を入力して、前回作ったapploadに渡せば実行できる流れです。とはいえ今はappに居る関係上、このまま実行するとアドレスが被るんで動かないんでしょうけれども。動かすにはもう少し調整が必要です。(今回はやりません。)

履歴機能とか

コマンド(らしきもの)が入力できるようになると、欲しくなってくるのが履歴機能です。command historyですね。以前打ち込んだ内容を↑キーとか↓キーで表示してくれるやつです。プログラミングの練習がてら上下カーソルキーで文字列を変更するプログラムも書いてみましょう。

実行確認用ドライバのソースはこれ。

本体のソースはこれです。

実行結果はこちら。

上下キーでone、two、three、fourが切り替わります。

そして1行入力へ

echoとhistoryが形になりました。次にこれを悪魔合体させて1行入力を作りましょう。
例によって確認用ドライバのソースはこれ。

本体のソースはこちら。

上下キーで履歴の内容を表示、文字入力可能でエンターキーで確定して戻ります。
戻ったらバッファの内容を表示して文字数、バッファをクリアしています。
実行結果はこちら。

履歴を切り替えてバッファに反映、文字入力をバッファに反映、履歴と文字入力を共にバッファに反映、それぞれできています。
追加機能として,tabキーで現在の履歴を即時反映させます。直前のコマンド表示させるのに上下キーで上って降りてなんてしたくないですから。

(tabが素通しで文字化けしたんで機能を得割り振ったなんてことはないですよ?
本当のところは、どう、なのかですか?
禁則事項です♪)

shellへの遠い道

これで文字列を入力することができるようになります。受け取った文字列をコマンドとして実行したり処理を振り分けたりできるようになるということですね。

現状ではまだ本体に組み込みません。MONIOTRにshell機能を持たせるか、shellとして独立したapp扱いするか決めかねているからです。それによってメモリ配置も考え直す必要があります。今後の宿題ですね。

今回はここまでです。お付き合いありがとうございましたm(_ _)m

この連載の成果物はgithubに公開しています。よろしければどうぞ。
https://github.com/CbWB-Inc/software/tree/main/laboratory/lab02/hyfax-01-long-road-to-shell

《2025/12/28 15:34:41》

Hyfaxのこと(8)

x86リアルモードで動くモニタプログラムのHyfaxを作るお話の8回目です。boot0→boot1→monitorとやってきて、monitorに機能を実装しました。今回はmonitorからappをロードし実行する部分です。

アプリのロードと起動

実はアプリのロードと起動って、実を言うともう完成してるって言ってもいいんですよね。そもそも既にあるboot1の機能は

①『MONITOR BIN』をルートディレクトリから探す
②見つかった『MONITOR BIN』をメモリに読み込む
③読み込んだメモリに制御を移す

という処理をやっているわけです。んじゃmonitorは何をするのかというと

①『APP BIN』をルートディレクトリから探す
②見つかった『APP BIN』をメモリに読み込む
③読み込んだメモリに制御を移す

何のことはない、ファイル名が違うだけなんです。(厳密に言うと、読み込むメモリの位置も違うんですが。)そこだけこちょこちょっと変えれば完成してしまうのですね。
ただ、boot1をまるっとコピーして必要な部分だけ修正するのは楽なんですが、例によって「ほとんど同じコードがあちこちに存在する」というのがね。背筋がぞわぞわしてくるので関数化してしまいます。
該当部分をloadapp.asmにくくりだして修正を加えます。
axにファイル名、es:bxに読み込むエリアのセグメントとオフセットを指定します。

こうするとboot1.asmがどうなるかというと、こうなります。すっかすかです。

monitor.asmにもloadappを呼び出す部分を追加します。

実行結果はこちら。

monitorからのHello、appからのHello、Monitor内・App内で実行したSyscallの結果が確認できます。

終わりに

8回にわたり続けてきました『Hyfaxのこと』もこれで一区切りです。この後は文字入力を可能にして、簡易シェルを作成し、複数アプリを実行してもよし、マルチタスクに挑戦してもよし。ロングモードに移行してもよしです。望むままの世界が開けています。

さて、名残は尽きないものの、皆様の開発ライフに幸が多からんことを祈りつつ、この辺で終わりにしたいと思います。
お付き合いありがとうございました。

この連載の成果物はgithubに公開しています。よろしければどうぞ。
https://github.com/CbWB-Inc/software/tree/main/laboratory/lab02/hyfax_base

《2025/12/21 1:08:21》