Files
Digital-Research-Source-Code/CPM OPERATING SYSTEMS/CPM 86/CONCURRENT/CCPM-86 2.0 SOURCE/sdir/dpb86.lst
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

158 lines
7.1 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PL/M-86 COMPILER SDIR 8086 - GET DISK PARAMETERS PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE DPB86
OBJECT MODULE PLACED IN DPB86
COMPILER INVOKED BY: :F0: DPB86.PLM DEBUG OBJECT(DPB86) OPTIMIZE(3) XREF
$compact
$title ('SDIR 8086 - Get Disk Parameters')
1 dpb86:
do;
/* the purpose of this module is to allow independence */
/* of processor, i.e., 8080 or 8086 */
$include (comlit.lit)
=
2 1 = declare
= lit literally 'literally',
= dcl lit 'declare',
= true lit '0ffh',
= false lit '0',
= boolean lit 'byte',
= forever lit 'while true',
= cr lit '13',
= lf lit '10',
= tab lit '9',
= ctrlc lit '3',
= ff lit '12',
= page$len$offset lit '1ch',
= nopage$mode$offset lit '2Ch',
= sectorlen lit '128';
/* function call 32 in 2.0 or later BDOS, returns the address of the disk
parameter block for the currently selected disk, which consists of:
spt (2 bytes) number of sectors per track
blkshf (1 byte) block size = shl(double(128),blkshf)
blkmsk (1 byte) sector# and blkmsk = block number
extmsk (1 byte) logical/physical extents
blkmax (2 bytes) max alloc number
dirmax (2 bytes) size of directory-1
dirblk (2 bytes) reservation bits for directory
chksiz (2 bytes) size of checksum vector
offset (2 bytes) offset for operating system
*/
$include(dpb.lit)
=
= /* indices into disk parameter block, used as parameters to dpb procedure */
=
3 1 = dcl spt$w lit '0',
= blkshf$b lit '2',
= blkmsk$b lit '3',
= extmsk$b lit '4',
= blkmax$w lit '5',
= dirmax$w lit '7',
= dirblk$w lit '9',
= chksiz lit '11',
= offset$w lit '13';
PL/M-86 COMPILER SDIR 8086 - GET DISK PARAMETERS PAGE 2
=
4 1 declare k$per$block byte public;
5 1 declare dpb$base pointer;
6 1 declare dpb$array based dpb$base (15) byte;
7 1 mon4: procedure (f,a) pointer external;
8 2 dcl f byte, a address;
9 2 end mon4;
10 1 dcl get$dpb lit '31';
11 1 dpb$byte: procedure(param) byte public;
12 2 dcl param byte;
13 2 return(dpb$array(param));
14 2 end dpb$byte;
15 1 dpb$word: procedure(param) address public;
16 2 dcl param byte;
17 2 return(dpb$array(param) + shl(double(dpb$array(param+1)),8));
18 2 end dpb$word;
19 1 base$dpb: procedure public;
20 2 dpb$base = mon4(get$dpb,0);
21 2 k$per$block = shr(dpb$byte(blkmsk$b)+1 ,3);
22 2 end base$dpb;
23 1 end dpb86;
PL/M-86 COMPILER SDIR 8086 - GET DISK PARAMETERS PAGE 3
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
7 0000H 2 A. . . . . . . . . WORD PARAMETER 8
19 003AH 38 BASEDPB. . . . . . PROCEDURE PUBLIC STACK=0008H
3 BLKMAXW. . . . . . LITERALLY
3 BLKMSKB. . . . . . LITERALLY 21
3 BLKSHFB. . . . . . LITERALLY
2 BOOLEAN. . . . . . LITERALLY
3 CHKSIZ . . . . . . LITERALLY
2 CR . . . . . . . . LITERALLY
2 CTRLC. . . . . . . LITERALLY
2 DCL. . . . . . . . LITERALLY
3 DIRBLKW. . . . . . LITERALLY
3 DIRMAXW. . . . . . LITERALLY
DOUBLE . . . . . . BUILTIN 17
1 0002H DPB86. . . . . . . PROCEDURE STACK=0000H
6 0000H 15 DPBARRAY . . . . . BYTE BASED(DPBBASE) ARRAY(15) 13 17
5 0000H 4 DPBBASE. . . . . . POINTER 6 13 17 20
11 0002H 21 DPBBYTE. . . . . . PROCEDURE BYTE PUBLIC STACK=0004H 21
15 0017H 35 DPBWORD. . . . . . PROCEDURE WORD PUBLIC STACK=0004H
3 EXTMSKB. . . . . . LITERALLY
7 0000H 1 F. . . . . . . . . BYTE PARAMETER 8
2 FALSE. . . . . . . LITERALLY
2 FF . . . . . . . . LITERALLY
2 FOREVER. . . . . . LITERALLY
10 GETDPB . . . . . . LITERALLY 20
4 0004H 1 KPERBLOCK. . . . . BYTE PUBLIC 21
2 LF . . . . . . . . LITERALLY
2 LIT. . . . . . . . LITERALLY 2 3 10
7 0000H MON4 . . . . . . . PROCEDURE POINTER EXTERNAL(0) STACK=0000H 20
2 NOPAGEMODEOFFSET . LITERALLY
3 OFFSETW. . . . . . LITERALLY
2 PAGELENOFFSET. . . LITERALLY
15 0004H 1 PARAM. . . . . . . BYTE PARAMETER AUTOMATIC 16 17
11 0004H 1 PARAM. . . . . . . BYTE PARAMETER AUTOMATIC 12 13
2 SECTORLEN. . . . . LITERALLY
SHL. . . . . . . . BUILTIN 17
SHR. . . . . . . . BUILTIN 21
3 SPTW . . . . . . . LITERALLY
2 TAB. . . . . . . . LITERALLY
2 TRUE . . . . . . . LITERALLY
MODULE INFORMATION:
CODE AREA SIZE = 0060H 96D
CONSTANT AREA SIZE = 0000H 0D
VARIABLE AREA SIZE = 0005H 5D
MAXIMUM STACK SIZE = 0008H 8D
79 LINES READ
PL/M-86 COMPILER SDIR 8086 - GET DISK PARAMETERS PAGE 4
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION