File size: 4,850 Bytes
23715ae
7cbbe8b
 
23715ae
d00bf3f
23715ae
 
 
7cbbe8b
d00bf3f
7cbbe8b
d00bf3f
64ace35
 
 
 
 
 
3085e1b
b1ed896
3085e1b
 
 
 
 
 
 
 
 
 
 
 
d00bf3f
7cbbe8b
d00bf3f
22b0596
5791f39
b1ed896
3085e1b
991a8c8
3085e1b
 
 
 
 
cf3b690
d00bf3f
7cbbe8b
d00bf3f
7cbbe8b
d00bf3f
 
7cbbe8b
 
d00bf3f
 
7cbbe8b
d00bf3f
7cbbe8b
d00bf3f
7cbbe8b
d00bf3f
7cbbe8b
 
 
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
---
title: 小貓中文 FreeDOS
emoji: 🐱
colorFrom: blue
colorTo: green
sdk: static
---

# 小貓中文 (XiaoMao Chinese)

DOS 常駐(TSR)的 Big5 中文顯示與注音輸入外掛,在瀏覽器(含手機)中以 FreeDOS + js-dos 6.22 執行。載入後回到一般 DOS 提示字元,DOS 指令照常使用,並可直接輸入、顯示中文。全部元件皆為開源,建置時由上游下載並驗證雜湊。

## 作者與授權

- 作者:**HelloSun** 版本:**1.0**(首版,2026-10-25) 版權:Copyright (C) 2026 HelloSun
- 授權:GNU GPL-3.0-only,並依 GPLv3 第 7(b) 條**附加條款:複製或修改時必須保留作者聲明,不得移除**(見 `LICENSE`)。
- 程式啟動時會顯示作者與授權聲明,網頁頁尾也有;請勿移除。第三方元件(FreeDOS、HimemX、GNU Unifont、js-dos 等)維持各自授權,見 `NOTICE.md`。

## 運作方式(傳統中文系統作法)

- 程式看到的仍是 80×25 文字模式:文字畫面保存在 `B800:0000`(影子文字緩衝區),所以 **PE2 這類直接寫顯示記憶體的程式**與使用 INT 10h 的程式都能照常運作。
- 實際顯示是 640×400 的 16 色繪圖模式;常駐程式把影子文字畫成像素:英數用 ROM 8×16 字型,Big5 雙位元組用放在 XMS 的 16×16 字型。**畫面上不同漢字數量沒有上限**(整頁約 900 個不同漢字已測過)。
- 攔截 INT 10h:完整模擬文字模式 BIOS(模式設定、游標、捲動、讀寫字元、TTY、字串);程式要求繪圖模式時(例如 13h)直接交給 BIOS,回到文字模式時自動恢復。
- 攔截 INT 16h:`Ctrl+Space` 切換注音/英數,選好的字以兩個按鍵位元組交給程式,同時是畫面重繪的觸發點;注音候選列畫在最底列,用完即還原。
- `Ctrl+\` 切換 Big5 顯示(遇到使用 CP437 畫框字元的程式時關閉)。INT 2Fh `AX=D7A0h` 防重複載入。
- 常駐約 15 KB 傳統記憶體;字型與詞庫在 XMS(FreeDOS 開機片以 HimemX 提供)。載入時(及再次執行 `XIAOMAO`)顯示常駐大小、可用傳統記憶體與 XMS(即時 MEM)。

## 附加軟體(開機片內)

- `XEDIT.EXE`:仿 PE2 的全螢幕文字編輯器,直接寫 `B800` 並用 INT 10h/16h,可編輯中文(`XEDIT DEMO.TXT`;F2 存檔、F3/Esc 離開)。
- FreeDOS:`COMMAND.COM`(FreeCOM)、`MEM`、`MORE`、`XCOPY`、`ATTRIB`、`DELTREE`;`HIMEMX.EXE`(XMS)。
- `DEMO.TXT`:中文示範文字(`TYPE DEMO.TXT`)。

## 操作

- 網頁上的 **「▶ 示範 Demo」** 按鈕會自動操作 DOS 並以字幕說明每一步(約 40 秒,字幕停留時間按閱讀速度設計):TYPE 顯示中文、開啟注音、輸入「你好電腦」、候選字分頁、XEDIT 編輯中文;可隨時按「■ 停止示範」。

- 點選 DOS 畫面後使用實體鍵盤,或用畫面下方的虛擬鍵盤(含 Shift、`\`、`:`、Tab)。
- `Ctrl+Space` 切換注音/英數(網頁有按鈕);`Ctrl+\` 切換 Big5 顯示(網頁有按鈕)。
- 注音採倚天鍵位;輸入音節後按聲調鍵(`6 3 4 7`)或空白鍵出候選字,按 `1`–`9` 選字。候選字超過 9 個時分頁(右側顯示 `2/7`):按空白鍵環形切換下一頁(最後一頁再按回到第一頁);只有一頁時空白鍵/Enter 選第一個。每個音最多 63 個候選字。

## 限制

- 不支援直接改寫 CRTC/VGA 暫存器做文字模式特效(游標位置暫存器除外)、載入自訂字型、閃爍屬性(以高亮背景代替)。
- 文字畫面以約 18 次/秒更新(隨計時器),極快速的畫面動畫會有延遲。
- 只有注音輸入法,沒有詞組/聯想。

## 一鍵建置與部署

主機需有:`bash gcc make nasm mtools unzip curl gzip python3(含 venv)`。其餘(Open Watcom 1.9、JWasm、HimemX 原始碼、GNU Unifont、FreeDOS 1.4、js-dos 6.22.60、Python 套件)由 `build.sh` 自動下載、驗證、建置。

```sh
HF_TOKEN=hf_xxx HF_SPACE=user/space ./build.sh   # 建置並上傳
./build.sh                                        # 只建置到 dist/
```

`HF_TOKEN`、`HF_SPACE` 是 `build.sh` 開頭的變數(可用環境變數覆寫);token 絕不寫入專案。上傳內容含網頁、自架 DOSBox、開機映像,以及開發包 `dev/xiaomao-dev.zip` 與 `dev/HANDOFF.md`。

HF 靜態 Space 以無 CORS 的重新導向提供二進位檔,所以 DOSBox 核心與開機映像以 base64 文字放在 `emu.b64.js`/`dos.b64.js`,頁面載入後轉成 Blob 交給 js-dos,不依賴任何外部 CDN。

接手開發請讀 `HANDOFF.md`。第三方授權見 `NOTICE.md`。

## 授權

本專案原始碼:GNU GPL-3.0-only(`LICENSE`、`LICENSE-GPL-3.0.txt`)。FreeDOS、HimemX、GNU Unifont、js-dos 各依其上游授權,詳見 `NOTICE.md`。