BIOSのジャンプテーブルの後にはディスクパラメータテーブルが続きます。
このディスクパラメータテーブルは、MAC(アセンブラ)のDISKDEFマクロ・ライブラリーで、マクロにて自動生成できます。
今回は、オリジナルの8インチ片面単密度ディスクをSDCARDで代用しますので、お手本のCBIOSのディスクパラメータテーブルをそのまま使用します。
MACでのマクロでの生成は使用しません。

マクロ例として、MACでのDISKDEFマクロの 8インチ片面単密度ディスクのマクロ文は次のようになります。

;	maclib 	diskdef
;	disks	4
;	diskdef	0,1,26,6,1024,243,64,64,offset
;	diskdef	1,0
;	diskdef	2,0
;	diskdef	3,0

3行目のパラメータは次のような意味があるようです。(左端から順番に)
①ロジカルディスクNo A=0,B=1・・・・P=15
②各トラックの最初のセクターNo 0 or 1
③各トラックの最後のセクターNo
④スキュー(飛び越し読み書き)をかけないときは省略
⑤1データブロックサイズ(バイト)
⑥ディスク全容量(除システムトラック)(データブロック)
⑦ディレクトリーエントリー数
⑧ディスケット交換エントリ数(⑦と同じ数)(HDは0)
⑨システムトラックを確保するためのオフセット数

実際に 8インチ片面単密度ディスクテーブルをASxxxx用に書き直したものが下記になります。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;	disk Parameter header for disk 00
dpbase:	.dw	trans, 0000h
	.dw	0000h, 0000h
	.dw	dirbf, dpblk
	.dw	chk00, all00
;	disk parameter header for disk 01
	.dw	trans, 0000h
	.dw	0000h, 0000h
	.dw	dirbf, dpblk
	.dw	chk01, all01
;	disk parameter header for disk 02
	.dw	trans, 0000h
	.dw	0000h, 0000h
	.dw	dirbf, dpblk
	.dw	chk02, all02
;	disk parameter header for disk 03
	.dw	trans, 0000h
	.dw	0000h, 0000h
	.dw	dirbf, dpblk
	.dw	chk03, all03
;
;	sector translate vector
trans:	.db	 1,  7, 13, 19	;sectors  1,  2,  3,  4
	.db	25,  5, 11, 17	;sectors  5,  6,  7,  6
	.db	23,  3,  9, 15	;sectors  9, 10, 11, 12
	.db	21,  2,  8, 14	;sectors 13, 14, 15, 16
	.db	20, 26,  6, 12	;sectors 17, 18, 19, 20
	.db	18, 24,  4, 10	;sectors 21, 22, 23, 24
	.db	16, 22		;sectors 25, 26
;
dpblk:	;disk parameter block, common to all disks
	.dw	26		;sectors per track
	.db	3		;block shift factor
	.db	7		;block mask
	.db	0		;null mask
	.dw	242		;disk size-1
	.dw	63		;directory max
	.db	192		;alloc 0
	.db	0		;alloc 1
	.dw	16		;check size
	.dw	2		;track offset
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

実際にASxxxxにてアセンブルしてみました。

                            43 ;;
                             44 ;;     IBN-COMPATIBLE 8 Inch DISKS
                             45 ;;
                             46 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                             47 ;	disk Parameter header for disk 00
q  4A33 6B 4A 00 00          48 dpbase:	.dw	trans, 0000h
q  4A37 00 00                49 	.dw	0000h, 0000h
u  4A39 00 00 85 4A          50 	.dw	dirbf, dpblk
u  4A3D 00 00 00 00          51 	.dw	chk00, all00
                             52 ;	disk parameter header for disk 01
q  4A41 6B 4A 00 00          53 	.dw	trans, 0000h
q  4A45 00 00                54 	.dw	0000h, 0000h
u  4A47 00 00 85 4A          55 	.dw	dirbf, dpblk
ASxxxx Assembler V05.31  (Zilog Z80 / Hitachi HD64180)                  
u  4A4B 00 00 00 00          56 	.dw	chk01, all01

                             57 ;	disk parameter header for disk 02
q  4A4F 6B 4A 00 00          58 	.dw	trans, 0000h
q  4A53 00 00                59 	.dw	0000h, 0000h
u  4A55 00 00 85 4A          60 	.dw	dirbf, dpblk
u  4A59 00 00 00 00          61 	.dw	chk02, all02
                             62 ;	disk parameter header for disk 03
q  4A5D 6B 4A 00 00          63 	.dw	trans, 0000h
q  4A61 00 00                64 	.dw	0000h, 0000h
u  4A63 00 00 85 4A          65 	.dw	dirbf, dpblk
u  4A67 00 00 00 00          66 	.dw	chk03, all03
                             67 ;
                             68 ;	sector translate vector
   4A6B 01 07 0D 13          69 trans:	.db	 1,  7, 13, 19	;sectors  1,  2,  3,  4
   4A6F 19 05 0B 11          70 	.db	25,  5, 11, 17	;sectors  5,  6,  7,  6
   4A73 17 03 09 0F          71 	.db	23,  3,  9, 15	;sectors  9, 10, 11, 12
   4A77 15 02 08 0E          72 	.db	21,  2,  8, 14	;sectors 13, 14, 15, 16
   4A7B 14 1A 06 0C          73 	.db	20, 26,  6, 12	;sectors 17, 18, 19, 20
   4A7F 12 18 04 0A          74 	.db	18, 24,  4, 10	;sectors 21, 22, 23, 24
   4A83 10 16                75 	.db	16, 22		;sectors 25, 26
                             76 ;
   4A85                      77 dpblk:	;disk parameter block, common to all disks
   4A85 1A 00                78 	.dw	26		;sectors per track
   4A87 03                   79 	.db	3		;block shift factor
   4A88 07                   80 	.db	7		;block mask
   4A89 00                   81 	.db	0		;null mask
   4A8A F2 00                82 	.dw	242		;disk size-1
   4A8C 3F 00                83 	.dw	63		;directory max
   4A8E C0                   84 	.db	192		;alloc 0
   4A8F 00                   85 	.db	0		;alloc 1
   4A90 10 00                86 	.dw	16		;check size
   4A92 02 00                87 	.dw	2		;track offset
                             88 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

次回からは BIOSのサブルーチンを作成していきたいと思います。

おすすめの記事