【2024.09.18更新】新入力モード「漢字モード(漢字BASIC)」の解説を追加しました。「ヷ」と「ヺ」が入力できるようになりました。
【2024.07.17更新】日本語BASIC環境下では文字入力が正常に働かない旨の解説を追加しました。
【2024.03.17更新】「ゔ」と「ヴ」が入力できるようになりました。
【2021.20.22更新】初版公開
PCやスマホでは文字として存在しないMSXの「半角ひらがな」や「GRAPH文字」を、MSXPenの入力フォームでどうやったら入力できるのか?
実は全角文字で入力するとMSXの半角文字へ自動的に変換されます。記事の後半に、コピペ用文字列があります。
MSXPen とは
MSX BASICによるプログラムおよびZ80アセンブラコードをWebブラウザ上で作成および実行できる、仮想プログラミング環境です。ソースコードをWebの入力フォームに入れるだけ!スマホでも動きます!
MSXPenは2024年9月より2つの入力モードが存在します。用途により使い分けてください。
- Standardモード…半角文字・GRAPH文字中心の、標準的な入力モード
- 漢字モード(漢字BASIC)…漢字BASICを用いた日本語の全角文字表示を行う入力モード
MSXPenの原理は、画面のコード入力フォームに入力されたテキストをコンテンツ化し、同じくWebブラウザで動作するMSXのエミュレータ「WebMSX」の自動起動プログラム(AUTOEXEC.BAS)で実行する、というものです。
Webデザイン界隈でよく使われる「CodePen」というHTML・CSS・JavaScriptのコーディングシェアサイトがあるんですが、私はMSXPenは「Webブラウザで動作するMSXエミュレータ「WebMSX」の実行環境をカスタマイズしてコーディングシェアできるようにしたWebサービス」という認識です。
Standardモード
2024年9月より「漢字モード(漢字BASIC)」が追加されたため、今までの入力方法は「Standardモード」と命名されました。Webブラウザで直接入力できない「半角ひらがな」や「GRAPH文字」といったMSXの文字を、UTF-8(Unicode)で代用して入力するモードです。
仕様
- 入力フォームへ記入した文字は、全角文字・半角文字問わず、1バイト文字に置換されてMSXへ入力されます。
- MSXの仕様上、シフトJISコードで入力できる文字はそのまま利用可能です。つまり「半角カタカナ」や「、。」といった半角カナ記号も半角文字として入力できます。
- Webブラウザ上から入力できないMSXの「半角ひらがな」と「GRAPH文字」は、全角文字で入力するとMSXの半角文字へ自動的に変換されます。
ちなみに濁音・半濁音が付く全角文字は2文字に分解されて置換されます(「ガ」→「ガ」)。
入力できる文字
- 【GRAPH文字】♠♥♣♦○●月火水木金土日年円時分秒百千万大中小π┴┬┤├┼│─┌┐└┘╳
- 【英数字】 !"#$%&?()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
- 【英数字(全角文字)】 !”#$%&?()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|} ̄~
- 【ひらがな】をぁぃぅぇぉゃゅょっあいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわん
- 【カタカナ】ヲァィゥェォャュョッアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン
- 【カタカナ(半角文字)】ヲァィゥェォャュョッアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマ"ミムメモヤユヨラリルレロワン
- 【カナ記号】。「」、・ー゛゜
- 【カナ記号(半角文字)】。「」、・ー゙゚
- 【ひらがな(濁音・半濁音)】がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽゔ
- 【カタカナ(濁音・半濁音)】ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴヷヺ
コピペ用文字列
1 'Japanese Single-Byte Character Sets for MSXPen v0.19
2 CLS:LIST
10 '月火水木金土日年円時分秒百千万
11 'π┴┬┤├┼│─┌┐└┘╳大中小
12 ' !”#$%&’()*+,-./
13 '0123456789:;<=>?
14 '@ABCDEFGHIJKLMNO
15 'PQRSTUVWXYZ[¥]^_
16 '`abcdefghijklmno
17 'pqrstuvwxyz{|}~ ̄〜‾
18 '♠♥♣♦○●をぁぃぅぇぉゃゅょっ
19 'あいうえおかきくけこさしすせそ
20 ' 。「」、・ヲァィゥェォャュョッ
21 'ーアイウエオカキクケコサシスセソ
22 'タチツテトナニヌネノハヒフヘホマ
23 'ミムメモヤユヨラリルレロワンヴヷヺ゛゜
24 'たちつてとなにぬねのはひふへほま
25 'みむめもやゆよらりるれろわんゔ
↓ MSXPenでの実行結果はこちら ↓ msxpen.com
まだ少し置換バグがありますが随時修正してゆきます。
漢字モード(漢字BASIC)
2024年9月よりリリースされた、新しい入力モードです。日本のMSX2+以降に標準搭載していた「漢字ドライバ拡張BASIC(いわゆるCALL KANJIの漢字BASIC)」の文字入力に用います。
仕様
- 入力フォームに記入した全角文字は、シフトJISコード(2バイト文字)に置換されてMSXへ入力されます。
- シフトJISコードに存在する「半角カタカナ」や「、。」といった半角カナ記号は、半角文字として入力されます。
- 入力フォームの文字コードはUTF-8(Unicode)なため、MSXの漢字ROMに存在しない文字も入力できてしまいます。MSXの漢字ROMに存在しない全角文字は「✕」へ置換されます。
このモードはあくまでも入力フォームの文字がシフトJISへ置換されて入力されるだけで、漢字BASICの自動起動は行いません。必ずBASICプログラムに「CALL KANJI」を記述して、漢字BASICを起動するようにしてください。
コピペ用文字列
↓ MSXPenでの実行結果はこちら ↓ msxpen.com
まだ少し置換バグがありますが随時修正してゆきます。
旧JISの未定義領域に含まれたMSXの漢字ROMの独自拡張文字への対応
MSXの漢字ROMは旧JIS(JIS C 6226、いわゆる78JIS)ベースの文字コードですが、主に非漢字部分であるシフトJISコード 81ADh~859Eh には旧JISでは未定義なのに独自に実装された文字および新JIS(いわゆる83JIS)とは違う独自に実装された文字が含まれています。そのため、これらの文字は現在も他機種で互換性が失われた状態になっています。
↓ 非漢字部分の独自拡張文字について詳しくはこちら ↓ gigamix.hatenablog.com
2023年発売のMSX0 Stackに同梱されていた漢字ROMについても最新の規格(JIS X 0208やJIS X 0213)に合わせることはなく旧JIS+独自拡張のままでした。
MSXの独自拡張だった文字(㌘や㎲等)はその後のJIS X 0213及びUnicodeで再定義された文字が多く含まれているので、これらもMSXPenでUTF-8から旧JISへ置換入力できるように準備中です。
文字 | Unicode | Shift_JIS |
---|---|---|
㈱ | U+3231 (PARENTHESIZED IDEOGRAPH STOCK) | 0x81AD |
㈲ | U+3232 (PARENTHESIZED IDEOGRAPH HAVE) | 0x81AE |
Ⅰ | U+2160 (ROMAN NUMERAL ONE) | 0x81AF |
Ⅱ | U+2161 (ROMAN NUMERAL TWO) | 0x81B0 |
Ⅲ | U+2162 (ROMAN NUMERAL THREE) | 0x81B1 |
Ⅳ | U+2163 (ROMAN NUMERAL FOUR) | 0x81B2 |
Ⅴ | U+2164 (ROMAN NUMERAL FIVE) | 0x81B3 |
Ⅵ | U+2165 (ROMAN NUMERAL SIX) | 0x81B4 |
Ⅶ | U+2166 (ROMAN NUMERAL SEVEN) | 0x81B5 |
Ⅷ | U+2167 (ROMAN NUMERAL EIGHT) | 0x81B6 |
Ⅸ | U+2168 (ROMAN NUMERAL NINE) | 0x81B7 |
Ⅹ | U+2169 (ROMAN NUMERAL TEN) | 0x81B8 |
㎝ | U+339D (SQUARE CM) | 0x81BB |
㎜ | U+339C (SQUARE MM) | 0x81BC |
㎞ | U+339E (SQUARE KM) | 0x81BD |
㎠ | U+33A0 (SQUARE CM SQUARED) | 0x81BE |
㎡ | U+33A1 (SQUARE M SQUARED) | 0x81BF |
㎖ | U+3396 (SQUARE ML) | 0x81C0 |
㎎ | U+338E (SQUARE MG) | 0x81C1 |
㎏ | U+338F (SQUARE KG) | 0x81C2 |
㎲ | U+33B2 (SQUARE MU S) | 0x81C3 |
㈹ | U+3239 (PARENTHESIZED IDEOGRAPH REPRESENT) | 0x81C4 |
㏍ | U+33CD (SQUARE KK) | 0x81C5 |
℡ | U+2121 (TELEPHONE SIGN) | 0x81C6 |
№ | U+2116 (NUMERO SIGN) | 0x81C7 |
㌅ | U+3305 (SQUARE INTI) | 0x81C8 |
㌘ | U+3318 (SQUARE GURAMU) | 0x81CA |
㍍ | U+334D (SQUARE MEETORU) | 0x81CB |
㌢ | U+3322 (SQUARE SENTI) | 0x81CC |
㍉ | U+3349 (SQUARE MIRI) | 0x81CD |
㌶ | U+3336 (SQUARE HEKUTAARU) | 0x81CE |
㌃ | U+3303 (SQUARE AARU) | 0x81CF |
㌦ | U+3326 (SQUARE DORU) | 0x81D0 |
㌧ | U+3327 (SQUARE TON) | 0x81D1 |
㌔ | U+3314 (SQUARE KIRO) | 0x81D2 |
㌕ | U+3315 (SQUARE KIROGURAMU) | 0x81D3 |
㌗ | U+3317 (SQUARE KIROWATTO) | 0x81D4 |
㍗ | U+3357 (SQUARE WATTO) | 0x81D5 |
㍑ | U+3351 (SQUARE RITTORU) | 0x81D6 |
㌫ | U+332B (SQUARE PAASENTO) | 0x81D7 |
㌻ | U+333B (SQUARE PEEZI) | 0x81D8 |
㍎ | U+334E (SQUARE YAADO) | 0x81D9 |
㌳ | U+3333 (SQUARE HUIITO) | 0x81DA |
① | U+2460 (CIRCLED DIGIT ONE) | 0x81DB |
② | U+2461 (CIRCLED DIGIT TWO) | 0x81DC |
③ | U+2462 (CIRCLED DIGIT THREE) | 0x81DD |
④ | U+2463 (CIRCLED DIGIT FOUR) | 0x81DE |
⑤ | U+2464 (CIRCLED DIGIT FIVE) | 0x81DF |
⑥ | U+2465 (CIRCLED DIGIT SIX) | 0x81E0 |
⑦ | U+2466 (CIRCLED DIGIT SEVEN) | 0x81E1 |
⑧ | U+2467 (CIRCLED DIGIT EIGHT) | 0x81E2 |
⑨ | U+2468 (CIRCLED DIGIT NINE) | 0x81E3 |
⑩ | U+2469 (CIRCLED NUMBER TEN) | 0x81E4 |
〚 | U+301A (LEFT WHITE SQUARE BRACKET) | 0x81E5 |
〛 | U+301B (RIGHT WHITE SQUARE BRACKET) | 0x81E6 |
〠 | U+3020 (POSTAL MARK FACE) | 0x81E7 |
☎ | U+260E (BLACK TELEPHONE) | 0x81E8 |
∫ | U+222B (INTEGRAL) | 0x81EA |
√ | U+221A (SQUARE ROOT) | 0x81EB |
◠ | U+25E0 (UPPER HALF CIRCLE) | 0x81F0 |
◡ | U+25E1 (LOWER HALF CIRCLE) | 0x81F1 |
◂ | U+25C2 (BLACK LEFT-POINTING SMALL TRIANGLE) | 0x8241 |
╌ | U+254C (BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL) | 0x8242 |
╍ | U+254D (BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL) | 0x8243 |
╎ | U+254E (BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL) | 0x8244 |
⇨ | U+21E8 (RIGHTWARDS WHITE ARROW) | 0x8246 |
⿰ | U+2FF0 (IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT) | 0x83B7 |
↓ MSXPenでの実行結果はこちら ↓ msxpen.com
Unicodeで代替できないと思われるMSXの漢字ROMの独自拡張文字
もし代替できる文字が分かりましたらぜひ筆者(nf_ban)までご教示ください。よろしくお願いします。
Shift_JIS | 文字の説明 |
---|---|
0x81B9 | g(グラム) |
0x81BA | m(メートル) |
0x81C9 | 空白(カテゴリ不明) |
0x81E9 | 「🗀」のような記号(数学記号?) |
0x81EC | 「√」(ルート記号)の右隣に付随する横棒(数学記号?) |
0x81ED | 縦展開の箱の上半分 |
0x81EE | 縦展開の箱の中間部分 |
0x81EF | 縦展開の箱の下半分 |
0x81F0 | 円の上半分(U+25E0「◠」はなんか違う気がする) |
0x81F1 | 円の下半分(U+25E1「◡」はなんか違う気がする) |
0x81F2 | 横展開の箱の左半分 |
0x81F3 | 横展開の箱の中間部分 |
0x81F4 | 横展開の箱の右半分 |
0x81F5 | 円の左半分 |
0x81F6 | 円の右半分 |
0x81F7 | ○の中にCR1 |
0x81F8 | ○の中にCR2 |
0x81F9 | ○の中に禁 |
0x81FA | ○の中に均 |
0x81FB | ○の中に↑ |
0x81FC | ○の中に↓ |
0x8240 | 三角付き縦線素片 |
0x8244 | 中黒(カテゴリ不明) |
0x82F2 | 斜線1 |
0x82F3 | 斜線2 |
0x82F4 | 点線縦 |
0x82F5 | 点線横 |
0x82F6 | 点線水玉 |
0x83DD | 網目 |
波ダッシュ・全角チルダ問題への対応
Shift_JISやEUC-JPなどJIS X 0208に準じた文字コードをUnicodeへ変換する、或いはその逆を変換する際に、OSや各言語のライブラリによって変換の実装に違いがあるために場合によっては他の文字へ変換されてしまう問題が古くから現代まで残り続けています。特に混乱が多いのが「~」の文字であるため、「波ダッシュ問題(全角チルダ問題)」と呼ばれています。
↓ 波ダッシュ・全角チルダ問題についてはこちら ↓ www.tohoho-web.com
MSXPenでは、この問題に対し以下のように処理する予定です。
Standardモード(半角文字化)
文字 | Unicode | ASCII |
---|---|---|
~ | U+007E (TILDE) | 0x7E |
‾ | U+203E (OVERLINE) | 0x7E |
〜 | U+301C (WAVE DASH) | 0x7E |
~ | U+FF5E (FULLWIDTH TILDE) | 0x7E |
 ̄ | U+FFE3 (FULLWIDTH MACRON) | 0x7E |
漢字モード(UTF-8 → Shift_JIS)
文字 | Unicode | Shift_JIS |
---|---|---|
~ | U+007E (TILDE) | 0x7E |
‾ | U+203E (OVERLINE) | 0x7E |
〜 | U+301C (WAVE DASH) | 0x8160 |
~ | U+FF5E (FULLWIDTH TILDE) | 0x8160 |
 ̄ | U+FFE3 (FULLWIDTH MACRON) | 0x8150 |
英語版の特殊文字
英語版の特殊文字はまだ入力できないようで、対応予定とのこと。
コピペ用文字列
100 REM ÇüéâäàåçêëèïîìÄÅ
110 REM ÉæÆôöòûùÿÖÜ¢£¥₧ƒ
120 REM áíóúñѪº¿⌐¬½¼¡«»
130 REM ÃãĨĩÕõŨũIJij¾∽◊‰¶§
140 REM ▂▚▆🮂▬🮅▎▞▊🮇🮊🮙🮘🭭🭯🭬
150 REM 🭮🮚🮛▘▗▝▖🮖Δ‡ω█▄▌▐▀
160 REM αßΓπΣσµτΦΘΩδ∞φε∩
170 REM ≡±≥≤⌠⌡÷≈°∙·√ⁿ²■
こぼれ話
Standradモードで漢字表示できないわけではない
念のためお伝えすると、MSXPenで全角文字の入力ができないからといって日本語BASICで漢字表示ができない、のではないということです。
10 _KANJI
20 PRINT "しかのこのこのここしたんたん"
30 END
シフトJISコードで書かれた全角文字を含むBASICプログラムをMSXのANKモードで閲覧すると下記のような状態で見えています。
10 _KANJI
20 PRINT "♣オ♣ゥ♣フ♣ア♣フ♣ア♣フ♣ア♣ア♣オ♣ス♣む♣ス♣む"
30 END
※MSXの内部では半角文字(1バイト文字)で記載されます
この状態をMSXPenで全角文字として再現すれば、MSXPenでも日本語BASIC環境下で全角文字の表示は可能です。ややこしいし効率悪いですが…
ANKモードの入力に絞ったことで、シフトJISコードの1バイト目に頻発する半角文字の「♣(クラブ)」等のトランプマークがMSXPenから入力可能となり、その結果MSXPenでも全角文字の文字入力が可能になったのは単に副作用の結果だと思っています。本来なら日本語BASICのプログラムは入力フォームをシフトJISのエンコードそのままでMSXPen(WebMSX)へ流せたほうが圧倒的に便利なのですが…
プログラム内に「CALL KANJI」に相当する語句が含まれていれば自動的に漢字モードに…という検討もしましたが、自動判別は危険と判断しました。日本語BASICの環境下でもスプライト定義やDATA文等でひらがなが文字列に使用される可能性あり。
MSXPenは今後…
というような言語の切り分け実装が必要になるかな…と考えています。
ソースコードが含まれる画像をOCRで入力する方法
MSXでの用途では今までありそうで無かった!画像のOCRでテキストデータ化する、twitter@bugfire01さん開発のアプリ。プログラミング雑誌に掲載されたプログラムをスキャンした画像をこのアプリに放り込むと…!?
【参考資料】MSXの文字コード一覧
Wikipedia および MSX Resource Centerの情報を参考にしています。
MSX Characters and Control Codes - MSX Wiki
他にも便利な入力方法がありましたら情報をお待ちしております。→ twitter@nf_ban