N | N80 | N80SR | N(86) | N60 (16K/32K) |
N60拡張 (16K/32K) |
N60m | N66 | N66SR | N88 (V1) |
N88 (V2) |
N88漢字 | N88日本語 | N88日本語 (V3) |
N88(86) | N88日本語(86) | N88日本語(86) MS-DOS版 |
備考 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PC-8001 | ◎ | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
PC-8001mkII | ○ | ◎ | - | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
PC-8001mkIISR | ○ | ○ | ◎ | - | - | - | - | - | - | - | - | - | - | - | - | - | - | |
PC-6001 | - | - | - | - | ◎ | △ | - | - | - | - | - | - | - | - | - | - | - | N60拡張は要別売カートリッジ |
PC-6001mkII | - | - | - | - | ○ | ○ | ◎ | - | - | - | - | - | - | - | - | - | - | |
PC-6601 | - | - | - | - | ○ | ○ | - | ◎ | - | - | - | - | - | - | - | - | - | |
PC-6601SR PC-6001mkIISR |
- | - | - | - | ○ | ○ | - | ○ | ◎ | - | - | - | - | - | - | - | - | |
PC-8801 | ○ | - | - | - | - | - | - | - | - | ◎ | - | △ | - | - | - | - | - | N88漢字は要別売漢字ROMボード |
PC-8801mkII | ○ | - | - | - | - | - | - | - | - | ◎ | - | ◎ | - | - | - | - | - | |
PC-8801mkIISR PC-8801mkIITR |
○ | - | - | - | - | - | - | - | - | ○ | ◎ | ○ | ◎ | - | - | - | - | |
PC-8801mkIIFR PC-8801mkIIMR |
○ | - | - | - | - | - | - | - | - | ○ | ◎ | ○ | ◎ | - | - | - | - | NはV1Sモードで"NEW ON 1"命令 |
PC-8801FH PC-8801MH PC-8801FA PC-8801FE PC-8801MA/MA2 |
○ | - | - | - | - | - | - | - | - | ○ | ◎ | ○ | ◎ | - | - | - | - | NはV1Sモードで[N][8][0]押下でリセット |
PC-8801FE2 PC-8801MC |
○ | - | - | - | - | - | - | - | - | ○ | ◎ | ○ | ◎ | - | - | - | - | Nは[N][8][0]押下でリセット |
PC-88VA/VA2/VA3 | - | - | - | - | - | - | - | - | - | ○ | ○ | ○ | ○ | ◎ | - | - | - | V3はPC-Engine上で動作 |
PC-98DO/DO+ | ○ | - | - | - | - | - | - | - | - | ○ | ◎ | ○ | ◎ | - | ○ | ◎ | ◎ | NはV1Sモードで[N][8][0]押下でリセット |
PC-9800シリーズ | - | - | - | ○ | - | - | - | - | - | - | - | - | - | - | ○ | ◎ | ◎ |
** ** | ** ** | ** ** ** ** ** ** ** ** ... | 00 |
リンクポインタ (2byte) |
行番号 (2byte) |
プログラムテキストの中間言語 (可変長) |
EOL(行末) (1byte) |
N-BASIC(32K RAM)の例:
8021 | 2B 80 | 0A 00 | 41 | F1 | 1C E8 03 | 00 |
---|---|---|---|---|---|---|
リンクポインタ 802B |
行番号 10 |
CHR$(&H41) A |
F1⇒予約語 = |
1C⇒整数 1000 |
00⇒EOL |
802B | 33 80 | 14 00 | 91 | 20 | 41 | 00 |
---|---|---|---|---|---|---|
リンクポインタ 8033 |
行番号 20 |
91⇒予約語 |
CHR$(&H20) (スペース) |
CHR$(&H41) A |
00⇒EOL |
8033 | 00 00 |
---|---|
リンクポインタ 0⇒終端 |
&H8000
で固定、
DISK-BASICはPEEK(&HEAE6)*256+PEEK(&HEAE5)
でその場所を取得できます。
N88-日本語BASIC(86)の例:
???? | 0C 00 | 0A 00 | 01 | 41 | 00 | F1 | 1C E8 03 | 00 |
---|---|---|---|---|---|---|---|---|
長さ 12byte |
行番号 10 |
01⇒1個のスペース (スペース) |
CHR$(&H41) A |
変数の文字数-1(後述) |
F1⇒予約語 = |
1C⇒整数 1000 |
00⇒EOL |
N88-日本語BASIC(86)の例: 変数「DOUBLE」の中間言語
44 | 05 | 4F 55 42 4C 45 |
CHR$(&H44) D |
変数の文字数-1 (続く5文字は変数) |
CHR$(&H4F)+CHR$(&H55)+CHR$(&H42)+CHR$(&H4C)+CHR$(&H45) OUDLE |
N-BASICの例: 10 PRINT
0A 00 | 91 | |
行番号 10 |
暗黙のスペース (スペース) |
91⇒予約語 |
0A 00 | 20 | 20 | 91 | |
行番号 10 |
暗黙のスペース (スペース) |
CHR$(&H20) (スペース) |
CHR$(&H20) (スペース) |
91⇒予約語 |
N88-日本語BASIC(86)の例: 10 PRINT
0A 00 | 01 | C0 |
行番号 10 |
01⇒1個のスペース (スペース×1) |
C0⇒予約語 |
0A 00 | 03 | C0 |
行番号 10 |
03⇒3個のスペース (スペース×3) |
C0⇒予約語 |
例: 123456→123456 (1.23456E+05相当) 例: 1234567→1.23457E+06 例: .0000001→.0000001 (1*10^-7) 例: .00000001→1E-08 (1*10^-8) 例: .01234567→.0123457 (123457*10^-7) 例: .001234567→1.23457E-03 (123457*10^-8)
例: 12345678→12345678 (1.2345678E+07相当) 例: 123456789→12345679E+08 例: .01→.01 (1E-02相当) 例: .001→1E-03
-
を表現する
予約語が置かれることで表現されています。
つまり必ず符号反転の演算子を使った計算式になります。
!
を
倍精度なら#
を付ける仕様がありますが、
明示された時はその型で、
明示されない時は適切な型が自動で判断されて中間言語されます。
整数のつもりで定数を入力しても、数が多い(32768以上や-32768以下)と
単精度・倍精度実数でしか表現できないと判断されて!や#が付与されます。
例: 32767と入力→整数で中間言語化→LISTで32767と表示 例: 32768と入力→整数の範囲を超えているので、単精度型実数で中間言語化→LISTで32768!と表示 例: 0!と入力→明示されているので、単精度型実数で中間言語化→LISTで0!と表示 例: 3.14!と入力→単精度型実数で中間言語化→小数点.で整数ではないことが明らかなので、LISTで3.14と表示 例: 3.141592→四捨五入用の7桁目まででぎりぎり単精度の範囲なので、単精度実数で中間言語化→LISTで3.14159と表示 例: 3.1415926→単精度の範囲を超えているので、倍精度実数で中間言語化→LISTで3.1415926#と表示
sgn=符号ビットの値, frac=仮数部のビット数, fi=仮数部の下位からiビット目の値, exp=指数部の値
x = (1-sgn×2)×(1+fracΣi=12-i×ffrac-i)×2exp-129
例: 単精度浮動小数点 x=3.14
仮数部(下位) | 仮数部(中位) | 仮数部(上位) | 指数部 exp | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
f7 | f6 | f5 | f4 | f3 | f2 | f1 | f0 | f15 | f14 | f13 | f12 | f11 | f10 | f9 | f8 | sgn | f22 | f21 | f20 | f19 | f18 | f17 | f16 | e7 | e6 | e5 | e4 | e3 | e2 | e1 | e0 |
56 | 0E | 49 | 82 | ||||||||||||||||||||||||||||
0 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
REM
命令か
'
(シングルクォート)で始まりますが、
どちらを入力した時も直前に中間言語コード&H00が入った後に
それぞれのキャラクターコードが並びます。
つまり、コメント開始の実体は&H00で、
REMも'もコメントの一部として扱われています。
N88-日本語BASIC(86)の例: 100 REM 123
0E 00 | 64 00 | 01 | 00 | 52 45 4D | 20 31 32 33 | 00 |
長さ 14byte |
行番号 100 |
01⇒1個のスペース (スペース) |
00⇒コメントの開始 |
CHR$(&H52)+CHR$(&H45)+CHR$(&H4D) REM |
CHR$(&H20)+CHR$(&H31)+CHR$(&H32)+CHR$(&H33) 123 |
00⇒EOL |
0C 00 | C8 00 | 01 | C0 | 00 | 27 | 34 35 36 | 00 |
長さ 12byte |
行番号 200 |
01⇒1個のスペース (スペース) |
C0⇒予約語 |
00⇒コメントの開始 |
CHR$(&H27) ' |
CHR$(&H34)+CHR$(&H35)+CHR$(&H36) 456 |
00⇒EOL |
IF~THEN~ELSE
の
予約語ELSE
の中間言語コードの直前には、
必ず隠し:
(&H3A)が入ります。
ELSE
が中間言語に変換される際に自動で挿入され、
LIST表示する時には隠し:
は省略されて表示されます。
N-BASICの例: IF INKEY$<>"" THEN PRINT "on" ELSE PRINT "off"
8B | 20 | E9 | F2 | F0 | 22 22 | 20 | D8 | 20 |
8B⇒予約語 IF |
CHR$(&H20) (スペース) |
E9⇒予約語 INKEY$ |
F2⇒予約語 < |
F0⇒予約語 > |
CHR$(&H22)+CHR$(&H22) "" |
CHR$(&H20) (スペース) |
D8⇒予約語 THEN |
CHR$(&H20) (スペース) |
91 | 20 | 22 6F 6E 22 | 20 |
91⇒予約語 |
CHR$(&H20) (スペース) |
CHR$(&H22)+CHR$(&H6F)+CHR$(&H6E)+CHR$(&H22) "on" |
CHR$(&H20) (スペース) |
3A | A1 | 20 |
CHR$(&H3A) : (隠し) |
A1⇒予約語 ELSE |
CHR$(&H20) (スペース) |
91 | 20 | 22 6F 66 66 22 |
91⇒予約語 |
CHR$(&H20) (スペース) |
CHR$(&H22)+CHR$(&H6F)+CHR$(&H66)+CHR$(&H66)+CHR$(&H22) "off" |
ELSE
が文頭にくるようにすることで、
THEN
の後ろのマルチステートメントの処理の一環として
ELSE
が処理できて効率的なためだと思われます。
'
(シングルクォート)の直前には、
必ず隠し:
(&H3A)と隠し予約語REM
が入ります。
'
が中間言語に変換される際に自動で挿入され、
LIST表示する時には隠し:REM
は省略されて表示されます。
'
は文の途中に書くことができますが、
BASICインタープリタにとっては文の区切りがある方が
処理しやすいため隠し:
が入るのだと思われます。
コメントの開始の実体は隠しREM
が担っており、
'はコメントの一部の扱いになります。
N-BASICの例: 200 PRINT'456
C8 00 | 91 | 3A | 8F | E4 | 34 35 36 | 00 |
行番号 200 |
91⇒予約語 |
CHR$(&H3A) : (隠し) |
8F⇒予約語 REM (隠し) |
E4⇒予約語 ' |
CHR$(&H34)+CHR$(&H35)+CHR$(&H36) 456 |
00⇒EOL |
D2 00 | 91 | 3A | 3A | 8F | E4 | 34 35 36 | 00 |
行番号 210 |
91⇒予約語 |
CHR$(&H3A) : |
CHR$(&H3A) : (隠し) |
8F⇒予約語 REM (隠し) |
E4⇒予約語 ' |
CHR$(&H34)+CHR$(&H35)+CHR$(&H36) 456 |
00⇒EOL |
DC 00 | 3A | 8F | E4 | 34 35 36 | 00 |
行番号 220 |
CHR$(&H3A) : (隠し) |
8F⇒予約語 REM (隠し) |
E4⇒予約語 ' |
CHR$(&H34)+CHR$(&H35)+CHR$(&H36) 456 |
00⇒EOL |
N-BASICの例: 100 REM 123
64 00 | 8F | 20 31 32 33 | 00 |
行番号 100 |
8F⇒予約語 REM |
CHR$(&H20)+CHR$(&H31)+CHR$(&H32)+CHR$(&H33) 123 |
00⇒EOL |
GO TO
"とも書けますが、
予約語テーブルとしては"GOTO
"のみがあるために、
GO TO
と入力した後にLISTするとGOTO
に変化することになります。
DEF USR
命令などはDEF
, USR
両方に予約語が割り当てられているため、間にスペースを入れることも
省略することもできるようになっています。
?
記号をPRINT
命令の代わりに使うことが出来ますが、
?
記号はPRINTの予約語として中間言語化されるため、
入力後にLIST表示するとPRINT
に置き換わっています。
-
- 予約語テーブルを使っていない予約語 (共通)
-
NAME AS
命令の"AS
"は
キャラクターコードの1文字ずつを並べて表現されています。
-
- 予約語テーブルを使っていない予約語 (N88-日本語BASIC(86) (MS-DOS版))
-
- N88-日本語BASIC(86) (MS-DOS版)では予約語
CHDIR
, MKDIR
, RMDIR
が
空文字の予約語として登録されている0xEFの後ろに
キャラクターコードの1文字ずつを並べて表現されています。
N88-日本語BASIC(86) (MS-DOS版)の例: CHDIR "B:¥BASIC"
EF
43 48 44 49 52
20
22 42 3A 5C 42 41 53 49 43 22
EF⇒予約語
(空文字)
CHR$(&H43)+CHR$(&H48)+CHR$(&H44)+CHR$(&H49)+CHR$(&H52)
CHDIR
CHR$(&H20)
(スペース)
CHR$(&H22)+CHR$(&H42)+…
"B:¥BASIC"
-
N-BASICの例: PRINT "ドル円"
91 | 20 | 22 C4 DE D9 F1 22 |
91⇒予約語 |
CHR$(&H20) (スペース) |
CHR$(&H22)+CHR$(&HC4)+CHR$(&HDE)+CHR$(&HD9)+CHR$(&HF1)+CHR$(&H22) "ドル円" |
N60-BASICの例: PRINT "2022年"
95 | 20 | 22 32 30 32 32 | 14 38 | 22 |
95⇒予約語 |
CHR$(&H20) (スペース) |
CHR$(&H22)+CHR$(&H32)+CHR$(&H30)+CHR$(&H32)+CHR$(&H32) "2022 |
14⇒CHR$(&H38-&H30) 年 |
CHR$(&H22) " |
CHR$()
で
グラフィックキャラクターを画面に表示することはできます。
N88-日本語BASICの例: POKE &HF3C7,&HEC N88-日本語BASIC(86) (MS-DOS版)の例: PRINT CHR$(&HEC)
漢字ROM搭載状況 | 表示領域 | |
---|---|---|
PC-8001 | 漢字ROMなし | テキスト領域しか存在せず |
PC-8001mkII PC-8001mkIISR |
別売の漢字ROMボード(PC-8001mkII-01)で、 第一水準2965文字+非漢字約700文字 | テキスト/グラフィック領域の重ね合わせ可能 漢字はグラフィック領域 |
PC-6001 | 漢字ROMなし | テキスト/グラフィック領域は排他利用 |
PC-6001mkII PC-6601 PC-6601SR PC-6001mkIISR |
漢字ROM内蔵で、専用漢字1024文字 別売の拡張漢字ROMカートリッジ(PC-6601-01/PC-6007SR)で、第一水準2965文字+非漢字約100文字? |
テキスト/グラフィック領域は排他利用 漢字はグラフィック領域 |
PC-8801 | 別売のPC-8801用漢字ROMボード(PC-8801-01/PC-8801-01K)で、 第一水準2965文字と非漢字約700文字 | テキスト/グラフィック領域の重ね合わせ可能 漢字はグラフィック領域 |
PC-8801mkII | 漢字ROM内蔵で、第一水準2965文字+非漢字約700文字 | |
PC-8801mkIISR PC-8801mkIITR PC-8801mkIIFR |
漢字ROM内蔵で、第一水準2965文字+非漢字約700文字 別売のマルチボードA(PC-8801-20)で、第二水準3384文字 |
|
PC-8801mkIIMR PC-8801FH PC-8801MH PC-8801FA PC-8801FE/FE2 PC-8801MA/MA2 PC-8801MC |
漢字ROM内蔵で、第一水準2965文字+第二水準3384文字+非漢字約700文字 | |
PC-88VA/VA2/VA3 | 漢字ROM内蔵で、第一水準2965文字+第二水準3384文字+非漢字896(885?)文字+利用者定義文字188文字 | テキスト/グラフィック領域の重ね合わせ可能 漢字はテキスト領域 |
PC-9801 | 別売の漢字ROMボード(PC-9801-01/PC-9801-10)で、
第一水準2965文字+非漢字885文字 別売の第2水準漢字ROMチップ(PC-9801-12/K)で(PC-9801-10上にのみ搭載可)、第二水準3384文字 別売の拡張漢字ROMチップ(PC-9801-18)で、拡張漢字388文字 |
テキスト/グラフィック領域の重ね合わせ可能 漢字はテキスト領域 |
PC-9801E | 別売の漢字ROMボード(PC-9801-10)で、
第一水準2965文字+非漢字885文字+利用者定義文字63字 別売の第2水準漢字ROMチップ(PC-9801-12/K)で、第二水準3384文字 別売の拡張漢字ROMチップ(PC-9801-18)で、拡張漢字388文字 |
|
PC-9801F/M | 漢字ROM内蔵で、第一水準2965文字+非漢字885文字+利用者定義文字63字 別売の第2水準漢字ROMチップ(PC-9801-12/K)で、第二水準3384文字 別売の拡張漢字ROMチップ(PC-9801-18)で、拡張漢字388文字 |
|
PC-9801U | 漢字ROM内蔵で、第一水準2965文字+第二水準3384文字+非漢字885文字+利用者定義文字63字 別売の拡張漢字ROMチップ(PC-9801-28)で、拡張漢字388文字 |
|
PC-9801VF/VM PC-9801UV PC-9801VX0/2/4 |
漢字ROM内蔵で、第一水準2965文字+第二水準3384文字+非漢字885文字+利用者定義文字188字 別売の拡張漢字ROMチップ(PC-9801-28)で、拡張漢字388文字 |
|
PC-9801VX01/21/41 PC-9801RX/EX/UX/DX PC-9800シリーズ(386以上搭載機) |
漢字ROM内蔵で、第一水準2965文字+第二水準3384文字+非漢字885文字+拡張漢字388文字+利用者定義文字188字 |
PUT (100,100),KANJI(&H0091)
で半角「あ」が描画できます)。
それぞれ400ラインモード/200ラインモードの時の
テキスト領域に表示される文字と同じグリフですが、
半角文字の方はグラフィックキャラクターが入る
&H0080〜&H009F、&H00E0〜&H00FFの範囲に半角ひらがなのフォントが入っています
(テキスト領域にひらがなを表示する機能がない機種であっても)。
なお、この半角文字・1/4角文字はグラフィック領域への描画時にのみ使える
特殊な扱いになっており(テキスト領域用のフォントは別のROMに入っています)、
JISコードの範囲外に割り当てられています。
|
コード範囲 | 分類 | 内容 |
---|---|---|---|
0020~00FF | 半角文字 | 8×16ドットサイズの記号・英数字・かな・カナの221文字(または`、を除いた219文字) | |
0100~01FF | 1/4角文字 | 8×8ドットサイズの記号・英数字・カナ・グラフィックキャラクターの246文字(または`\を除いた244文字) | |
2121~277E | JIS非漢字 | 旧JISの記号108文字+英数字62文字+かな83文字+カナ86文字+ギリシャ48文字+キリル66文字で合計453文字 | |
2921~2B7E | NEC非漢字(2バイト半角) | 機種依存の半角の英数字95文字+カナ94文字+罫線78文字+記号15文字で合計282文字(または「`」を除いた281文字) | |
2C24~2C6F | NEC非漢字(全角罫線素片) | 機種依存の全角罫線76文字(新JISの罫線素片とは互換性なし) | |
2D21~2D7C | NEC非漢字(NEC特殊文字) | NEC特殊文字で丸数字・ローマ数字・単位・年号などの83文字(または「㍻」を除いた82文字) | |
3021~4F53 | 第一水準 | 旧JISの第一水準2965文字 | |
5021~737E | 第二水準 | 旧JISの第二水準3384文字 | |
7621~777E | 利用者定義文字 | 利用者定義文字のRAM188文字 63文字の機種は頭の63文字分のみ使用 |
|
7921〜7C7E | NEC選定IBM拡張文字 | NEC選定IBM拡張文字374文字 拡張漢字388文字の一部 |
|
0001〜0400 | P6専用漢字 | 教育漢字996文字+都道府県名19文字+その他9文字(札幌盛仙甲津那覇啓)で合計1024文字 |
N80-BASICの例: CMD PUT (100,100),KANJI(&H3441) N80SR-BASICの例: PUT@ (100,100),KANJI(&H3441) N60m-BASIC(Page≧2)の例: SCREEN 3,2,2:KANJI (10,10),2,1
各種漢字BASIC/日本語BASICの例: PRINT "日本語"
N88-漢字BASICの例: "88漢字"
22 | 38 38 | FA | 41 34 | 7A BB | FD | 22 |
CHR$(&H22) " |
CHR$(&H38)+CHR$(&H38) 88 |
FA⇒KANJI IN |
JISコード3441 漢 |
JISコード3B7A 字 |
FD⇒KANJI OUT |
CHR$(&H22) " |
N88-日本語BASIC(86)の例: "98漢字"
22 | 39 38 | 1B 4B | 34 41 | 3B 7A | 1B 48 | 22 |
CHR$(&H22) " |
CHR$(&H39)+CHR$(&H38) 98 |
1B 4B⇒KANJI IN |
JISコード3441 漢 |
JISコード3B7A 字 |
1B 48⇒KANJI OUT |
CHR$(&H22) " |
N88-日本語BASIC(86) (MS-DOS版)の例: "98漢字"
22 | 39 38 | 8A BF | 8E 9A | 22 |
CHR$(&H22) " |
CHR$(&H39)+CHR$(&H38) 98 |
8A⇒SJISコード8ABF 漢 |
8E⇒SJISコード8E9A 字 |
CHR$(&H22) " |
8801漢字BASIC/新8801漢字BASICの例: "88漢字"
22 | 38 38 | 7F | B4 C1 | BB FA | 7F | 22 |
CHR$(&H22) " |
CHR$(&H38)+CHR$(&H38) 88 |
7F⇒KANJI IN |
EUCコードB4C1 漢 |
EUCコードBBFA 字 |
7F⇒KANJI OUT |
CHR$(&H22) " |
1000 0*** 10** **** ⇔ 0000 000* **** ****
のように相互変換します。
8801漢字BASIC/新8801漢字BASICの例: 半角文字「あ」
中間言語のEUCコード(上位) | 中間言語のEUCコード(下位) | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 0 | 0 | 0 | 0 | b8 | b7 | b6 | 1 | 0 | b5 | b4 | b3 | b2 | b1 | b0 |
82 | 91 | ||||||||||||||
1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
NECの漢字コード(上位) | NECの漢字コード(下位) | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | b8 | b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 |
00 | 91 | ||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
戻る