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 (FILES命令で見たときのサイズ)

 

02)     ファイルの終わり

 

☆ ファイル終了バイト :&hFF (最後のファイルの後ろだけにある。)

 

1)TEXT MODE で保存したファイルの保存形式

 

        34番目が、&hFF以外の場合(&h00~&hFE)だと、テキストモードで保存したファイル。

        34番目からプログラムが保存されている。

      34番目は、行番号の256の位、35番目は、行番号の1の位。

      265の位は、&h00~&hFEだから、行番号は、1〜65279

        36番目には、その行の文字数が記録されている。行なのだから最後には改行コードがあり、それを含めて理論的には255文字だが実際に1行に書く事のできる文字数(EDITできる文字数)は254文字である。 (表36〜44行参照)

 

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

COS

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)のようになっていたら、データ1が最後のデータでデータ2は、確保しているエリアにあろうが、データとして認められません。

      よってデータのサイズには、これらの要素が含まれた値になっています。(&h1Aまで)

      データ領域(確保したファイル)の最後には何もありませんが、17,18番目の数によって、ファイルサイズが決まり、必然的にファイルの最後が決まります。

 

4)サンプルプログラム

テキスト ボックス: CLS :PRINT "MAKING LIST..."
CLEAR :DIM FI$(50)*18:FC=0:EN=0
MA= PEEK &H7FFE+256* PEEK &H7FFF
AD=MA+25
*NEWFILE
'FILE TYPE
MR= PEEK AD
SWITCH MR
CASE &HFF:EN=1
CASE &HFB:GOSUB *BT
CASE &HFC:FT=2
ENDSWITCH
ON EN+1 GOTO *FILESIZE,*EOF
*BT:FT=1:IF PEEK (AD+34)=&HFF THEN FT=0
RETURN
*FILESIZE
RS=0
FOR A=-18 TO -17:RS=RS*256+ PEEK (AD-A):NEXT :FS$= STR$ (RS-34)
'FILENAME
NA$=""
FOR A=1 TO 11:NA$=NA$+ CHR$ PEEK (AD+A):IF A=8 THEN NA$=NA$+"."
NEXT
'FILE
FI$(FC)= NA$+" "+FS$+ CHR$ (FT+1):FC=FC+1
AD=AD+RS
GOTO *NEWFILE
*EOF:CLS
IF FC=0 THEN END
DATA 1F150A003C0A3C005C5474,011F01006C106C00011F01,7C4438003C0A3C00011F01
DIM CH$(2)*24
FOR A=0 TO 2:READ CH$(A):NEXT
FOR A=0 TO FC-1
PRINT :LOCATE 3,5:PRINT FI$(A)
GCURSOR (0,47):GPRINT CH$( ASC RIGHT$ (FI$(A),1)-1)
FOR B=0 TO 500:NEXT
NEXT
WHILE(INKEY$ =""):WEND
PRINT "  *** MEMORY AREA ***
PRINT USING "######";"Use Area   :";30179- FRE ;" BytesMachine    :";MA-256;" BytesFree Area  :"; FRE ;" BytesAll        : 30179 Bytes";FC;" files"
*STOP:GOTO *STOP

 

 

機械語エリアを確保しているポケコンでも動作するよう、あらかじめ確保した機械語エリアのアドレスを変数MAに代入しています。(&H7FFEに1の位、&H7FFFに256の位の値。これは、ファイルエリアの開始アドレス。

このプログラムを実行すると、最初にファイルのリストを作ってしまいます。

    EOFからは、表示用のプログラムが記述してあります。表示では、そのファイルの保存形式を、一番左にアイコンの形で表示しています。拡張子で判断したものではないため、どんな形式で保存したのか分からなくなっても表示を見れば一発で理解できます。FILES命令では表示されない、RAM DATも表示します。

一通り表示し終わったら、何かキーを押すと、簡単なメモリーエリアの表示がでます。