-
Notifications
You must be signed in to change notification settings - Fork 0
/
protocol.txt
174 lines (143 loc) · 5.27 KB
/
protocol.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
TransDisk 2.0
通信プロトコル
$Id: protocol.txt,v 1.2 2000/01/06 01:51:17 cisc Exp $
概要
PC-8801 と Windows マシンをシリアルクロスケーブルで接続し,
1. ディスクイメージの吸出し
2. ディスクイメージの書き出し
3. ROM データの吸出し
の 3種類の転送を行う.
転送プロトコル
データ交換にはシリアル通信を用いる.
PC8801 側から発信する場合は機械の仕様限界を超えた 38400 bps による
転送を試みる.
このため,バイト落ちなどのエラー検出に対応できるプロトコルが必要.
仕様
PC->88 方向に対するコマンド形式とする
PC は 88 のコマンド実行を中断できることとする
88->PC においては x1 モードを使った高速転送の使用を試みる
転送はパケット単位で行い,毎回 CRC チェックを行う
88 側にはパケットの再送コマンドを持たせる
コマンドのやり取り
PC 88
CMD 送信 ->
CMD 受信
<- ACK 送信
ACK 受信
CMD 実行
<- 結果送信
結果受信
再送が必要な場合 CMD として 88 側に送る
コマンド
制御に関するコマンド
SendXDISKState
arg: [01] none
res: VERH VERL FDDTYPE ROMTYPE SIOTYPE
xdisk のバージョンや 88 に関する情報を送る
FDDTYPE 2HD 機か否か
ROMTYPE 搭載されている ROM の種類
(b0:漢1, b1:漢2, b2:辞, b3:CD)
SIOTYPE bps を変更可能か(38400bps 転送は行えるか)
Completed
arg: [00] none
res: none
終了メッセージを表示する
QuitXDISK
arg: [06] none
res: none
XDISK を終了する
SendLastPacket
arg: [08]
res: data
最後に転送したパケットをもう一度送り直す
ディスクに関するコマンド
SetDrive
arg: [02] DRIVE TYPE
res: TYPE
TYPE 0=2D, 1=2DD, 2=2HD, -1=自動
bit7:書込み可能か確認
以降のコマンドでアクセスするディスクドライブと種類を設定する
TYPE に「自動」を選択すると 88 側でディスクの種類を判断する
ディスクイメージの吸出しに関するコマンド
ReadTrack
arg: [03] TRACK
res: 成否
指定されたトラックを読み込む
SendTrack
arg: [04] MODE
res: TRACKDATA
ReadTrack で読み込んだトラックデータを転送する
MODE では高速転送を行うか否かを設定する
SendAndReadTrack
arg: [05] TRACK MODE
res: TRACKDATA
前回読み込んだトラックデータを転送し,それと並列して指定された
トラックを読み込む
ディスクイメージの書き出しに関するコマンド
WriteTrack
arg: [09] TRACK WRITESEQ
res:
送ったトラックデータをディスクに書き込む
ROM データの吸出しに関するコマンド
SendMemory
arg: [07] INDEX MODE
res: ROMDATA
ROM データ(1000h 分)を送信する
INDEX
00-1F KANJI ROM (00-07 ... f8-ff)
20-3F KANJI ROM 2
40-47 N88-BASIC ROM
48-4f N-BASIC ROM
50-57 EROM0-3
58-59 DISK ROM
60-6f CDBIOS ROM
70-EF 辞書 ROM
パケットのフォーマット
ヘッダ文字
'!'
コマンドパケットは常に 0x21 から始まる
88 側はこの文字を受け取った時点で実行中の処理を中断し
コマンドの実行に備える
'%'
88 側がパケットを受領すると即座に応答を返す
PC はこのパケットを受領し,パケット番号が一致していることを
確認することで 88 側がコマンドを実行することを確認できる.
'#','$'
結果などのデータパケットを示す
88 側の転送の場合 必要に応じて 38400 bps で転送される
'$' の場合圧縮がかけてある
パケット内構造
8bit -> 7bit に符号化,40h - bfh の文字を使う
パケット受領中にこれ以外の文字を読み込んだ場合エラーとする
+0.w パケット番号
+2.w データサイズ
+4... データ
+?.w CRC
CRC をチェックし,正しい値であると判断できたら
その時点で正しいパケットを受領したことになる.
パケット圧縮に関して
トラックやROMデータを転送する場合は簡単な圧縮を行う
88->PC は RLE フォーマットを使う
+0.w b15:14 00 無圧縮 / 01 RLE 圧縮
b13:0 展開後のパケットサイズ
RLE 圧縮のフォーマット
1 バイト読み込んで MSB が 1 だったら, 次に続く1バイトを(b6:0)+3 byte 続ける
0 だったら次に続く (b6:0)+1 byte 分コピー
PC->88 は LZ77 圧縮を使う.
LZ77 圧縮をする場合最後の 2 バイトは展開後データの CRC となる
+0.w b15:14 00 無圧縮 / 10 LZ77 圧縮
b13:0 展開後のパケットサイズ
WriteTrack 用データのフォーマット
処理ブロックの繰り返しとなっている
+0 処理内容(bit0-5) (bit6 は密度)
0: 終了
1: WRITE ID
+1 length
+2 セクタ数
+3 gap3
+4 D
+5... ID x セクタ数
2: WRITE DATA (bit7==1 なら DELETED)
+1 ID
+5 データ長
+7... データ