for SHARP PC-G850
注)&h は16進数をあらわす。
|
ファイル形式 |
||||||
|
相対アドレス |
txtファイル |
example |
basファイル |
example |
datファイル |
example |
|
0 |
*.txt ヘッダ
|
&hFB |
*.bas ヘッダ |
&hFB |
*.dat ヘッダ |
&hFC |
|
1 |
filename
1/8 |
asc(T) |
filename
1/8 |
asc(B) |
filename
1/8 |
asc(f) |
|
2 |
filename
2/8 |
asc(e) |
filename
2/8 |
asc(A) |
filename
2/8 |
asc(i) |
|
3 |
filename
3/8 |
asc(x) |
filename
3/8 |
asc(S) |
filename
3/8 |
asc(l) |
|
4 |
filename
4/8 |
asc(t) |
filename
4/8 |
asc(I) |
filename
4/8 |
asc(e) |
|
5 |
filename
5/8 |
asc(0) |
filename
5/8 |
asc(C) |
filename
5/8 |
asc(0) |
|
6 |
filename
6/8 |
asc(0) |
filename
6/8 |
asc(0) |
filename
6/8 |
asc(0) |
|
7 |
filename
7/8 |
asc(1) |
filename
7/8 |
asc(0) |
filename
7/8 |
asc(1) |
|
8 |
filename
8/8 |
&h20 |
filename
8/8 |
asc(2) |
filename
8/8 |
&h20 |
|
9 |
拡張子
1/3 |
asc(T) |
拡張子
1/3 |
asc(B) |
拡張子
1/3 |
asc(d) |
|
10 |
拡張子
2/3 |
asc(X) |
拡張子
2/3 |
asc(A) |
拡張子
2/3 |
asc(a) |
|
11 |
拡張子
3/3 |
asc(T) |
拡張子 3/3 |
asc(S) |
拡張子
3/3 |
asc(t) |
|
12 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
13 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
14 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
15 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
16 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
17 |
file size
1の位 |
&h79 |
file size
1の位 |
&h79 |
file size
1の位 |
&h50 |
|
18 |
file size
256の位 |
&h03 |
file size
256の位 |
&h03 |
file size
256の位 |
&h04 |
|
19 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
20 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
21 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
22 |
未解析 |
&h00 |
未解析 |
&h00 |
data size
1の位 |
&h03 |
|
23 |
未解析 |
&h00 |
未解析 |
&h00 |
data size
256の位 |
&h00 |
|
24 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
25 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
26 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
27 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
28 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
29 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
30 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
31 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
32 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
33 |
未解析 |
&h00 |
未解析 |
&h00 |
未解析 |
&h00 |
|
34 |
linenumber
256の位 |
&h00 |
program
mode format |
&hFF |
data_1_1/5 |
asc(1) |
|
35 |
linenumber
1の位 |
&h0A |
program
mode format |
&h00 |
data_1_2/5 |
asc(2) |
|
36 |
行の長さ(bytes) |
&h08 |
program
mode format |
&h03 |
data_1_3/5 |
asc(3) |
|
37 |
text1_1/8 |
asc(m) |
program
mode format |
&h01 |
data_1_4/5 |
asc(4) |
|
38 |
text1_2/8 |
asc(a) |
linenumber
256の位 |
&h00 |
data_1_5/5 |
asc(5) |
|
39 |
text1_3/8 |
asc(i) |
linenumber
1の位 |
&h0A |
data_1_end_1/2 |
&h0D |
|
40 |
text1_4/8 |
asc(n) |
行の長さ(bytes) |
&h08 |
data_1_end_2/2 |
&h0A |
|
41 |
text1_5/8 |
asc(() |
:(コロン) |
&h3A |
data_2_1/4 |
asc(7) |
|
42 |
text1_6/8 |
asc()) |
text1_1/8 |
&hFE |
data_2_2/4 |
asc(7) |
|
43 |
text1_7/8 |
asc({) |
text1_2/8 |
&h60 |
data_2_3/4 |
asc(7) |
|
44 |
text1_8/8(改行コード) |
&h0D |
text1_3/8 |
asc(") |
data_2_end_1/2 |
&h0D |
|
45 |
text2_1/7 |
asc(i) |
text1_4/8 |
asc(A) |
data_2_end_2/2 |
&h0A |
|
46 |
text2_2/7 |
asc(n) |
text1_5/8 |
asc(A) |
data3_1/6 |
asc(9) |
|
47 |
text2_3/7 |
asc(t) |
text1_6/8 |
asc(A) |
data3_2/6 |
asc(9) |
|
48 |
text2_4/7 |
&h20 |
text1_7/8 |
asc(") |
data3_3/6 |
asc(9) |
|
49 |
text2_5/7 |
asc(i) |
text1_8/8(改行コード) |
&h0D |
data3_4/6 |
asc(9) |
|
50 |
text2_6/7 |
asc(;) |
linenumber
256の位 |
&h00 |
data3_5/6 |
asc(9) |
|
51 |
text2_7/7(改行コード) |
&h0D |
linenumber
1の位 |
&h14 |
data3_6/6 |
asc(9) |
|
52 |
・・・・・・・・・・・・ |
・・・・ |
行の長さ(bytes) |
&h08 |
data_3_end_1/2 |
&h0D |
|
53 |
|
|
text2_1/8 |
&hFE |
data_3_end_2/2 |
&h0A |
|
54 |
|
|
text2_2/8 |
&h60 |
data file
end |
&h1A |
|
55 |
|
|
text2_3/8 |
asc(") |
・・・・・・・・・・・・ |
・・・・・ |
|
56 |
|
|
text2_4/8 |
asc(B) |
|
|
|
57 |
|
|
text2_5/8 |
asc(B) |
|
|
|
58 |
|
|
text2_6/8 |
asc(B) |
|
|
|
59 |
|
|
text2_7/8 |
asc(") |
|
|
|
60 |
|
|
text2_8/8(改行コード) |
&h0D |
|
|
|
・・・・・・・・・ |
|
|
・・・・・・・・・・・・ |
・・・・・ |
|
|
01) ファイルのはじめ
☆ ヘッダのすぐあとのアドレスを1番目とする。
☆1〜8番目が、ファイル名(8文字まで。それ以上は、切られる。それより少ない(1〜7文字)なら、頭をそろえる。後ろはスペース(&h20)で埋められる。)
☆ 9〜11番目が、拡張子(3文字まで。それ以上は、切られる。それより少ない(1〜2文字)なら、頭をそろえる。後ろはスペース(&h20)で埋められる。)
☆ 17番目が1の位、18番目が256の位でファイルサイズ(Bytes)+34(34Bytesは表の通り管理用のエリアと考えられる。)
☆ ファイルサイズ=((17番目の数)*1+(18番目の数)*256-34)Bytes
02) ファイルの終わり
☆ ファイル終了バイト :&hFF
1)TEXT MODE で保存したファイルの保存形式
☆
34番目が、&hFF以外の場合(&h00~&hFE)だと、テキストモードで保存したファイル。
☆
34番目からプログラムが保存されている。
☆ 34番目は、行番号の256の位、35番目は、行番号の1の位。
☆ 265の位は、&h00~&hFEだから、行番号は、1〜65279
☆
36番目には、その行の文字数が記録されている。行なのだから最後には改行コードがあり、それを含めて理論的には255文字だが実際に1行に書く事のできる文字数(EDITできる文字数)は254文字である。
2) BASIC PROGRAM MODE で保存したファイル形式
☆ 34番目が、&hFF、35番目が、&h00、36番目が、&h03、37番目が、&h01の場合、BASICプログラムモードで保存したファイル。
☆
38番目から、プログラムが保存されている。
☆ 38番目は、行番号の256の位、39番目は、行番号の1の位。
☆
よって、行番号は、((38番目の数)*256+(39番目の数)*1)だが、(34番目が行番号のテキストのフォーマットと区別できるようにするためにBASICでは、ヘッダに&hFFを用いているので、行番号の256の位は、&hFFにならない、1〜65279までとなっている。∵256*&hFF=65280)
☆
40番目には、その行の文字数が記録されている。TEXT
MODE と同じく1〜254文字まで。
☆
41番目なんか知らないけどBASICのプログラムには、最初の行だけ、この部分に、コロン(&H3A)が入っている。もちろん行の文字数に含まれるが、ほかの行には無い。
☆
42番目からプログラムの内容。BASICはなぜか、TEXTと違って、命令はコードで保存されいる。
☆
命令コードは、&hFE + 〜で構成されていて、〜の部分に特有のコードがあり、2文字で1つの命令をあらわすことができる。コードはRESERVED命令(中間コード)。(下図)
|
G850S 中間コード表 |
||||||||||||||||
|
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
|
0 |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
MON |
|
1 |
RUN |
NEW |
CONT |
PASS |
LIST |
LLIST |
CLOAD |
RENUM |
LOAD |
× |
× |
DELETE |
FILES |
× |
× |
LCOPY |
|
2 |
CSAVE |
OPEN |
CLOSE |
SAVE |
× |
RANDOMIZE |
DEGREE |
RADIAN |
GRAD |
BEEP |
WAIT |
GOTO |
TRON |
TROFF |
CLEAR |
USING |
|
3 |
DIM |
CALL |
POKE |
GPRINT |
PSET |
PRESET |
× |
× |
× |
× |
ERASE |
LFILES |
KILL |
× |
× |
× |
|
4 |
× |
× |
× |
× |
× |
OUT |
× |
× |
PIOSET |
POIPUT |
SPOUT |
SPINP |
HDCOPY |
ENDIF |
REPEAT |
UNTIL |
|
5 |
CLS |
LOCATE |
TO |
STEP |
THEN |
ON |
IF |
FOR |
LET |
REM |
END |
NEXT |
STOP |
READ |
DATA |
× |
|
6 |
PRINT |
INPUT |
GOSUB |
LNINPUT |
LPRINT |
RETURN |
RESTORE |
× |
GCURSOR |
LINE |
× |
× |
× |
× |
× |
CIRCLE |
|
7 |
PAINT |
OUTPUT |
APPEND |
AS |
× |
× |
ELSE |
× |
× |
× |
WHILE |
WEND |
SWITCH |
CASE |
DEFAULT |
ENDSWITCH |
|
8 |
MDF |
REC |
POL |
× |
× |
× |
TEN |
RCP |
SQU |
CUR |
HSN |
HCS |
HTN |
AHS |
AHC |
AHT |
|
9 |
FACT |
LN |
LOG |
EXP |
SQR |
SIN |
|
TAN |
INT |
ABS |
SGN |
DEG |
DMS |
ASN |
ACS |
ATN |
|
A |
RND |
AND |
OR |
NOT |
PEEK |
XOR |
INP |
× |
PIOGET |
× |
× |
× |
× |
POINT |
PI |
FRE |
|
B |
EOF |
× |
LOF |
× |
× |
× |
NCR |
NPR |
× |
× |
× |
× |
× |
× |
× |
CUB |
|
C |
× |
× |
× |
× |
× |
× |
MOD |
FIX |
× |
× |
× |
× |
× |
× |
× |
× |
|
D |
ASC |
VAL |
LEN |
VDEG |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
|
E |
× |
× |
× |
× |
× |
× |
× |
× |
× |
INKEY$ |
MID$ |
LEFT$ |
RIGHT$ |
× |
× |
× |
|
F |
CHR$ |
STR$ |
HEX$ |
DMS$ |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
注)×は命令が無い。この部分はむやみに実行しないほうが・・・。
3)RAM DATA FILEを確保したときのファイル形式
☆ 22番目がデータサイズの1の位、23番目がデータ数の256の位。
☆ 34番目からデータは始まり、行番号がなく、改行のようなデータの区切りがある。(改行のようなというのは、データ編集する際、TEXT
EDITORで読み込むと、勝手に行番号がつけられます。そして、このデータの境目を、TEXT EDITOR では改行という形で表しています。その境のコードは、&H0D
+ &H0A です。なぜか2バイトであらわしています。)
☆ ☆
また、データの最後(ファイルの末尾)に保存したデータの次に、有効なデータはここまでですよ〜といったマークがあります。これは、(&H1A)です。
☆ 例(データ1,&H0D
&H0A , &H1A , データ2)
☆ よってデータのサイズには、これらの要素が含まれた値になっています。(&h1Aまで)
☆ データ領域(確保したファイル)の最後には何もありませんが、17,18番目の数によって、ファイルサイズが決まり、必然的にファイルの最後が決まります。
4)サンプルプログラム

機械語エリアを確保しているポケコンでも動作するよう、あらかじめ確保した機械語エリアのアドレスを変数MAに代入しています。(&H7FFEに1の位、&H7FFFに256の位の値。これは、ファイルエリアの開始アドレス。)
このプログラムを実行すると、最初にファイルのリストを作ってしまいます。
*
EOFからは、表示用のプログラムが記述してあります。表示では、そのファイルの保存形式を、一番左にアイコンの形で表示しています。拡張子で判断したものではないため、どんな形式で保存したのか分からなくなっても表示を見れば一発で理解できます。FILES命令では表示されない、RAM DATも表示します。
一通り表示し終わったら、何かキーを押すと、簡単なメモリーエリアの表示がでます。