Gigamix Online

懐かしの8bitおもちゃPC「MSX」を骨までしゃぶり尽くそう。MSXの最新ニュース、ブログ。自作ソフトの配布などは公式サイトへ→ https://gigamix.jp/

MSXPenで半角ひらがなやGRAPH文字などの特殊文字を入力する方法

【2024.09.18更新】新入力モード「漢字モード(漢字BASIC)」の解説を追加しました。「ヷ」と「ヺ」が入力できるようになりました。

【2024.07.17更新】日本語BASIC環境下では文字入力が正常に働かない旨の解説を追加しました。

【2024.03.17更新】「ゔ」と「ヴ」が入力できるようになりました。

【2021.20.22更新】初版公開

 PCやスマホでは文字として存在しないMSXの「半角ひらがな」や「GRAPH文字」を、MSXPenの入力フォームでどうやったら入力できるのか?

https://p.gigamix.jp/devmsx/cg/msxpen-special-codes.png

 実は全角文字で入力するとMSXの半角文字へ自動的に変換されます。記事の後半に、コピペ用文字列があります。

MSXPen とは

 MSX BASICによるプログラムおよびZ80アセンブラコードをWebブラウザ上で作成および実行できる、仮想プログラミング環境です。ソースコードをWebの入力フォームに入れるだけ!スマホでも動きます!

msxpen.com

 MSXPenは2024年9月より2つの入力モードが存在します。用途により使い分けてください。

  1. Standardモード…半角文字・GRAPH文字中心の、標準的な入力モード
  2. 漢字モード(漢字BASIC)…漢字BASICを用いた日本語の全角文字表示を行う入力モード

 MSXPenの原理は、画面のコード入力フォームに入力されたテキストをコンテンツ化し、同じくWebブラウザで動作するMSXエミュレータ「WebMSX」の自動起動プログラム(AUTOEXEC.BAS)で実行する、というものです。

webmsx.org

 Webデザイン界隈でよく使われる「CodePen」というHTML・CSSJavaScriptのコーディングシェアサイトがあるんですが、私はMSXPenは「Webブラウザで動作するMSXエミュレータ「WebMSX」の実行環境をカスタマイズしてコーディングシェアできるようにしたWebサービス」という認識です。

Standardモード

 2024年9月より「漢字モード(漢字BASIC)」が追加されたため、今までの入力方法は「Standardモード」と命名されました。Webブラウザで直接入力できない「半角ひらがな」や「GRAPH文字」といったMSXの文字を、UTF-8Unicode)で代用して入力するモードです。

仕様

  • 入力フォームへ記入した文字は、全角文字・半角文字問わず、1バイト文字に置換されてMSXへ入力されます
  • MSXの仕様上、シフトJISコードで入力できる文字はそのまま利用可能です。つまり「半角カタカナ」や「、。」といった半角カナ記号も半角文字として入力できます。
  • Webブラウザ上から入力できないMSXの「半角ひらがな」と「GRAPH文字」は、全角文字で入力するとMSXの半角文字へ自動的に変換されます

Here it is @nf_ban , half-width characters 🙌https://t.co/SLnwWIOYHw — jannone (@jannone) 2020年8月24日

 ちなみに濁音・半濁音が付く全角文字は2文字に分解されて置換されます(「ガ」→「ガ」)。

入力できる文字

  • 【GRAPH文字】♠♥♣♦○●月火水木金土日年円時分秒百千万大中小π┴┬┤├┼│─┌┐└┘╳
  • 【英数字】 !"#$%&?()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
  • 【英数字(全角文字)】 !”#$%&?()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|} ̄~
  • 【ひらがな】をぁぃぅぇぉゃゅょっあいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわん
  • 【カタカナ】ヲァィゥェォャュョッアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン
  • 【カタカナ(半角文字)】ヲァィゥェォャュョッアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマ"ミムメモヤユヨラリルレロワン
  • 【カナ記号】。「」、・ー゛゜
  • 【カナ記号(半角文字)】。「」、・ー゙゚
  • 【ひらがな(濁音・半濁音)】がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽゔ
  • 【カタカナ(濁音・半濁音)】ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴヷヺ

MSXPenのエディタで「ゔ」と「ヴ」が入力できるようになりました!!「メリーヴェノム」と書いても大丈夫。 https://twitter.com/jannone/status/1769155546337222862 — Takashi Kobayashi (@nf_ban) 2024年3月17日

コピペ用文字列

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-8Unicode)なため、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 0208JIS 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_JISEUC-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-8Shift_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

英語版の特殊文字

@jannone Hi, I tried input the international codes 0x80-0x9F on #MSXPen refer to https://t.co/8UNdk2bAX8 , but i could't print.🤔 Please how to input these codes? https://t.co/Ur65yZbOaD — Takashi Kobayashi (@nf_ban) 2021年2月16日
I checked it. It's going to need a special converter just like I did last time for Japanese characters. It will take some time, because I still have some other tasks for MSXPen. But we'll get there eventually 💪 — jannone (@jannone) 2021年2月16日

 英語版の特殊文字はまだ入力できないようで、対応予定とのこと。

コピペ用文字列

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プログラムをMSXANKモードで閲覧すると下記のような状態で見えています。

10 _KANJI
20 PRINT "♣オ♣ゥ♣フ♣ア♣フ♣ア♣フ♣ア♣ア♣オ♣ス♣む♣ス♣む"
30 END

MSXの内部では半角文字(1バイト文字)で記載されます

 この状態をMSXPenで全角文字として再現すれば、MSXPenでも日本語BASIC環境下で全角文字の表示は可能です。ややこしいし効率悪いですが…

↓ 上記BASICプログラムの実行結果はこちら ↓ 実行結果 https://msxpen.com/codes/-O1zkvuyi79F8pk2nkS- — Takashi Kobayashi (@nf_ban) 2024年7月17日

https://p.gigamix.jp/devmsx/cg/msxpen-special-codes_shikanoko.png

 ANKモードの入力に絞ったことで、シフトJISコードの1バイト目に頻発する半角文字の「♣(クラブ)」等のトランプマークがMSXPenから入力可能となり、その結果MSXPenでも全角文字の文字入力が可能になったのは単に副作用の結果だと思っています。本来なら日本語BASICのプログラムは入力フォームをシフトJISエンコードそのままでMSXPen(WebMSX)へ流せたほうが圧倒的に便利なのですが…

 プログラム内に「CALL KANJI」に相当する語句が含まれていれば自動的に漢字モードに…という検討もしましたが、自動判別は危険と判断しました。日本語BASICの環境下でもスプライト定義やDATA文等でひらがなが文字列に使用される可能性あり。

 MSXPenは今後…

というような言語の切り分け実装が必要になるかな…と考えています。

ソースコードが含まれる画像をOCRで入力する方法

#MSX #DumpListEditor の暫定MSX対応版を作ってみました。現在は、BASICプログラムの入力&表示しかできません。プログラムはMSXPenに張り付けて実行して下さい。↓下記ページからダウンロードして下さい。BASICプログラムの作業方法も簡単にまとめてあります。https://t.co/Rg4MyeqidK pic.twitter.com/PYhLqFkZD0 — bugfire2009 (@bugfire01) 2021年2月20日

 MSXでの用途では今までありそうで無かった!画像のOCRでテキストデータ化する、twitter@bugfire01さん開発のアプリ。プログラミング雑誌に掲載されたプログラムをスキャンした画像をこのアプリに放り込むと…!?

【参考資料】MSX文字コード一覧

 Wikipedia および MSX Resource Centerの情報を参考にしています。

MSX character set - Wikipedia

MSX Characters and Control Codes - MSX Wiki

 他にも便利な入力方法がありましたら情報をお待ちしております。→ twitter@nf_ban