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のサブルーチンを作成していきたいと思います。