mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-25 17:34:06 +00:00
316 lines
16 KiB
Plaintext
316 lines
16 KiB
Plaintext
PL/M-86 COMPILER SDIR - UTILITY ROUTINES PAGE 1
|
||
|
||
|
||
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE UTILITY
|
||
OBJECT MODULE PLACED IN UTIL
|
||
COMPILER INVOKED BY: :F0: UTIL.PLM DEBUG OBJECT(UTIL) OPTIMIZE(3) XREF
|
||
|
||
|
||
|
||
$title('SDIR - Utility Routines')
|
||
1 utility:
|
||
do;
|
||
|
||
/* Utility Module for SDIR */
|
||
|
||
$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';
|
||
|
||
|
||
/* -------- arithmetic functions -------- */
|
||
|
||
3 1 add3byte: procedure(byte3adr,num) public;
|
||
4 2 dcl (byte3adr,num) address,
|
||
b3 based byte3adr structure (
|
||
lword address,
|
||
hbyte byte),
|
||
temp address;
|
||
|
||
5 2 temp = b3.lword;
|
||
6 2 if (b3.lword := b3.lword + num) < temp then /* overflow */
|
||
7 2 b3.hbyte = b3.hbyte + 1;
|
||
8 2 end add3byte;
|
||
|
||
/* add three byte number to 3 byte value structure */
|
||
9 1 add3byte3: procedure(totalb,numb) public;
|
||
10 2 dcl (totalb,numb) address,
|
||
num based numb structure (
|
||
lword address,
|
||
hbyte byte),
|
||
total based totalb structure (
|
||
lword address,
|
||
hbyte byte);
|
||
|
||
11 2 call add3byte(totalb,num.lword);
|
||
12 2 total.hbyte = num.hbyte + total.hbyte;
|
||
PL/M-86 COMPILER SDIR - UTILITY ROUTINES PAGE 2
|
||
|
||
|
||
13 2 end add3byte3;
|
||
|
||
/* divide 3 byte value by 8 */
|
||
14 1 shr3byte: procedure(byte3adr) public;
|
||
15 2 dcl byte3adr address,
|
||
b3 based byte3adr structure (
|
||
lword address,
|
||
hbyte byte),
|
||
temp1 based byte3adr (2) byte,
|
||
temp2 byte;
|
||
|
||
16 2 temp2 = ror(b3.hbyte,3) and 11100000b; /* get 3 bits */
|
||
17 2 b3.hbyte = shr(b3.hbyte,3);
|
||
18 2 b3.lword = shr(b3.lword,3);
|
||
19 2 temp1(1) = temp1(1) or temp2; /* or in 3 bits from hbyte */
|
||
20 2 end shr3byte;
|
||
|
||
|
||
/* ------- print routines -------- */
|
||
|
||
21 1 mon1: procedure(f,a) external;
|
||
22 2 declare f byte, a address;
|
||
23 2 end mon1;
|
||
|
||
/*break: procedure external;
|
||
end break;*/
|
||
|
||
$include(fcb.lit)
|
||
=
|
||
24 1 = declare
|
||
= f$drvusr lit '0', /* drive/user byte */
|
||
= f$name lit '1', /* file name */
|
||
= f$namelen lit '8', /* file name length */
|
||
= f$type lit '9', /* file type field */
|
||
= f$typelen lit '3', /* type length */
|
||
= f$rw lit '9', /* high bit is R/W attribute */
|
||
= f$dirsys lit '10', /* high bit is dir/sys attribute */
|
||
= f$arc lit '11', /* high bit is archive attribute */
|
||
= f$ex lit '12', /* extent */
|
||
= f$s1 lit '13', /* module byte */
|
||
= f$rc lit '15', /* record count */
|
||
= f$diskmap lit '16', /* file disk map */
|
||
= diskmaplen lit '16', /* disk map length */
|
||
= f$drvusr2 lit '16', /* fcb2 */
|
||
= f$name2 lit '17',
|
||
= f$type2 lit '25',
|
||
= f$cr lit '32', /* current record */
|
||
= f$rrec lit '33', /* random record */
|
||
= f$rreco lit '35'; /* " " overflow */
|
||
=
|
||
|
||
/* BDOS calls */
|
||
|
||
25 1 print$char: procedure(char) public;
|
||
26 2 declare char byte;
|
||
27 2 call mon1(2,char);
|
||
28 2 end print$char;
|
||
PL/M-86 COMPILER SDIR - UTILITY ROUTINES PAGE 3
|
||
|
||
|
||
|
||
29 1 print: procedure(string$adr) public;
|
||
30 2 dcl string$adr address;
|
||
31 2 call mon1(9,string$adr);
|
||
32 2 end print;
|
||
|
||
33 1 printb: procedure public;
|
||
34 2 call print$char(' ');
|
||
35 2 end printb;
|
||
|
||
36 1 crlf: procedure public;
|
||
37 2 call print$char(cr);
|
||
38 2 call print$char(lf);
|
||
39 2 end crlf;
|
||
|
||
40 1 printfn: procedure(fname$adr) public;
|
||
41 2 dcl fname$adr address,
|
||
file$name based fname$adr (1) byte,
|
||
i byte; /* <filename> ' ' <filetype> */
|
||
|
||
42 2 do i = 0 to f$namelen - 1;
|
||
43 3 call printchar(file$name(i) and 7fh);
|
||
44 3 end;
|
||
45 2 call printchar(' ');
|
||
46 2 do i = f$namelen to f$namelen + f$typelen - 1;
|
||
47 3 call printchar(file$name(i) and 7fh);
|
||
48 3 end;
|
||
49 2 end printfn;
|
||
|
||
50 1 pdecimal: procedure(v,prec,zerosup) public;
|
||
/* print value v, field size = (log10 prec) + 1 */
|
||
/* with leading zero suppression if zerosup = true */
|
||
51 2 declare v address, /* value to print */
|
||
prec address, /* precision */
|
||
zerosup boolean, /* zero suppression flag */
|
||
d byte; /* current decimal digit */
|
||
|
||
52 2 do while prec <> 0;
|
||
53 3 d = v / prec; /* get next digit */
|
||
54 3 v = v mod prec; /* get remainder back to v */
|
||
55 3 prec = prec / 10; /* ready for next digit */
|
||
56 3 if prec <> 0 and zerosup and d = 0 then
|
||
57 3 call printb;
|
||
else
|
||
58 3 do;
|
||
59 4 zerosup = false;
|
||
60 4 call printchar('0'+d);
|
||
61 4 end;
|
||
62 3 end;
|
||
63 2 end pdecimal;
|
||
|
||
64 1 p3byte: procedure(byte3adr,prec) public;
|
||
/* print 3 byte value with 0 suppression */
|
||
65 2 dcl byte3adr address, /* assume high order bit is < 10 */
|
||
prec address,
|
||
b3 based byte3adr structure (
|
||
lword address,
|
||
PL/M-86 COMPILER SDIR - UTILITY ROUTINES PAGE 4
|
||
|
||
|
||
hbyte byte),
|
||
i byte;
|
||
|
||
/* prec = 1 for 6 chars, 2 for 7 */
|
||
66 2 if b3.hbyte <> 0 then
|
||
67 2 do;
|
||
68 3 call pdecimal(b3.hbyte,prec,true); /* 3 for 8 chars printed */
|
||
69 3 call pdecimal(b3.lword,10000,false);
|
||
70 3 end;
|
||
else
|
||
71 2 do;
|
||
72 3 i = 1;
|
||
73 3 do while i <= prec;
|
||
74 4 call printb;
|
||
75 4 i = i * 10;
|
||
76 4 end;
|
||
77 3 call pdecimal(b3.lword,10000,true);
|
||
78 3 end;
|
||
79 2 end p3byte;
|
||
|
||
80 1 end utility;
|
||
PL/M-86 COMPILER SDIR - UTILITY ROUTINES PAGE 5
|
||
|
||
|
||
CROSS-REFERENCE LISTING
|
||
-----------------------
|
||
|
||
|
||
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
|
||
----- ------ ----- --------------------------------
|
||
|
||
|
||
21 0000H 2 A. . . . . . . . . WORD PARAMETER 22
|
||
3 0000H 29 ADD3BYTE . . . . . PROCEDURE PUBLIC STACK=0006H 11
|
||
9 001DH 30 ADD3BYTE3. . . . . PROCEDURE PUBLIC STACK=000EH
|
||
4 0000H 3 B3 . . . . . . . . STRUCTURE BASED(BYTE3ADR) 5 6 7
|
||
15 0000H 3 B3 . . . . . . . . STRUCTURE BASED(BYTE3ADR) 16 17 18
|
||
65 0000H 3 B3 . . . . . . . . STRUCTURE BASED(BYTE3ADR) 66 68 69 77
|
||
2 BOOLEAN. . . . . . LITERALLY 51
|
||
3 0006H 2 BYTE3ADR . . . . . WORD PARAMETER AUTOMATIC 4 5 6 7
|
||
64 0006H 2 BYTE3ADR . . . . . WORD PARAMETER AUTOMATIC 65 66 68 69 77
|
||
14 0004H 2 BYTE3ADR . . . . . WORD PARAMETER AUTOMATIC 15 16 17 18 19
|
||
25 0004H 1 CHAR . . . . . . . BYTE PARAMETER AUTOMATIC 26 27
|
||
2 CR . . . . . . . . LITERALLY 37
|
||
36 0087H 17 CRLF . . . . . . . PROCEDURE PUBLIC STACK=000EH
|
||
2 CTRLC. . . . . . . LITERALLY
|
||
51 0004H 1 D. . . . . . . . . BYTE 53 56 60
|
||
2 DCL. . . . . . . . LITERALLY
|
||
24 DISKMAPLEN . . . . LITERALLY
|
||
21 0000H 1 F. . . . . . . . . BYTE PARAMETER 22
|
||
2 FALSE. . . . . . . LITERALLY 59 69
|
||
24 FARC . . . . . . . LITERALLY
|
||
24 FCR. . . . . . . . LITERALLY
|
||
24 FDIRSYS. . . . . . LITERALLY
|
||
24 FDISKMAP . . . . . LITERALLY
|
||
24 FDRVUSR. . . . . . LITERALLY
|
||
24 FDRVUSR2 . . . . . LITERALLY
|
||
24 FEX. . . . . . . . LITERALLY
|
||
2 FF . . . . . . . . LITERALLY
|
||
41 0000H 1 FILENAME . . . . . BYTE BASED(FNAMEADR) ARRAY(1) 43 47
|
||
24 FNAME. . . . . . . LITERALLY
|
||
24 FNAME2 . . . . . . LITERALLY
|
||
40 0004H 2 FNAMEADR . . . . . WORD PARAMETER AUTOMATIC 41 43 47
|
||
24 FNAMELEN . . . . . LITERALLY 42 46
|
||
2 FOREVER. . . . . . LITERALLY
|
||
24 FRC. . . . . . . . LITERALLY
|
||
24 FRREC. . . . . . . LITERALLY
|
||
24 FRRECO . . . . . . LITERALLY
|
||
24 FRW. . . . . . . . LITERALLY
|
||
24 FS1. . . . . . . . LITERALLY
|
||
24 FTYPE. . . . . . . LITERALLY
|
||
24 FTYPE2 . . . . . . LITERALLY
|
||
24 FTYPELEN . . . . . LITERALLY 46
|
||
65 0002H 1 HBYTE. . . . . . . BYTE MEMBER(B3) 66 68
|
||
15 0002H 1 HBYTE. . . . . . . BYTE MEMBER(B3) 16 17
|
||
10 0002H 1 HBYTE. . . . . . . BYTE MEMBER(TOTAL) 12
|
||
10 0002H 1 HBYTE. . . . . . . BYTE MEMBER(NUM) 12
|
||
4 0002H 1 HBYTE. . . . . . . BYTE MEMBER(B3) 7
|
||
65 0005H 1 I. . . . . . . . . BYTE 72 73 75
|
||
41 0003H 1 I. . . . . . . . . BYTE 42 43 46 47
|
||
2 LF . . . . . . . . LITERALLY 38
|
||
PL/M-86 COMPILER SDIR - UTILITY ROUTINES PAGE 6
|
||
|
||
|
||
2 LIT. . . . . . . . LITERALLY 2 24
|
||
15 0000H 2 LWORD. . . . . . . WORD MEMBER(B3) 18
|
||
10 0000H 2 LWORD. . . . . . . WORD MEMBER(TOTAL)
|
||
10 0000H 2 LWORD. . . . . . . WORD MEMBER(NUM) 11
|
||
4 0000H 2 LWORD. . . . . . . WORD MEMBER(B3) 5 6
|
||
65 0000H 2 LWORD. . . . . . . WORD MEMBER(B3) 69 77
|
||
21 0000H MON1 . . . . . . . PROCEDURE EXTERNAL(0) STACK=0000H 27 31
|
||
2 NOPAGEMODEOFFSET . LITERALLY
|
||
10 0000H 3 NUM. . . . . . . . STRUCTURE BASED(NUMB) 11 12
|
||
3 0004H 2 NUM. . . . . . . . WORD PARAMETER AUTOMATIC 4 6
|
||
9 0004H 2 NUMB . . . . . . . WORD PARAMETER AUTOMATIC 10 11 12
|
||
64 0143H 89 P3BYTE . . . . . . PROCEDURE PUBLIC STACK=0020H
|
||
2 PAGELENOFFSET. . . LITERALLY
|
||
50 00EDH 86 PDECIMAL . . . . . PROCEDURE PUBLIC STACK=0018H 68 69 77
|
||
64 0004H 2 PREC . . . . . . . WORD PARAMETER AUTOMATIC 65 68 73
|
||
50 0006H 2 PREC . . . . . . . WORD PARAMETER AUTOMATIC 51 52 53 54 55 56
|
||
29 006CH 16 PRINT. . . . . . . PROCEDURE PUBLIC STACK=000AH
|
||
33 007CH 11 PRINTB . . . . . . PROCEDURE PUBLIC STACK=000EH 57 74
|
||
25 0059H 19 PRINTCHAR. . . . . PROCEDURE PUBLIC STACK=000AH 34 37 38 43 45 47 60
|
||
40 0098H 85 PRINTFN. . . . . . PROCEDURE PUBLIC STACK=0010H
|
||
ROR. . . . . . . . BUILTIN 16
|
||
2 SECTORLEN. . . . . LITERALLY
|
||
SHR. . . . . . . . BUILTIN 17 18
|
||
14 003BH 30 SHR3BYTE . . . . . PROCEDURE PUBLIC STACK=0004H
|
||
29 0004H 2 STRINGADR. . . . . WORD PARAMETER AUTOMATIC 30 31
|
||
2 TAB. . . . . . . . LITERALLY
|
||
4 0000H 2 TEMP . . . . . . . WORD 5 6
|
||
15 0000H 2 TEMP1. . . . . . . BYTE BASED(BYTE3ADR) ARRAY(2) 19
|
||
15 0002H 1 TEMP2. . . . . . . BYTE 16 19
|
||
10 0000H 3 TOTAL. . . . . . . STRUCTURE BASED(TOTALB) 12
|
||
9 0006H 2 TOTALB . . . . . . WORD PARAMETER AUTOMATIC 10 11 12
|
||
2 TRUE . . . . . . . LITERALLY 68 77
|
||
1 0000H UTILITY. . . . . . PROCEDURE STACK=0000H
|
||
50 0008H 2 V. . . . . . . . . WORD PARAMETER AUTOMATIC 51 53 54
|
||
50 0004H 1 ZEROSUP. . . . . . BYTE PARAMETER AUTOMATIC 51 56 59
|
||
|
||
|
||
|
||
MODULE INFORMATION:
|
||
|
||
CODE AREA SIZE = 019CH 412D
|
||
CONSTANT AREA SIZE = 0000H 0D
|
||
VARIABLE AREA SIZE = 0006H 6D
|
||
MAXIMUM STACK SIZE = 0020H 32D
|
||
186 LINES READ
|
||
0 PROGRAM ERROR(S)
|
||
|
||
END OF PL/M-86 COMPILATION
|