復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第12回]
●BIOSのディスクパラメータ
前回はCP/M BIOSのディスクアクセスルーチンについて説明をしましたが、ディスクパラメータも設定しなければなりません。
これもなかなかに面倒なものなのですが、CP/M2.2ソースプログラムのディスクパラメータの項目も、見事に抜けてしまっています。
こんな具合です。
;
;**************************************************************
;*
;* BDOS data storage pool.
;*
;**************************************************************
;
EMPTYFCB: DEFB 0E5H ;empty directory segment indicator.
WRTPRT: DEFW 0 ;write protect status for all 16 drives.
LOGIN: DEFW 0 ;drive active word (1 bit per drive).
USERDMA:DEFW 080H ;user's dma address (defaults to 80h).
;
; Scratch areas from parameter block.
;
SCRATCH1: DEFW 0 ;relative position within dir segment for file (0-3).
SCRATCH2: DEFW 0 ;last selected track number.
SCRATCH3: DEFW 0 ;last selected sector number.
;
; Disk storage areas from parameter block.
;
DIRBUF: DEFW 0 ;address of directory buffer to use.
DISKPB: DEFW 0 ;contains address of disk parameter block.
CHKVECT:DEFW 0 ;address of check vector.
ALOCVECT: DEFW 0 ;address of allocation vector (bit map).
;
; Parameter block returned from the bios.
;
SECTORS:DEFW 0 ;sectors per track from bios.
BLKSHFT:DEFB 0 ;block shift.
BLKMASK:DEFB 0 ;block mask.
EXTMASK:DEFB 0 ;extent mask.
DSKSIZE:DEFW 0 ;disk size from bios (number of blocks-1).
DIRSIZE:DEFW 0 ;directory size.
ALLOC0: DEFW 0 ;storage for first bytes of bit map (dir space used).
ALLOC1: DEFW 0
OFFSET: DEFW 0 ;first usable track number.
XLATE: DEFW 0 ;sector translation table address.
;
;
CLOSEFLG: DEFB 0 ;close flag (=0ffh is extent written ok).
RDWRTFLG: DEFB 0 ;read/write flag (0ffh=read, 0=write).
FNDSTAT:DEFB 0 ;filename found status (0=found first entry).
MODE: DEFB 0 ;I/o mode select (0=random, 1=sequential, 2=special random).
EPARAM: DEFB 0 ;storage for register (E) on entry to bdos.
RELBLOCK: DEFB 0 ;relative position within fcb of block number written.
COUNTER:DEFB 0 ;byte counter for directory name searches.
SAVEFCB:DEFW 0,0 ;save space for address of fcb (for directory searches).
BIGDISK:DEFB 0 ;if =0 then disk is > 256 blocks long.
AUTO: DEFB 0 ;if non-zero, then auto select activated.
OLDDRV: DEFB 0 ;on auto select, storage for previous drive.
AUTOFLAG: DEFB 0 ;if non-zero, then auto select changed drives.
SAVNXT: DEFB 0 ;storage for next record number to access.
SAVEXT: DEFB 0 ;storage for extent number of file.
SAVNREC:DEFW 0 ;storage for number of records in file.
BLKNMBR:DEFW 0 ;block number (physical sector) used within a file or logical sect
LOGSECT:DEFW 0 ;starting logical (128 byte) sector of block (physical sector).
FCBPOS: DEFB 0 ;relative position within buffer for fcb of file of interest.
FILEPOS:DEFW 0 ;files position within directory (0 to max entries -1).
;
; Disk directory buffer checksum bytes. One for each of the
; 16 possible drives.
;
CKSUMTBL: DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;
; Extra space ?
;
DEFB 0,0,0,0
|
;************************************************************** ;* ;* C P / M version 2 . 2 ;* ;* Reconstructed from memory image on February 27, 1981 ;* ;* by Clark A. Calkins ;* ;************************************************************** ; |
;
D1B3 E5 EMPTYFCB: DEFB 0E5H ;empty directory segment indicator.
D1B4 0000 WRTPRT: DEFW 0 ;write protect status for all 16 drives.
D1B6 0000 LOGIN: DEFW 0 ;drive active word (1 bit per drive).
D1B8 8080 USERDMA:DEFW 8080H ;12.1.5 ;user's dma address (defaults to 80h).
;
D1BA 0000 XLATE: DEFW 0 ;sector translation table address.
; Scratch areas from parameter block.
D1BC C0B8 SCRATCH1: DEFW 0B8C0H ;relative position within dir segment for file (0-3).
D1BE C2B8 SCRATCH2: DEFW 0B8C2H ;last selected track number.
D1C0 C4B8 SCRATCH3: DEFW 0B8C4H ;last selected sector number.
;
; Disk storage areas from parameter block.
;
D1C2 00B8 DIRBUF:DEFW 0B800H ;address of directory buffer to use.
D1C4 CAD1 DISKPB:DEFW SECTORS ;contains address of disk parameter block.
D1C6 80B8 CHKVECT:DEFW 0B880H ;address of check vector.
D1C8 A0B8 ALOCVECT:DEFW 0B8A0H ;address of allocation vector (bit map).
;
; Parameter block returned from the bios.
;
D1CA 1000 SECTORS:DEFW 16 ;sectors per track from bios.
D1CC 02 BLKSHFT:DEFB 2 ;block shift.sector in a block 128*2^n
D1CD 03 BLKMASK:DEFB 3 ;block mask.sector no. in a block - 1
D1CE 00 EXTMASK:DEFB 0 ;extent mask.
D1CF 1700 DSKSIZE:DEFW 23 ;disk size from bios (number of blocks-1).
D1D1 1F00 DIRSIZE:DEFW 31 ;directory size.(max file name no.-1)
D1D3 C000 ALLOC0: DEFW 0C0H ;storage for first bytes of bit map (dir space used).
D1D5 0000 ALLOC1: DEFW 0
D1D7 0000 OFFSET: DEFW 0 ;first usable track number.
;
|
>d.,8800,88ff 8800 00 46 49 4C 4C 45 35 20-20 43 4F 4D 00 00 00 02 .FILLE5 COM.... 8810 02 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8820 00 41 42 43 20 20 20 20-20 43 4F 4D 00 00 00 02 .ABC COM.... 8830 03 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8840 00 43 50 4D 54 53 54 39-20 43 4F 4D 00 00 00 02 .CPMTST9 COM.... 8850 04 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 8860 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 8870 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 8880 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 8890 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 88A0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 88B0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 30 E5 E5 E5 ............0... 88C0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 88D0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 88E0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ 88F0 E5 E5 E5 E5 E5 E5 E5 E5-E5 E5 E5 E5 E5 E5 E5 E5 ................ |
;
; Parameter block returned from the bios.
;
D1CA 1000 SECTORS:DEFW 16 ;sectors per track from bios.
D1CC 02 BLKSHFT:DEFB 2 ;block shift.sector in a block 128*2^n
D1CD 03 BLKMASK:DEFB 3 ;block mask.sector no. in a block - 1
D1CE 00 EXTMASK:DEFB 0 ;extent mask.
D1CF 1700 DSKSIZE:DEFW 23 ;disk size from bios (number of blocks-1).
D1D1 1F00 DIRSIZE:DEFW 31 ;directory size.(max file name no.-1)
D1D3 C000 ALLOC0: DEFW 0C0H ;storage for first bytes of bit map (dir space used).
D1D5 0000 ALLOC1: DEFW 0
D1D7 0000 OFFSET: DEFW 0 ;first usable track number.
;
|