1 ; Macro Definitions for CP/M 2.2 BIOS Data Structures.
3 ; dtbl <dph0,dph1,...> - drive table
5 ; dpb label - disk parameter block
10 ; checked_dir_entries,
13 ; dph disk_parameter_block - disk parameter header
15 ; endef - generate the ram data areas
18 ; These macros do not support sector skew,
19 ; and assume that the first sector is allways 0.
22 ; Example, where only drive A: and E: are defined, both with
23 ; the avrcpm disk definition (standard ss/sd floppy but without skew):
25 ; dphtab: dtbl <dpha, 0, 0, 0, dphe>
26 ; dpb dpb243, 26, 1024, 243, 64, 64, 2
32 ; Drive Table. Contains 16 one word entries.
47 .' Too many drives. Max 16 allowed'
60 ;; define a db statement
64 ;; define a dw statement
68 dpb macro pbn,nsec,bls,dks,dir,cks,ofs
69 ;; generate the set statements for later tables
70 als&pbn set (dks)/8 ;;size of allocation vector
74 css&pbn set (cks+3)/4 ;;number of checksum elements
75 ;; generate the block shift value
76 blkval set bls/128 ;;number of sectors/block
77 blkshf set 0 ;;counts right 0's in blkval
78 blkmsk set 0 ;;fills with 1's from right
79 rept 16 ;;once for each bit position
83 ;; otherwise, high order 1 not found yet
85 blkmsk set (blkmsk shl 1) or 1
88 ;; generate the extent mask byte
89 blkval set bls/1024 ;;number of kilobytes/block
90 extmsk set 0 ;;fill from right with 1's
95 ;; otherwise more to shift
96 extmsk set (extmsk shl 1) or 1
99 ;; may be double byte allocation
101 extmsk set (extmsk shr 1)
103 ;; now generate directory reservation bit vector
104 dirrem set dir ;;# remaining to process
105 dirbks set bls/32 ;;number of entries per block
106 dirblk set 0 ;;fill with 1's on each loop
111 ;; not complete, iterate once again
112 ;; shift right and add 1 high order bit
113 dirblk set (dirblk shr 1) or 8000h
115 dirrem set dirrem-dirbks
120 pbn: ddw %nsec,<;sec per track>
121 ddb %blkshf,<;block shift>
122 ddb %blkmsk,<;block mask>
123 ddb %extmsk,<;extnt mask>
124 ddw %(dks)-1,<;disk size-1>
125 ddw %(dir)-1,<;directory max>
126 ddb %dirblk shr 8,<;alloc0>
127 ddb %dirblk and 0ffh,<;alloc1>
128 ddw %(cks+3)/4,<;check size>
141 dw 0000h,0000h ;no translate table
142 dw 0000h,0000h ;scratch area
143 dw dirbuf,pbn ;dir buff,parm block
144 ; dw csv&?dn,alv&?dn ;check, alloc vectors
147 lset css,%?dn,css&pbn
148 lset als,%?dn,als&pbn
161 dirbuf: ds 128 ;directory access buffer