Skip to content

Latest commit

 

History

History
194 lines (139 loc) · 5.95 KB

HuBASIC_Format.md

File metadata and controls

194 lines (139 loc) · 5.95 KB

HuBASIC Format詳細

参考文献:

http://www.z88dk.org/tools/x1/
http://www.z88dk.org/tools/x1/XBrowser_User_Guide.pdf

基本:

  • 1セクタ = 256バイト
  • 16セクタ = 1トラック(2D)
  • 26セクタ = 1トラック(2HD)
  • 1クラスタ = 16セクタ
  • ファイルシステムはクラスタ単位で管理する
  • 特記しない限りはリトルエンディアン
  • トラックとセクタの関係はトラック構成(2D)を参照

トラック構成(2D)

トラック セクタ
トラック0 1~16セクタ
トラック1 1~16セクタ
トラック79 1~16クラスタ

ブートセクタ

  • 位置:トラック0 / 1セクタ目
  • エントリー 32バイト(複数ある場合もある?)
名前 位置 サイズ 詳細
ブートフラグ 0x00 1 0x01=起動可能
ラベル 0x01 13 IPLにより表示
拡張子 0x0E 3 'Sys'
パスワード 0x11 1 無指定なら0x20
サイズ 0x12 2 プログラムサイズ
ロードアドレス 0x14 2
実行アドレス 0x16 2
日付 0x18 6 日付フォーマット
未使用? 0x1D 1
開始セクタ 0x1E 2 [1]

[1] セクタ数。連続である必要あり。

ブート条件

  • ブートフラグが0x01
  • 拡張子が'Sys'
  • 開始クラスタではなく開始セクタの指定

アロケーションテーブル

  • 位置: 15セクタ(トラック0)
  • 長さ: 1セクタ
  • クラスタ数 : 80クラスタ

2DD

  • クラスタ数: 160クラスタ

2HD

  • 位置: 29セクタ(トラック1/3セクタ)
  • 長さ: 2セクタ
  • クラスタ数: 250クラスタ

アロケーションテーブル内容(2D)

  • 0x00は未使用(空き)を表す
  • 0x80-0x8Fはファイル終端を示す
    下位4ビットの0x00-0x0Fはクラスタ中で使用された最後のセクタ
  • 他の値は次のクラスタの位置を示す

[note] 最初の2クラスタ分はファイルシステムで利用するために予約されている。
その為、通常は0x01,0x8Fと書かれている。

2HD

  • 基本は2Dと同じ
  • 最初のアロケーションテーブル用セクタ(29セクタ)は128クラスタ分、残りは次のセクタ(30セクタ)になる
  • アロケーションテーブルのセクタは、クラスタの下位ビットと上位ビットに分かれる。
  • 下位ビットの部分は2Dと同じく、0x80-0x8Fでファイル終端を表す
  • セクタの0x00-0x7Fがクラスタの下位ビット(0bit-6bit)、0x80-0xFFは上位ビット(7bit-)を表す
  • 2HDの場合、128+122=250で、それ以降は0x8Fになる。

[note] 最初の3クラスタはファイルシステムで利用するために予約されている。
その為、0x01,0x8F,0x8Fと書かれている。

クラスタサイズ

  • 2Dの場合、ディスクの先頭2クラスタ、2HDの場合は3クラスタが予約と考える

ディレクトリエントリ

  • 位置:17セクタ(トラック1 / 1セクタ)
  • 長さ:16セクタ
  • 1エントリ 32バイト

2HD

  • 位置:33セクタ トラック1 / 7セクタ

ディレクトリエントリ詳細

名前 位置 サイズ
ファイルモード 0x00 1
ファイル名 0x01 13
拡張子 0x0E 3
パスワード 0x11 1
サイズ 0x12 2
読み出しアドレス 0x14 2
実行アドレス 0x16 2
日付 0x18 6
開始クラスタ 0x1D 3

エントリ数

  • 8エントリ / 1セクタ

ディレクトリで管理できるエントリ数?

  • 2D = 78?
  • 2HD = 247?

詳細

  • パスワードの値は未指定時、0x20になる
  • 開始クラスタはHIGH,LOW,MIDDLEの順番。
  • ただしアロケーションテーブルと同じく7bitのみが有効になる模様。
  • 開始クラスタは2DではMIDDLEとHIGHに関しては共に0になる

開始クラスタの計算例

開始クラスタのLOWが0x03,MIDDLEが0x01であった場合、
(MIDDLE<<7)|(LOW&0x7F)となり、0x83となり、131クラスタが開始クラスタになる。 次のクラスタ情報は128クラスタを超えているため、30セクタ目になる。

ファイルモード

機能
0x00 削除済み(上書き可能)
0xFF エントリの終了

値の詳細

ビット 機能
7 ディレクトリ
6 読み出しのみ
5 ベリファイ
4 隠しファイル
3 アスキー
2 アスキー
1 BASIC
0 バイナリ

ファイル名:

  • ファイル名と拡張子は0x20で後ろが埋まっている。
  • 例として、拡張子'TXT'の場合は、
'T','X','T',0x20

となる

  • 大文字、小文字が使用可能。
  • ケースセンシティブかどうかは不明。

日付:

  • 6バイト
  • 月+曜日以外はBCD表記
名前 サイズ 詳細
1
月+曜日 1 [1]
1
1 24時間
1
1

[1] 上位4ビットは1~12月、下位4ビットは曜日(0から6)

年は下二桁、80未満の場合は2000を足すとよいかもしれない。
BCD = 4ビットに一桁が割り当てられている。
例 : 分は8分であれば0x08、45分であれば0x45。