直線上に配置

1MBなDISK-BASICを640KB/320KBに移植する


640KBなDISK-BASICを1MB/320KBに移植する事もできます
EPSONのDISK-BASICは未検証です
直線上に配置
★概要
DISK-BASICの制約として、起動可能なディスクが
例えば1MB版なら1MBのものしか作れないわけですが、
今回は1MB版のDISK-BASICから640KB 2DDなDISK-BASICを
作ってみようという趣旨の企画です。

ちなみに640KB -> 1MBもできる

更に1MB -> 320KB(2D)にもできる
※ただしFATがトラック18サイド1にあるため、そこまでに
DISK-CODEがおさまる必要アリ。


★1MB <-> 640KBができるディスク

Ver 2.0以降の640KB または 1MBなDISK-BASICが対象です
※品番とバージョンの関係はこちらも参照
N88BASIC バージョン一覧

Ver 3.0, PC-98H44以降のディスクは
おそらく無改変で2HD <--> 2DDに出来ると思います。

Ver 2.0, PC-98H39-4WとPC-98H87はIPLの改変が必要ですが、
DISK-CODEは無改変で移植できます。

Ver 1.0, PC-9884はそもそも2DD未対応です。
2DD対応のPC-98H37-4Wというものがあるという噂を聞きますが、
未対応なPC-9884を2DD仕様にするのはしんどそうです。

尚、EPSONのDISK BASICは未検証です。

★1MB (640KB) <-> 320KBができるディスク

Ver 3.0以降は無改変で移植できると思いますが、
DISK CODEのサイズがFAT領域(トラック18サイド1)を超えると×
起動はできるがファイルの読み書きができなくなる

Ver 2.0,PC-98H39-4Wは無改変で移植できます。
PC-98H87はIPLの改変が必要です。内容は1MBに同じ。

Ver 1.0, PC-9884とPC-9835-2WはIPLの改変が必要ですが、
DISK-CODEは無改変で移植できます。



★やり方

要約

・移植元:IPLとDISKCODEを抽出
・移植先:IPLとDISKCODEを所定の位置に書く
・移植先:FATを調整する


用意するもの
・移植元となるDISK-BASIC
・移植先のフロッピー(フォーマット済)
640KB->1MBでは、1MBのトラック0サイド0が128bytes/Secと若干面倒
・バイナリエディタ
Windows 10機でディスクイメージを操作したほうがいい

ベタイメージ化はVectorのPDPがオススメ。
https://www.vector.co.jp/soft/dl/dos/util/se023706.html

FAT関連の操作はVectorのFDSがオススメ。
https://www.vector.co.jp/soft/dos/util/se000577.html

移植元のDISK-BASICを対象に
1. IPL抽出 先頭(トラック0サイド0セクタ1)から512bytes

2. FATを見てDISK-CODEのサイズを概算

   FATの位置:
     1MB:トラック35サイド0セクタ24-26
   640KB:トラック40サイド0セクタ14-16
   320KB:トラック18サイド1セクタ14-16
   140KB:トラック18    セクタ14-16
   FDS > Sectorで見ると楽

   ここではFEが何連続しているかを数える
   トラック0サイド0クラスタ0を先頭として、
   1バイト=1クラスタで使用状況が書いてある
   数える事で、どのサイドまでがDISK-CODE
   かを大まかに知ることができる
   1MBなら1クラスタ = 26セクタ = 1サイド
   640KBなら 1クラスタ = 16セクタ = 1サイド
   320KBなら 1クラスタ = 8セクタ = 0.5サイド (注意!)
   140KBなら 1クラスタ = 8セクタ = 0.5サイド (注意!)

3. DISK-CODEのバイナリ抽出
     1MB:トラック1サイド0セクタ1から
   640KB:トラック0サイド0セクタ3から
   320KB:トラック0サイド0セクタ3から
   140KB:トラック0    セクタ3から
   2.で調べたサイドまで全抽出

以下は移植先のディスクで

4. IPLを書く 先頭から512bytes

5. DISK-CODEのバイナリを書く
     1MB:トラック1サイド0セクタ1から
   640KB:トラック0サイド0セクタ3から
   320KB:トラック0サイド0セクタ3から
   140KB:トラック0    セクタ3から

6. FATを編集
     1MB:トラック35サイド0セクタ24-26
   640KB:トラック40サイド0セクタ14-16
   320KB:トラック18サイド1セクタ14-16
   140KB:トラック18    セクタ14-16

   2.で調べたクラスタ数をもとに計算し、
   DISK-CODEのあるサイドをFEとしてマークする
   1MB以外ではクラスタ0が開始地点だが、
   1MBではトラック1サイド0クラスタ2からが
   DISK-CODE領域なので開始クラスタに注意
   1クラスタあたりの容量:
     1MB: 256bytes ×26
   640KB: 256bytes ×16
   320KB: 256bytes ×8 (注意:1サイド=2クラスタ)
   140KB: 256bytes ×8 (注意:1トラック=2クラスタ)

   FDS > SectorでRキーを連打して
   どこまであるか見たほうがはやいと思う

★PC-98H39 / PC-98H87間の移植について

IPLを変える必要アリ。

以下はDISKTUT2.LZHにある、PC-98H39-4WのIPLの解説

     +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
0000 BE C0 1F 8E D6 BC 00 02-B8 5F 0E CD 1B A0 84 05
0010 B4 07 CD 1B 72 EA BB 00-98 B5 01 B1 00 B6 00 B2
0020 03 BE 00 10 8E C6 BD 00-00 E8 1D 00 A0 00 05 0C
0030 50 A2 00 05 BE 60 00 8E-DE C6 06 05 05 01 B8 00
0040 E8 50 B8 02 00 50 CB FE-C2 80 FA 11 72 09 80 F6
0050 01 B2 01 75 02 FE C1 53-81 FB 00 01 72 03 BB 00
0060 01 B4 56 CD 1B 72 99 5B-81 C5 00 01 81 EB 00 01
0070 77 D5 C3 00 00 00 00 00-00 00 00 00 00 00 00 00


1FC0:0000 BEC01F         MOV	SI,1FC0 
1FC0:0003 8ED6           MOV	SS,SI 
1FC0:0005 BC0002         MOV	SP,0200 	;スタックの設定
1FC0:0008 B85F0E         MOV	AX,0E5F		;DISK BIOS SET
1FC0:000B CD1B           INT	1B		;5"FD両面モードの設定
1FC0:000D A08405         MOV	AL,[0584] 	;disk_boot
1FC0:0010 B407           MOV	AH,07 		;DISK BIOS RECALIBRATE
1FC0:0012 CD1B           INT	1B 		;ヘッドのシリンダ0への移動
1FC0:0014 72EA           JB	0000 		;エラー処理
1FC0:0016 BB0098         MOV	BX,9800 	;読み込むバイト数
1FC0:0019 B501           MOV	CH,01 		;セクタ長(N=1 256バイト)
1FC0:001B B100           MOV	CL,00 		;シリンダNo.0
1FC0:001D B600           MOV	DH,00 		;ヘッド No.0
1FC0:001F B203           MOV	DL,03 		;セクタ  No.3
1FC0:0021 BE0010         MOV	SI,1000 
1FC0:0024 8EC6           MOV	ES,SI 		;読み込むセグメント
1FC0:0026 BD0000         MOV	BP,0000 	;読み込むオフセット
1FC0:0029 E81D00         CALL	0049 		;READ DATA
1FC0:002C A00005         MOV	AL,[0500] 	;bios_flag 
1FC0:002F 0C50           OR	AL,50           ;DISK BASIC 使用フラグ ON
1FC0:0031 A20005         MOV	[0500],AL 
1FC0:0034 BE6000         MOV	SI,0060 	;DISK BASIC ワーク・セグメント
1FC0:0037 8EDE           MOV	DS,SI 
1FC0:0039 C606050501     MOV	Byte Ptr [0505],01 ;uc_srvt N88-BASIC(86)
1FC0:003E B800E8         MOV	AX,E800 
1FC0:0041 50             PUSH	AX 
1FC0:0042 B80200         MOV	AX,0002 
1FC0:0045 50             PUSH	AX 
1FC0:0046 CB             RETF	 		;ROM BASIC へのジャンプ
1FC0:0047 FEC2           INC	DL 		;セクタNo.+1
1FC0:0049 80FA11         CMP	DL,11 		;READ DATA サブルーチン エントリ
1FC0:004C 7209           JB	0057 		;セクタNo.>16?
1FC0:004E 80F601         XOR	DH,01 		;ヘッド反転
1FC0:0051 B201           MOV	DL,01 		;セクタNo.1
1FC0:0053 7502           JNZ	0057 
1FC0:0055 FEC1           INC	CL 		;ヘッドNo.が0ならシリンダNo.+1
1FC0:0057 53             PUSH	BX 
1FC0:0058 81FB0001       CMP	BX,0100 
1FC0:005C 7203           JB	0061 		;最終レコード?
1FC0:005E BB0001         MOV	BX,0100 
1FC0:0061 B456           MOV	AH,56		;DISK BIOS
1FC0:0063 CD1B           INT	1B 		;READ DATA データの読み出し
1FC0:0065 7299           JB	0000 		;エラー処理
1FC0:0067 5B             POP	BX 
1FC0:0068 81C50001       ADD	BP,0100 	;ポインタ+100h
1FC0:006C 81EB0001       SUB	BX,0100 	;カウンタ -100h
1FC0:0070 77D5           JA	0047 
1FC0:0072 C3             RET	 

変更する箇所は赤文字の3箇所。PC-98H87ではこうなる

1FC0:0019 B501           MOV	CH,01 		;セクタ長(N=1 256バイト)
1FC0:001B B101           MOV	CL,01 		;シリンダNo.1
1FC0:001D B600           MOV	DH,00 		;ヘッド No.0
1FC0:001F B201           MOV	DL,01 		;セクタ  No.1

1FC0:0049 80FA1B         CMP	DL,1B 		;READ DATA サブルーチン エントリ
1FC0:004C 7209           JB	0057 		;セクタNo.>26?

★PC-9835 / PC-9884間の移植について

改変内容は上と全く同じです


・PC-9835-2W(320KB)

1FC0:0019 B501           MOV	CH,01 		;セクタ長(N=1 256バイト)
1FC0:001B B100           MOV	CL,00 		;シリンダNo.0
1FC0:001D B600           MOV	DH,00 		;ヘッド No.0
1FC0:001F B203           MOV	DL,03 		;セクタ  No.3

1FC0:0049 80FA11         CMP	DL,11 		;READ DATA サブルーチン エントリ
1FC0:004C 7209           JB	0057 		;セクタNo.>16?



・PC-9884 (1MB)

1FC0:0019 B501           MOV	CH,01 		;セクタ長(N=1 256バイト)
1FC0:001B B101           MOV	CL,01 		;シリンダNo.1
1FC0:001D B600           MOV	DH,00 		;ヘッド No.0
1FC0:001F B201           MOV	DL,01 		;セクタ  No.1

1FC0:0049 80FA1B         CMP	DL,1B 		;READ DATA サブルーチン エントリ
1FC0:004C 7209           JB	0057 		;セクタNo.>26?

★PC-9835-1W と PC-9835-2W の移植について

PC-8031-1Wを持っていないため推測ですが、多分無改造で動きます。
変えるとしたらここでしょうか

・PC-9835-1W (140KB)

1FC0:0008 B8500E         MOV	AX,0E50		;DISK BIOS SET

1FC0:004E 30F6           XOR	DH,DH 		
1FC0:0050 90             NOP

・PC-9835-2W (320KB)

1FC0:0008 B85F0E         MOV	AX,0E5F		;DISK BIOS SET

1FC0:004E 80F601         XOR	DH,01 		;ヘッド反転

直線上に配置

トップ アイコン