Digital Research
This commit is contained in:
2020-11-06 18:50:37 +01:00
parent 621ed8ccaf
commit 31738079c4
8481 changed files with 1888323 additions and 0 deletions

View File

@@ -0,0 +1,32 @@
Concurrent CP/M-86 version 2.0 Source Listings Account
July 5, 1983 Bill Fitler
This account contains the source for CCPM-86 version 2.0. All of the
utilities and RSPs have their own directories. Other directories include:
KERN.DIR - containing SUP, RTM, MEM, CIO and SYSDAT.
BDOS.DIR - just the BDOS...
XIOS.DIR - just the XIOS...
LOADER.DIR - BOOT, LBDOS, LOAD, TCOPY
In addition, there are the following files and directories:
COMMON.DIR - a directory containing common literal and equates.
COMMANDS.DIR - account-wide command files, plus Tables of Contents.
PATCHES.DOC - all CCPM-86 patches are documented in this document.
These directories are NOT available for distribution outside of DRI:
VAXTOOLS.DIR - PLM86 compilers, etc. used in compiling the modules.
SERIALIZ.DIR - serialization utilities
What's missing?
- PATCHES.DOC has not been updated for a while.
- Some of the 0READ.ME files contain working status, which can be
ignored.
- Documentation TEX files are not included.
- Some of the kernel listings have been removed.
- GENCCPM needs the C86 compiler, which is not included.
- This is NOT a working account, which means that not all of the
compile pathnames have been tested (it was transferred from another
account). Caveat programmor.

View File

@@ -0,0 +1,2 @@
ABORT status: rsp, ready for QA (worked on MPM) 10/28/82

View File

@@ -0,0 +1,14 @@
$!
$! Assemble, compile, link, locate, and generate hex
$! for ABORT.RSP to run in
$! Concurrent CP/M-86, vers 2.0
$!
$ ccpmsetup
$
$ asm86 rhabt.a86 !Rsp Header ABorT
$ plm86 rabt.plm 'p1' 'p2' 'p3' xref optimize(3) debug !Rsp ABorT
$ link86 rhabt.obj, rabt.obj to rabt.lnk
$ loc86 rabt.lnk od(sm(code,dats,data,stack,const))-
ad(sm(code(0), dats(10000h))) ss(stack(0)) to rabt.
$ h86 rabt
$!

View File

@@ -0,0 +1,70 @@
:020000021000EC
:1000000000000000000000000000000000000000F0
:020000021001EB
:100000000000000000BE030041424F525420202057
:080010000400000000000000E4
:020000021004E8
:1000000000000000000000000000000000000000F0
:1000100000000000000000000000000000000000E0
:1000200000000000000000000000000000000000D0
:06003000000000003A018F
:02000002100AE2
:100000000100CCCCCCCCCCCCCCCCCCCCCCCCCCCCC7
:10001000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC20
:10002000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC10
:10003000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC00
:10004000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCF0
:10005000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE0
:10006000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD0
:10007000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC0
:10008000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCB0
:10009000CCCCCCCCCCCCCCCCCCCC720000000000F6
:020000020000FC
:10000000434F5059524947485420284329203139F9
:1000100038322C204449474954414C2052455345DD
:100020004152434820558BEC8B56048B4E06CDE055
:040030005DC20400A9
:020000020003F9
:020004000010EA
:020000021014D8
:10000600000000000100090241424F525420202006
:020000021015D7
:10000600000000000A0041424F5254202020830085
:0C00160001000000000000000000860156
:020000021017D5
:040002000B028C025F
:020000021017D5
:0E0006000000FF0000002020202020202020ED
:02000002102AC2
:10000E000D0A496C6C6567616C20436F6E736F6C83
:0E001E00652C2055736520302D32353320249B
:02000002102CC0
:10000C000D0A41626F7274204661696C65642E241E
:020000020003F9
:10000600558BECA14001B9050003C1A3400103C112
:10001600A3400103C1A3400103C1A3400103C1A33F
:10002600400103C1A3400103C1A3400103C1A34092
:0C0036000103C1A34001010E40015DC3A5
:020000020007F5
:10000200558BECB08650B8560150E8A6FFB0875029
:10001200B8460150E89CFFA10000A34401B09150F2
:10002200B8C80050E88CFFB08950B8460150E88249
:10003200FFA10902A34201B09450C41E4201268AC4
:100042004720B40050E86BFFC41E4201268A4720B5
:10005200A27A01B09850B8720150E856FFA372011B
:10006200B90800BE8D02BF7C011E07FCF2A4833ECC
:100072007201007503E98C00B09850B8720150E823
:1000820031FFA37201C606AC0201C706840100005B
:100092008A1EAC02B70080BF8C0220B0FF750140FF
:1000A2005080FB04B0FF7201405922C1D0D8732E98
:1000B2008A878C022C3088878C023C097719A184AC
:1000C20001B90A00F7E18A8F8C02B50003C1A3844B
:1000D20001FE06AC02EBB9C606AC02FFEBB2813EF2
:1000E2008401FD007707803EAC02FF7511B0095014
:1000F200B8AE0250E8BCFEC6067A01FFEB06A18448
:1001020001A27A01803E7A01FF7418B09D50B87640
:100112000150E89EFE3CFF750AB00950B8CC02506F
:10012200E890FEB09250B8000050E886FEB09350BE
:10013200B8000050E87CFEC70672010B02E9E7FE38
:020142005DC39B
:00000001FF

View File

@@ -0,0 +1,543 @@
PL/M-86 COMPILER CCP/M-86 1.0, ABORT A PROGRAM - RSP PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE ABORT
OBJECT MODULE PLACED IN RABT.OBJ
COMPILER INVOKED BY: :F0: RABT.PLM XREF OPTIMIZE(3) DEBUG
$ title ('CCP/M-86 1.0, Abort a Program - RSP')
$ compact
1 abort:
do;
/* Modified 3/15/83 to force an ATTACH console call */
$include (:f2:copyrt.lit)
=
= /*
= Copyright (C) 1983
= Digital Research
= P.O. Box 579
= Pacific Grove, CA 93950
= */
=
$include (:f2:comlit.lit)
=
2 1 = declare
= lit literally 'literally',
= dcl lit 'declare',
= true lit '0ffh',
= false lit '0',
= no lit 'not',
= 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';
$include (:f2:mfunc.lit)
=
= /* Concurrent CP/M function numbers */
=
3 1 = dcl m$prtbuf lit '9',
= m$select lit '14',
= m$openf lit '15',
= m$closef lit '16',
= m$deletef lit '19',
= m$readf lit '20',
= m$writef lit '21',
= m$makef lit '22',
= m$getlogin lit '24',
= m$curdsk lit '25',
= m$setdma lit '26',
= m$setatt lit '30',
= m$setusr lit '32',
PL/M-86 COMPILER CCP/M-86 1.0, ABORT A PROGRAM - RSP PAGE 2
= m$readrf lit '33',
= m$writerf lit '34',
= m$resetdrv lit '37',
= m$errmode lit '45',
= m$dirbios lit '50',
= m$makeq lit '134',
= m$openq lit '135',
= m$deleteq lit '136',
= m$readq lit '137',
= m$creadq lit '138',
= m$writeq lit '139',
= m$cwriteq lit '140',
= m$delay lit '141',
= m$dispatch lit '142',
= m$setprior lit '145',
= m$attach lit '146',
= m$detach lit '147',
= m$setcns lit '148',
= m$parse lit '152',
= m$getcns lit '153',
= m$sysdat lit '154',
= m$getpd lit '156',
= m$abort lit '157';
=
= /* Internal calls */
=
4 1 = dcl mi$sleep lit '0212H',
= mi$wakeup lit '0213H';
=
/**** Vax commands for generation:
$ ccpmsetup !Set up environment
$ asm86 rhabt.a86 !Rsp Header ABorT
$ plm86 rabt.plm 'p1' 'p2' 'p3' 'p4' optimize(3) debug !Rsp ABorT
$ link86 rhabt.obj, rabt.obj to rabt.lnk
$ loc86 rabt.lnk od(sm(code,dats,data,stack,const))-
ad(sm(code(0), dats(10000h))) ss(stack(0)) to rabt.
$ h86 rabt
**** Then, on a micro:
A>vax rabt.h86 $fans
A>gencmd rabt data[b1000]
A>ren abort.rsp=rabt.cmd
**** Notes:
The stack is declared in the assemble module, RSPABT.A86.
The const(ants) come last to force hex generation.
****/
5 1 mon1:
procedure (func,info) external;
6 2 declare func byte;
7 2 declare info address;
8 2 end mon1;
PL/M-86 COMPILER CCP/M-86 1.0, ABORT A PROGRAM - RSP PAGE 3
9 1 mon2:
procedure (func,info) byte external;
10 2 declare func byte;
11 2 declare info address;
12 2 end mon2;
13 1 mon3:
procedure (f,a) address external;
14 2 dcl f byte, a address;
15 2 end mon3;
16 1 patch: procedure public; /* dummy area for patching code segments */
17 2 declare i address;
/* first statement is 9 bytes, rest are 5 bytes */
18 2 i=i+5; i=i+5; i=i+5; i=i+5; i=i+5;
23 2 i=i+5; i=i+5; i=i+5; i=i+5; i=i+5; /* about 54 bytes */
28 2 end patch;
$include (:f2:proces.lit)
=
= /*
= Proces Literals MP/M-8086 II
= */
=
29 1 = declare pnamsiz literally '8';
=
30 1 = declare pd$hdr literally 'structure
= (link word,thread word,stat byte,prior byte,flag word,
= name (8) byte,uda word,dsk byte,user byte,ldsk byte,luser byte,
= mem word';
=
31 1 = declare pd$structure literally 'pd$hdr,
= dvract word,wait word,org byte,net byte,parent word,
= cns byte,abort byte,conmode word,lst byte,sf3 byte,sf4 byte,sf5 byte,
= reservd (4) byte,pret word,scratch word)';
=
32 1 = declare psrun lit '00',
= pspoll lit '01',
= psdelay lit '02',
= psswap lit '03',
= psterm lit '04',
= pssleep lit '05',
= psdq lit '06',
= psnq lit '07',
= psflagwait lit '08',
= psciowait lit '09';
=
33 1 = declare pf$sys lit '00001h',
= pf$keep lit '00002h',
= pf$kernal lit '00004h',
= pf$pure lit '00008h',
= pf$table lit '00010h',
= pf$resource lit '00020h',
= pf$raw lit '00040h',
= pf$ctlc lit '00080h',
= pf$active lit '00100h',
= pf$tempkeep lit '00200h',
PL/M-86 COMPILER CCP/M-86 1.0, ABORT A PROGRAM - RSP PAGE 4
= pf$ctld lit '00400h',
= pf$childabort lit '00800h',
= pf$noctls lit '01000h';
=
34 1 = declare pcm$11 lit '00001h',
= pcm$ctls lit '00002h',
= pcm$rout lit '00004h',
= pcm$ctlc lit '00008h',
= pcm$ctlo lit '00080h',
= pcm$rsx lit '00300h';
35 1 dcl pd$pointer pointer;
36 1 dcl pd$ptr structure (offset word, segment word) at(@pd$pointer);
37 1 dcl pd based pd$pointer pd$structure;
38 1 dcl rsplink word external;
$include (:f2:qd.lit)
=
= /* Queue Descriptor */
=
39 1 = dcl qnamsiz lit '8';
=
40 1 = dcl qd$structure lit 'structure(
= link word,
= net byte,
= org byte,
= flags word,
= name(qnamsiz) byte,
= msglen word,
= nmsgs word,
= dq word,
= nq word,
= msgcnt word,
= msgout word,
= buffer word)';
=
= /* queue flag values */
=
41 1 = dcl qf$mx lit '001h'; /* Mutual Exclusion */
42 1 = dcl qf$keep lit '002h'; /* NO DELETE */
43 1 = dcl qf$hide lit '004h'; /* Not User writable */
44 1 = dcl qf$rsp lit '008h'; /* rsp queue */
45 1 = dcl qf$table lit '010h'; /* from qd table */
46 1 = dcl qf$rpl lit '020h'; /* rpl queue */
47 1 = dcl qf$dev lit '040h'; /* device queue */
=
= /* Queue Parameter Block */
=
48 1 = dcl qpb$structure lit 'structure(
= flgs byte,
= net byte,
= qaddr word,
= nmsgs word,
= buffptr word,
= name (qnamsiz) byte )';
=
PL/M-86 COMPILER CCP/M-86 1.0, ABORT A PROGRAM - RSP PAGE 5
49 1 dcl abt$qd$buf (131) byte;
50 1 dcl abt$cmd structure(
pd address, tail (129) byte);
51 1 dcl abt$qpb qpb$structure initial(0,0,0,1,.abt$cmd,'ABORT ');
52 1 dcl abt$qd qd$structure initial (
0,0,0,qf$keep + qf$rsp,'ABORT ',131,1,0,0,0,0,.abt$qd$buf);
53 1 dcl fcb (32) byte;
54 1 dcl pfcb structure (
filename address,
fcbadr address) initial (.abt$cmd.tail, .fcb);
55 1 declare abort$pb structure (
pd address,
term address,
cns byte,
net byte,
pname (8) byte) initial (
0,00ffh,0,0,' ');
56 1 dcl i byte;
57 1 dcl console word;
58 1 dcl mpm$86 lit '1130h';
/*
Main Program
*/
59 1 plm$start:
procedure public;
60 2 call mon1(m$makeq,.abt$qd); /* make ABORT queue */
61 2 call mon1(m$openq,.abt$qpb); /* open it */
62 2 pd$ptr.segment = rsplink;
63 2 call mon1(m$setprior,200); /* back to the same as transients */
64 2 do while true;
65 3 call mon1(m$readq,.abt$qpb);
66 3 pd$ptr.offset = abt$cmd.pd; /* set console to same */
67 3 call mon1(m$setcns, pd.cns); /* of who typed ABORT */
68 3 abort$pb.cns = pd.cns;
69 3 pfcb.filename = mon3(m$parse, .pfcb);
/* get name of program to abort */
70 3 call move (8,.fcb(1),.abort$pb.pname);
/* fcb(9)='$'; DEBUG
call mon1(m$prtbuf, .fcb(1)); */
71 3 if pfcb.filename <> 0 then /* console number specified */
72 3 do;
73 4 pfcb.filename = mon3(m$parse, .pfcb);
74 4 i = 1; console = 0;
76 4 do while fcb(i) <> ' ' and i < 4;
77 5 if (fcb(i) := fcb(i) - '0') <= 9 then
78 5 do;
79 6 console = fcb(i) + 10 * console;
80 6 i = i + 1;
81 6 end;
PL/M-86 COMPILER CCP/M-86 1.0, ABORT A PROGRAM - RSP PAGE 6
else
82 5 i = 255; /* non - numeric */
83 5 end;
84 4 if console > 253 or i = 255 then
85 4 do;
86 5 call mon1(m$prtbuf, .(cr,lf, 'Illegal Console, Use 0-253 $'));
87 5 abort$pb.cns = 0ffh;
88 5 end;
else
89 4 abort$pb.cns = low(console);
90 4 end;
91 3 if abort$pb.cns <> 0ffh then
92 3 if mon2(m$abort, .abort$pb) = 0ffh then
93 3 do;
94 4 call mon1(m$prtbuf, .(cr,lf, 'Abort Failed.','$'));
95 4 end;
/* abort first PD found with same name and console */
/* consistent with MP/M-80 II but not MP/M 1.x */
96 3 call mon1(m$attach,0); /* make sure we own the console before */
97 3 call mon1(m$detach, 0); /* calling detach */
98 3 pfcb.filename = .abt$cmd.tail;
99 3 end;
100 2 end plmstart;
101 1 end abort;
PL/M-86 COMPILER CCP/M-86 1.0, ABORT A PROGRAM - RSP PAGE 7
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
13 0000H 2 A. . . . . . . . . WORD PARAMETER 14
1 0002H ABORT. . . . . . . PROCEDURE STACK=0000H
37 0021H 1 ABORT. . . . . . . BYTE MEMBER(PD)
55 0036H 14 ABORTPB. . . . . . STRUCTURE INITIAL 68 70 87 89 91 92
50 00C9H 131 ABTCMD . . . . . . STRUCTURE 51 54 66 98
52 0016H 28 ABTQD. . . . . . . STRUCTURE INITIAL 60
49 0046H 131 ABTQDBUF . . . . . BYTE ARRAY(131) 52
51 0006H 16 ABTQPB . . . . . . STRUCTURE INITIAL 61 65
2 BOOLEAN. . . . . . LITERALLY
52 001AH 2 BUFFER . . . . . . WORD MEMBER(ABTQD)
51 0006H 2 BUFFPTR. . . . . . WORD MEMBER(ABTQPB)
55 0004H 1 CNS. . . . . . . . BYTE MEMBER(ABORTPB) 68 87 89 91
37 0020H 1 CNS. . . . . . . . BYTE MEMBER(PD) 67 68
37 0022H 2 CONMODE. . . . . . WORD MEMBER(PD)
57 0044H 2 CONSOLE. . . . . . WORD 75 79 84 89
2 CR . . . . . . . . LITERALLY 86 94
2 CTRLC. . . . . . . LITERALLY
2 DCL. . . . . . . . LITERALLY
52 0012H 2 DQ . . . . . . . . WORD MEMBER(ABTQD)
37 0012H 1 DSK. . . . . . . . BYTE MEMBER(PD)
37 0018H 2 DVRACT . . . . . . WORD MEMBER(PD)
13 0000H 1 F. . . . . . . . . BYTE PARAMETER 14
2 FALSE. . . . . . . LITERALLY
53 014CH 32 FCB. . . . . . . . BYTE ARRAY(32) 54 70 76 77 79
54 0002H 2 FCBADR . . . . . . WORD MEMBER(PFCB)
2 FF . . . . . . . . LITERALLY
54 0000H 2 FILENAME . . . . . WORD MEMBER(PFCB) 69 71 73 98
37 0006H 2 FLAG . . . . . . . WORD MEMBER(PD)
52 0004H 2 FLAGS. . . . . . . WORD MEMBER(ABTQD)
51 0000H 1 FLGS . . . . . . . BYTE MEMBER(ABTQPB)
2 FOREVER. . . . . . LITERALLY
5 0000H 1 FUNC . . . . . . . BYTE PARAMETER 6
9 0000H 1 FUNC . . . . . . . BYTE PARAMETER 10
17 0000H 2 I. . . . . . . . . WORD 18 19 20 21 22 23 24 25 26 27
56 016CH 1 I. . . . . . . . . BYTE 74 76 77 79 80 82 84
9 0000H 2 INFO . . . . . . . WORD PARAMETER 11
5 0000H 2 INFO . . . . . . . WORD PARAMETER 7
37 0014H 1 LDSK . . . . . . . BYTE MEMBER(PD)
2 LF . . . . . . . . LITERALLY 86 94
52 0000H 2 LINK . . . . . . . WORD MEMBER(ABTQD)
37 0000H 2 LINK . . . . . . . WORD MEMBER(PD)
2 LIT. . . . . . . . LITERALLY 2 3 4 32 33 34 39 40 41 42 43
44 45 46 47 48 58
LOW. . . . . . . . BUILTIN 89
37 0024H 1 LST. . . . . . . . BYTE MEMBER(PD)
37 0015H 1 LUSER. . . . . . . BYTE MEMBER(PD)
3 MABORT . . . . . . LITERALLY 92
3 MATTACH. . . . . . LITERALLY 96
3 MCLOSEF. . . . . . LITERALLY
PL/M-86 COMPILER CCP/M-86 1.0, ABORT A PROGRAM - RSP PAGE 8
3 MCREADQ. . . . . . LITERALLY
3 MCURDSK. . . . . . LITERALLY
3 MCWRITEQ . . . . . LITERALLY
3 MDELAY . . . . . . LITERALLY
3 MDELETEF . . . . . LITERALLY
3 MDELETEQ . . . . . LITERALLY
3 MDETACH. . . . . . LITERALLY 97
3 MDIRBIOS . . . . . LITERALLY
3 MDISPATCH. . . . . LITERALLY
37 0016H 2 MEM. . . . . . . . WORD MEMBER(PD)
3 MERRMODE . . . . . LITERALLY
3 MGETCNS. . . . . . LITERALLY
3 MGETLOGIN. . . . . LITERALLY
3 MGETPD . . . . . . LITERALLY
4 MISLEEP. . . . . . LITERALLY
4 MIWAKEUP . . . . . LITERALLY
3 MMAKEF . . . . . . LITERALLY
3 MMAKEQ . . . . . . LITERALLY 60
5 0000H MON1 . . . . . . . PROCEDURE EXTERNAL(0) STACK=0000H 60 61 63 65 67 86
94 96 97
9 0000H MON2 . . . . . . . PROCEDURE BYTE EXTERNAL(1) STACK=0000H 92
13 0000H MON3 . . . . . . . PROCEDURE WORD EXTERNAL(2) STACK=0000H 69 73
3 MOPENF . . . . . . LITERALLY
3 MOPENQ . . . . . . LITERALLY 61
MOVE . . . . . . . BUILTIN 70
3 MPARSE . . . . . . LITERALLY 69 73
58 MPM86. . . . . . . LITERALLY
3 MPRTBUF. . . . . . LITERALLY 86 94
3 MREADF . . . . . . LITERALLY
3 MREADQ . . . . . . LITERALLY 65
3 MREADRF. . . . . . LITERALLY
3 MRESETDRV. . . . . LITERALLY
3 MSELECT. . . . . . LITERALLY
3 MSETATT. . . . . . LITERALLY
3 MSETCNS. . . . . . LITERALLY 67
3 MSETDMA. . . . . . LITERALLY
3 MSETPRIOR. . . . . LITERALLY 63
3 MSETUSR. . . . . . LITERALLY
52 0016H 2 MSGCNT . . . . . . WORD MEMBER(ABTQD)
52 000EH 2 MSGLEN . . . . . . WORD MEMBER(ABTQD)
52 0018H 2 MSGOUT . . . . . . WORD MEMBER(ABTQD)
3 MSYSDAT. . . . . . LITERALLY
3 MWRITEF. . . . . . LITERALLY
3 MWRITEQ. . . . . . LITERALLY
3 MWRITERF . . . . . LITERALLY
52 0006H 8 NAME . . . . . . . BYTE ARRAY(8) MEMBER(ABTQD)
51 0008H 8 NAME . . . . . . . BYTE ARRAY(8) MEMBER(ABTQPB)
37 0008H 8 NAME . . . . . . . BYTE ARRAY(8) MEMBER(PD)
55 0005H 1 NET. . . . . . . . BYTE MEMBER(ABORTPB)
52 0002H 1 NET. . . . . . . . BYTE MEMBER(ABTQD)
51 0001H 1 NET. . . . . . . . BYTE MEMBER(ABTQPB)
37 001DH 1 NET. . . . . . . . BYTE MEMBER(PD)
52 0010H 2 NMSGS. . . . . . . WORD MEMBER(ABTQD)
51 0004H 2 NMSGS. . . . . . . WORD MEMBER(ABTQPB)
2 NO . . . . . . . . LITERALLY
2 NOPAGEMODEOFFSET . LITERALLY
52 0014H 2 NQ . . . . . . . . WORD MEMBER(ABTQD)
PL/M-86 COMPILER CCP/M-86 1.0, ABORT A PROGRAM - RSP PAGE 9
36 0000H 2 OFFSET . . . . . . WORD MEMBER(PDPTR) 66
52 0003H 1 ORG. . . . . . . . BYTE MEMBER(ABTQD)
37 001CH 1 ORG. . . . . . . . BYTE MEMBER(PD)
2 PAGELENOFFSET. . . LITERALLY
37 001EH 2 PARENT . . . . . . WORD MEMBER(PD)
16 0002H 60 PATCH. . . . . . . PROCEDURE PUBLIC STACK=0002H
34 PCM11. . . . . . . LITERALLY
34 PCMCTLC. . . . . . LITERALLY
34 PCMCTLO. . . . . . LITERALLY
34 PCMCTLS. . . . . . LITERALLY
34 PCMROUT. . . . . . LITERALLY
34 PCMRSX . . . . . . LITERALLY
55 0000H 2 PD . . . . . . . . WORD MEMBER(ABORTPB)
50 0000H 2 PD . . . . . . . . WORD MEMBER(ABTCMD) 66
37 0000H 48 PD . . . . . . . . STRUCTURE BASED(PDPOINTER) 67 68
30 PDHDR. . . . . . . LITERALLY 37
35 0002H 4 PDPOINTER. . . . . POINTER 36 37 67 68
36 0002H 4 PDPTR. . . . . . . STRUCTURE AT 62 66
31 PDSTRUCTURE. . . . LITERALLY 37
33 PFACTIVE . . . . . LITERALLY
54 0032H 4 PFCB . . . . . . . STRUCTURE INITIAL 69 71 73 98
33 PFCHILDABORT . . . LITERALLY
33 PFCTLC . . . . . . LITERALLY
33 PFCTLD . . . . . . LITERALLY
33 PFKEEP . . . . . . LITERALLY
33 PFKERNAL . . . . . LITERALLY
33 PFNOCTLS . . . . . LITERALLY
33 PFPURE . . . . . . LITERALLY
33 PFRAW. . . . . . . LITERALLY
33 PFRESOURCE . . . . LITERALLY
33 PFSYS. . . . . . . LITERALLY
33 PFTABLE. . . . . . LITERALLY
33 PFTEMPKEEP . . . . LITERALLY
59 003EH 322 PLMSTART . . . . . PROCEDURE PUBLIC STACK=0008H
55 0006H 8 PNAME. . . . . . . BYTE ARRAY(8) MEMBER(ABORTPB) 70
29 PNAMSIZ. . . . . . LITERALLY
37 002CH 2 PRET . . . . . . . WORD MEMBER(PD)
37 0005H 1 PRIOR. . . . . . . BYTE MEMBER(PD)
32 PSCIOWAIT. . . . . LITERALLY
32 PSDELAY. . . . . . LITERALLY
32 PSDQ . . . . . . . LITERALLY
32 PSFLAGWAIT . . . . LITERALLY
32 PSNQ . . . . . . . LITERALLY
32 PSPOLL . . . . . . LITERALLY
32 PSRUN. . . . . . . LITERALLY
32 PSSLEEP. . . . . . LITERALLY
32 PSSWAP . . . . . . LITERALLY
32 PSTERM . . . . . . LITERALLY
51 0002H 2 QADDR. . . . . . . WORD MEMBER(ABTQPB)
40 QDSTRUCTURE. . . . LITERALLY 52
47 QFDEV. . . . . . . LITERALLY
43 QFHIDE . . . . . . LITERALLY
42 QFKEEP . . . . . . LITERALLY 52
41 QFMX . . . . . . . LITERALLY
46 QFRPL. . . . . . . LITERALLY
44 QFRSP. . . . . . . LITERALLY 52
45 QFTABLE. . . . . . LITERALLY
PL/M-86 COMPILER CCP/M-86 1.0, ABORT A PROGRAM - RSP PAGE 10
39 QNAMSIZ. . . . . . LITERALLY 51 52
48 QPBSTRUCTURE . . . LITERALLY 51
37 0028H 4 RESERVD. . . . . . BYTE ARRAY(4) MEMBER(PD)
38 0000H 2 RSPLINK. . . . . . WORD EXTERNAL(3) 62
37 002EH 2 SCRATCH. . . . . . WORD MEMBER(PD)
2 SECTORLEN. . . . . LITERALLY
36 0002H 2 SEGMENT. . . . . . WORD MEMBER(PDPTR) 62
37 0025H 1 SF3. . . . . . . . BYTE MEMBER(PD)
37 0026H 1 SF4. . . . . . . . BYTE MEMBER(PD)
37 0027H 1 SF5. . . . . . . . BYTE MEMBER(PD)
37 0004H 1 STAT . . . . . . . BYTE MEMBER(PD)
2 TAB. . . . . . . . LITERALLY
50 0002H 129 TAIL . . . . . . . BYTE ARRAY(129) MEMBER(ABTCMD) 54 98
55 0002H 2 TERM . . . . . . . WORD MEMBER(ABORTPB)
37 0002H 2 THREAD . . . . . . WORD MEMBER(PD)
2 TRUE . . . . . . . LITERALLY 64
37 0010H 2 UDA. . . . . . . . WORD MEMBER(PD)
37 0013H 1 USER . . . . . . . BYTE MEMBER(PD)
37 001AH 2 WAIT . . . . . . . WORD MEMBER(PD)
MODULE INFORMATION:
CODE AREA SIZE = 0180H 384D
CONSTANT AREA SIZE = 002EH 46D
VARIABLE AREA SIZE = 016DH 365D
MAXIMUM STACK SIZE = 0008H 8D
304 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,147 @@
$ title ('CCP/M-86 1.0, Abort a Program - RSP')
$ compact
abort:
do;
/* Modified 3/15/83 to force an ATTACH console call */
$include (:f2:copyrt.lit)
$include (:f2:comlit.lit)
$include (:f2:mfunc.lit)
/**** Vax commands for generation:
$ ccpmsetup !Set up environment
$ asm86 rhabt.a86 !Rsp Header ABorT
$ plm86 rabt.plm 'p1' 'p2' 'p3' 'p4' optimize(3) debug !Rsp ABorT
$ link86 rhabt.obj, rabt.obj to rabt.lnk
$ loc86 rabt.lnk od(sm(code,dats,data,stack,const))-
ad(sm(code(0), dats(10000h))) ss(stack(0)) to rabt.
$ h86 rabt
**** Then, on a micro:
A>vax rabt.h86 $fans
A>gencmd rabt data[b1000]
A>ren abort.rsp=rabt.cmd
**** Notes:
The stack is declared in the assemble module, RSPABT.A86.
The const(ants) come last to force hex generation.
****/
mon1:
procedure (func,info) external;
declare func byte;
declare info address;
end mon1;
mon2:
procedure (func,info) byte external;
declare func byte;
declare info address;
end mon2;
mon3:
procedure (f,a) address external;
dcl f byte, a address;
end mon3;
patch: procedure public; /* dummy area for patching code segments */
declare i address;
/* first statement is 9 bytes, rest are 5 bytes */
i=i+5; i=i+5; i=i+5; i=i+5; i=i+5;
i=i+5; i=i+5; i=i+5; i=i+5; i=i+5; /* about 54 bytes */
end patch;
$include (:f2:proces.lit)
dcl pd$pointer pointer;
dcl pd$ptr structure (offset word, segment word) at(@pd$pointer);
dcl pd based pd$pointer pd$structure;
dcl rsplink word external;
$include (:f2:qd.lit)
dcl abt$qd$buf (131) byte;
dcl abt$cmd structure(
pd address, tail (129) byte);
dcl abt$qpb qpb$structure initial(0,0,0,1,.abt$cmd,'ABORT ');
dcl abt$qd qd$structure initial (
0,0,0,qf$keep + qf$rsp,'ABORT ',131,1,0,0,0,0,.abt$qd$buf);
dcl fcb (32) byte;
dcl pfcb structure (
filename address,
fcbadr address) initial (.abt$cmd.tail, .fcb);
declare abort$pb structure (
pd address,
term address,
cns byte,
net byte,
pname (8) byte) initial (
0,00ffh,0,0,' ');
dcl i byte;
dcl console word;
dcl mpm$86 lit '1130h';
/*
Main Program
*/
plm$start:
procedure public;
call mon1(m$makeq,.abt$qd); /* make ABORT queue */
call mon1(m$openq,.abt$qpb); /* open it */
pd$ptr.segment = rsplink;
call mon1(m$setprior,200); /* back to the same as transients */
do while true;
call mon1(m$readq,.abt$qpb);
pd$ptr.offset = abt$cmd.pd; /* set console to same */
call mon1(m$setcns, pd.cns); /* of who typed ABORT */
abort$pb.cns = pd.cns;
pfcb.filename = mon3(m$parse, .pfcb);
/* get name of program to abort */
call move (8,.fcb(1),.abort$pb.pname);
/* fcb(9)='$'; DEBUG
call mon1(m$prtbuf, .fcb(1)); */
if pfcb.filename <> 0 then /* console number specified */
do;
pfcb.filename = mon3(m$parse, .pfcb);
i = 1; console = 0;
do while fcb(i) <> ' ' and i < 4;
if (fcb(i) := fcb(i) - '0') <= 9 then
do;
console = fcb(i) + 10 * console;
i = i + 1;
end;
else
i = 255; /* non - numeric */
end;
if console > 253 or i = 255 then
do;
call mon1(m$prtbuf, .(cr,lf, 'Illegal Console, Use 0-253 $'));
abort$pb.cns = 0ffh;
end;
else
abort$pb.cns = low(console);
end;
if abort$pb.cns <> 0ffh then
if mon2(m$abort, .abort$pb) = 0ffh then
do;
call mon1(m$prtbuf, .(cr,lf, 'Abort Failed.','$'));
end;
/* abort first PD found with same name and console */
/* consistent with MP/M-80 II but not MP/M 1.x */
call mon1(m$attach,0); /* make sure we own the console before */
call mon1(m$detach, 0); /* calling detach */
pfcb.filename = .abt$cmd.tail;
end;
end plmstart;
end abort;

View File

@@ -0,0 +1,101 @@
; Code and Data Interface for ABORT.RSP
; August 10, 1981
; July 27, 1982 (updated)
; Jan 1983 whf - added reg save to xdos
; Mar 1983 dh - shrunk to resonable size
name rhabt ;Rsp Header ABorT
cgroup group code
dgroup group dats
public xdos,mon1,mon2,mon3,mon4
public rsplink
extrn plmstart:near
assume cs:cgroup,ds:dgroup
dats segment 'DATA'
org 0
rsphdr_len equ 16
pd_len equ 30H
uda_len equ 100H
rsp_top equ 0
rsp_pd equ rsp_top + rsphdr_len
rsp_uda equ rsp_pd + pd_len
rsp_bottom equ rsp_uda + uda_len
org rsp_top
;RSP header
rsplink dw 0 ;becomes system data page paragraph
sdatvar dw 0
ncopies db 0
dw 0,0,0,0, 0
db 0
org rsp_pd
pd dw 0,0 ;link fields
db 0 ;status
db 190 ;priority
dw 3 ;flags - system and keep
db 'ABORT ' ;name
dw rsp_uda/10h ;uda paragraph
db 0,0 ;disk,user
db 0,0 ;ldisk,luser
dw 0 ;puremem - not re-entrant
;rest of pd
org rsp_uda ;start of uda
uda dw 0
dw 0 ;DMA must be explicitly set
dw 0,0,0,0, 0,0,0,0, 0,0,0,0
dw 0,0,0,0, 0,0,0,0, 0,0,0,0
dw offset stk_top
org rsp_uda + 60H
db 1 ;insys = 1, always use UDA stack
db 0
dw 0cccch,0cccch,0cccch,0cccch ;62
dw 0cccch,0cccch,0cccch,0cccch ;6A
dw 0cccch,0cccch,0cccch,0cccch ;72
dw 0cccch,0cccch,0cccch,0cccch ;7A
dw 0cccch,0cccch,0cccch,0cccch ;82
dw 0cccch,0cccch,0cccch,0cccch ;8A
dw 0cccch,0cccch,0cccch,0cccch ;92
dw 0cccch,0cccch,0cccch,0cccch ;9A
dw 0cccch,0cccch,0cccch,0cccch ;A2
dw 0cccch,0cccch,0cccch,0cccch ;AA
dw 0cccch,0cccch,0cccch,0cccch ;B2
dw 0cccch,0cccch,0cccch,0cccch ;BA
dw 0cccch,0cccch,0cccch,0cccch ;C2
dw 0cccch,0cccch,0cccch,0cccch ;CA
dw 0cccch,0cccch,0cccch,0cccch ;D2
dw 0cccch,0cccch,0cccch,0cccch ;DA
dw 0cccch,0cccch,0cccch,0cccch ;E2
dw 0cccch,0cccch,0cccch,0cccch ;EA
dw 0cccch,0cccch,0cccch,0cccch ;F2
stk_top dw plmstart,0,0 ;initial IRET
org rsp_bottom
datsend equ offset $
dats ends
code segment public 'CODE'
org 0
db 'COPYRIGHT (C) 1982,'
db ' DIGITAL RESEARCH '
xdos proc
push bp
mov bp,sp
mov dx,[bp+4]
mov cx,[bp+6]
int 224
pop bp
ret 4
xdos endp
mon1 equ xdos
mon2 equ xdos
mon3 equ xdos
mon4 equ xdos
code ends
end

View File

@@ -0,0 +1,221 @@
MCS-86 MACRO ASSEMBLER RHABT PAGE 1
ISIS-II MCS-86 MACRO ASSEMBLER V2.1 ASSEMBLY OF MODULE RHABT
OBJECT MODULE PLACED IN :F0:RHABT.OBJ
ASSEMBLER INVOKED BY: :F0: RHABT.A86
LOC OBJ LINE SOURCE
1 ; Code and Data Interface for ABORT.RSP
2 ; August 10, 1981
3 ; July 27, 1982 (updated)
4 ; Jan 1983 whf - added reg save to xdos
5 ; Mar 1983 dh - shrunk to resonable size
6
7 name rhabt ;Rsp Header ABorT
8
9 cgroup group code
10 dgroup group dats
11 public xdos,mon1,mon2,mon3,mon4
12 public rsplink
13 extrn plmstart:near
14
15 assume cs:cgroup,ds:dgroup
16
---- 17 dats segment 'DATA'
0000 18 org 0
0010 19 rsphdr_len equ 16
0030 20 pd_len equ 30H
0100 21 uda_len equ 100H
0000 22 rsp_top equ 0
0010 23 rsp_pd equ rsp_top + rsphdr_len
0040 24 rsp_uda equ rsp_pd + pd_len
0140 25 rsp_bottom equ rsp_uda + uda_len
0000 26 org rsp_top
27 ;RSP header
0000 0000 28 rsplink dw 0 ;becomes system data page paragraph
0002 0000 29 sdatvar dw 0
0004 00 30 ncopies db 0
0005 0000 31 dw 0,0,0,0, 0
0007 0000
0009 0000
000B 0000
000D 0000
000F 00 32 db 0
0010 33 org rsp_pd
0010 0000 34 pd dw 0,0 ;link fields
0012 0000
0014 00 35 db 0 ;status
0015 BE 36 db 190 ;priority
0016 0300 37 dw 3 ;flags - system and keep
0018 41424F52542020 38 db 'ABORT ' ;name
20
0020 0400 39 dw rsp_uda/10h ;uda paragraph
0022 00 40 db 0,0 ;disk,user
0023 00
0024 00 41 db 0,0 ;ldisk,luser
0025 00
0026 0000 42 dw 0 ;puremem - not re-entrant
MCS-86 MACRO ASSEMBLER RHABT PAGE 2
LOC OBJ LINE SOURCE
43 ;rest of pd
44
0040 45 org rsp_uda ;start of uda
0040 0000 46 uda dw 0
0042 0000 47 dw 0 ;DMA must be explicitly set
0044 0000 48 dw 0,0,0,0, 0,0,0,0, 0,0,0,0
0046 0000
0048 0000
004A 0000
004C 0000
004E 0000
0050 0000
0052 0000
0054 0000
0056 0000
0058 0000
005A 0000
005C 0000 49 dw 0,0,0,0, 0,0,0,0, 0,0,0,0
005E 0000
0060 0000
0062 0000
0064 0000
0066 0000
0068 0000
006A 0000
006C 0000
006E 0000
0070 0000
0072 0000
0074 3A01 50 dw offset stk_top
00A0 51 org rsp_uda + 60H
00A0 01 52 db 1 ;insys = 1, always use UDA stack
00A1 00 53 db 0
00A2 CCCC 54 dw 0cccch,0cccch,0cccch,0cccch ;62
00A4 CCCC
00A6 CCCC
00A8 CCCC
00AA CCCC 55 dw 0cccch,0cccch,0cccch,0cccch ;6A
00AC CCCC
00AE CCCC
00B0 CCCC
00B2 CCCC 56 dw 0cccch,0cccch,0cccch,0cccch ;72
00B4 CCCC
00B6 CCCC
00B8 CCCC
00BA CCCC 57 dw 0cccch,0cccch,0cccch,0cccch ;7A
00BC CCCC
00BE CCCC
00C0 CCCC
00C2 CCCC 58 dw 0cccch,0cccch,0cccch,0cccch ;82
00C4 CCCC
00C6 CCCC
00C8 CCCC
00CA CCCC 59 dw 0cccch,0cccch,0cccch,0cccch ;8A
00CC CCCC
MCS-86 MACRO ASSEMBLER RHABT PAGE 3
LOC OBJ LINE SOURCE
00CE CCCC
00D0 CCCC
00D2 CCCC 60 dw 0cccch,0cccch,0cccch,0cccch ;92
00D4 CCCC
00D6 CCCC
00D8 CCCC
00DA CCCC 61 dw 0cccch,0cccch,0cccch,0cccch ;9A
00DC CCCC
00DE CCCC
00E0 CCCC
00E2 CCCC 62 dw 0cccch,0cccch,0cccch,0cccch ;A2
00E4 CCCC
00E6 CCCC
00E8 CCCC
00EA CCCC 63 dw 0cccch,0cccch,0cccch,0cccch ;AA
00EC CCCC
00EE CCCC
00F0 CCCC
00F2 CCCC 64 dw 0cccch,0cccch,0cccch,0cccch ;B2
00F4 CCCC
00F6 CCCC
00F8 CCCC
00FA CCCC 65 dw 0cccch,0cccch,0cccch,0cccch ;BA
00FC CCCC
00FE CCCC
0100 CCCC
0102 CCCC 66 dw 0cccch,0cccch,0cccch,0cccch ;C2
0104 CCCC
0106 CCCC
0108 CCCC
010A CCCC 67 dw 0cccch,0cccch,0cccch,0cccch ;CA
010C CCCC
010E CCCC
0110 CCCC
0112 CCCC 68 dw 0cccch,0cccch,0cccch,0cccch ;D2
0114 CCCC
0116 CCCC
0118 CCCC
011A CCCC 69 dw 0cccch,0cccch,0cccch,0cccch ;DA
011C CCCC
011E CCCC
0120 CCCC
0122 CCCC 70 dw 0cccch,0cccch,0cccch,0cccch ;E2
0124 CCCC
0126 CCCC
0128 CCCC
012A CCCC 71 dw 0cccch,0cccch,0cccch,0cccch ;EA
012C CCCC
012E CCCC
0130 CCCC
0132 CCCC 72 dw 0cccch,0cccch,0cccch,0cccch ;F2
0134 CCCC
0136 CCCC
0138 CCCC
013A 0000 E 73 stk_top dw plmstart,0,0 ;initial IRET
MCS-86 MACRO ASSEMBLER RHABT PAGE 4
LOC OBJ LINE SOURCE
013C 0000
013E 0000
74
0140 75 org rsp_bottom
76
0140 77 datsend equ offset $
---- 78 dats ends
79
---- 80 code segment public 'CODE'
0000 81 org 0
82
0000 434F5059524947 83 db 'COPYRIGHT (C) 1982,'
48542028432920
313938322C
0013 20444947495441 84 db ' DIGITAL RESEARCH '
4C205245534541
52434820
85
0025 86 xdos proc
0025 55 87 push bp
0026 8BEC 88 mov bp,sp
0028 8B5604 89 mov dx,[bp+4]
002B 8B4E06 90 mov cx,[bp+6]
002E CDE0 91 int 224
0030 5D 92 pop bp
0031 C20400 93 ret 4
94 xdos endp
95
0025 96 mon1 equ xdos
0025 97 mon2 equ xdos
0025 98 mon3 equ xdos
0025 99 mon4 equ xdos
---- 100 code ends
101 end
ASSEMBLY COMPLETE, NO ERRORS FOUND

View File

@@ -0,0 +1,7 @@
ASM86 status: used old version, ready for QA 10/25/82
ASM86 notes
10/20/82
I got the ASM86.H86 file from [CCPMPC.VAX.ASM86]: source files are still
in that account.
Used: gcd asm86 data[b4ad,m44e,xfff]

View File

@@ -0,0 +1,5 @@
--3 X[zP
&6Si COPYRIGHT (C) DIGITAL RESEARCH, 1981 10/01/81 XZYPM`C-z.<6l{<6lhA8BPh h[vPPXs
8bPhuhbh h&F2 21~@"21<4 CQc'khkh$kh'k\afhhE v3vPPXs,hqPXs FvF21kdFy3h_?0PhhPhkK
217Qc'Hhdkhkkhwky9>CEhI{tUlh*hkhthY]CUlhhr
h]CUlhevPPXr-h'8V

View File

@@ -0,0 +1,66 @@
$ !
$ ! Compile, link, locate and generate hex files containing
$ ! ASM86 for
$ ! Concurrent CP/M-86: vers IBM PC 1.0
$ ! uses old PL/M-86 compiler
$ !
$ set verify
$ assign 'f$directory()' f1 ! force TMP files to local dir
$ oldplm86 mainp.plm debug optimize(2) 'p1' xref
$ oldplm86 cmac1.plm debug optimize(2) 'p1'
$ oldplm86 cmac2.plm debug optimize(2) 'p1'
$ oldplm86 cmac3.plm debug optimize(2) 'p1'
$ oldplm86 cmac4.plm debug optimize(2) 'p1'
$ oldplm86 cmac5.plm debug optimize(2) 'p1'
$ oldplm86 mnem1.plm debug optimize(2) 'p1'
$ oldplm86 mnem2.plm debug optimize(2) 'p1'
$ oldplm86 mnem3.plm debug optimize(2) 'p1'
$ oldplm86 mnem4.plm debug optimize(2) 'p1'
$ oldplm86 symb.plm debug optimize(2) 'p1' xref
$ oldplm86 io.plm debug optimize(2) 'p1' xref
$ oldplm86 subr1.plm debug optimize(2) 'p1' xref
$ oldplm86 subr2.plm debug optimize(2) 'p1' xref
$ oldplm86 files.plm debug optimize(2) 'p1' xref
$ oldplm86 scan.plm debug optimize(2) 'p1' xref
$ oldplm86 print.plm debug optimize(2) 'p1' xref
$ oldplm86 predef.plm debug optimize(2) 'p1' xref
$ oldplm86 ermod.plm debug optimize(2) 'p1' xref
$ oldplm86 text.plm debug optimize(2) 'p1' xref
$ oldplm86 outp.plm debug optimize(2) 'p1' xref
$ oldplm86 expr.plm debug optimize(2) 'p1' xref
$ oldplm86 brexpr.plm debug optimize(2) 'p1' xref
$ oldplm86 pseud1.plm debug optimize(2) 'p1' xref
$ oldplm86 pseud2.plm debug optimize(2) 'p1' xref
$ oldplm86 cmsubr.plm debug optimize(2) 'p1' xref
$ oldplm86 instr.plm debug optimize(2) 'p1' xref
$ oldplm86 dline.plm debug optimize(2) 'p1' xref
$ oldplm86 global.plm debug optimize(2) 'p1' xref
$ oldplm86 cm.plm debug optimize(2) 'p1' xref
$ oldplm86 cm2.plm debug optimize(2) 'p1' xref
$ oldasm86 c86lnk.asm debug
$ oldlink86 cmac1.obj,cmac2.obj,cmac3.obj,cmac4.obj,cmac5.obj to f11.mod
$ oldlink86 mnem1.obj,mnem2.obj,mnem3.obj,mnem4.obj,symb.obj to f12.mod
$ oldlink86 io.obj,subr1.obj,subr2.obj,files.obj,scan.obj to f13.mod
$ oldlink86 print.obj,predef.obj,ermod.obj,text.obj,outp.obj to f14.mod
$ oldlink86 expr.obj,brexpr.obj,pseud1.obj,pseud2.obj,cmsubr.obj to f15.mod
$ oldlink86 instr.obj,dline.obj,global.obj,cm.obj,cm2.obj to f16.mod
$ oldlink86 f11.mod,f12.mod,f13.mod to f21.mod
$ oldlink86 f14.mod,f15.mod,f16.mod to f22.mod
$ oldlink86 c86lnk.obj,mainp.obj,f21.mod,f22.mod to asm86.mod
$ oldloc86 asm86.mod nopublics ad(sm(code(0))) od(sm(code,const,stack))
$ oldh86 asm86
$ assign [ccpmpc.vax.common] f1
$ ren asm86.mp1 asm86.111
$ del *.mp1;*
$ ren asm86.111 asm86.mp1
$ pclean
! on micro under cp/m or mp/m
!
! determine BBB and MMM from asm86.mp2 file
! BBB = start of const segment / 16
! MMM = (start of memory segment - start of const segment)/ 16 + 100h
! (4K for sysmbol table)
!
! gencmd asm86 data[bBBB,mMMM,xfff]
! which turns out to be:
! gencmd asm86 data[4ad, m44e, xfff]

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,68 @@
File: m:ermod.plm CROSS REFERENCE Page 1
**** CROSS REFERENCE *****
"ERRORS" 22
' ' 81
' ** NEAR: "' 80
'"' 127
'** ERROR NO:' 79
'DOUBLE DEFINED LABEL' 43
'DOUBLE DEFINED SYMBOL - ' 56
'DOUBLE DEFINED VARIABLE' 42
'ERROR IN CODEMACROBUILDING' 65
'ERROR MESSAGE MODULE' 1
'FILE NAME SYNTAX ERROR' 59
'GARBAGE AT END OF LINE - IGNORED' 45
'ILLEGAL "IF" OPERAND - "IF" IGNORED' 52
'ILLEGAL EXPRESSION ELEMENT' 61
'ILLEGAL FIRST ITEM' 39
'ILLEGAL INSTRUCTION OPERANDS' 47
'ILLEGAL PSEUDO INSTRUCTION' 41
'ILLEGAL PSEUDO OPERAND' 50
'INSTRUCTION NOT IN CODE SEGMENT' 58
'LABEL OUT OF RANGE' 63
'MISSING INSTRUCTION' 48
'MISSING PSEUDO INSTRUCTION' 40
'MISSING SEGMENT INFORMATION IN OPERAND' 64
'MISSING TYPE INFORMATION IN OPERAND(S)' 62
'NEGLECTED' 55
'NESTED "IF" ILLEGAL - "IF" IGNORED' 51
'NESTED INCLUDE NOT ALLOWED' 60
'NO MATCHING "IF" FOR "ENDIF"' 53
'OPERAND(S) MISMATCH INSTRUCTION' 46
'SYMBOL ILLEGALLY FORWARD REFERENCED - ' 54
'TREATED AS UNDEFINED' 57
'UNDEFINED ELEMENT OF EXPRESSION' 49
'UNDEFINED INSTRUCTION' 44
**** end cross reference ***
File: m:text.plm CROSS REFERENCE Page 1
**** CROSS REFERENCE *****
"no" 16
"yes" 16
' PAGE' 26
' USER BREAK. OK(Y/N)? ' 39
'. USE FACTOR: ' 29
'CANNOT CLOSE' 37
'CP/M 8086 ASSEMBLER VER 1.1' 30
'CP/M ASM86 1.1 SOURCE: ' 25
'DIRECTORY FULL' 36
'DISK FULL' 35
'DISK READ ERROR' 34
'END OF ASSEMBLY. ' 27
'END OF PASS 1' 40
'END OF PASS 2' 41
'N' 19
'NO FILE' 33
'NUMBER OF ERRORS: ' 28
'PARAMETER ERROR' 32
'SYMBOL TABLE OVERFLOW' 38
'TEXT MODULE' 1
'Y' 18
**** end cross reference ***

View File

@@ -0,0 +1,55 @@
$ set def [frank.mpm86.asm86]
$ plm86 mainp.plm debug optimize(2) 'p1' xref
$ plm86 cmac1.plm debug optimize(2) 'p1'
$ plm86 cmac2.plm debug optimize(2) 'p1'
$ plm86 cmac3.plm debug optimize(2) 'p1'
$ plm86 cmac4.plm debug optimize(2) 'p1'
$ plm86 cmac5.plm debug optimize(2) 'p1'
$ plm86 mnem1.plm debug optimize(2) 'p1'
$ plm86 mnem2.plm debug optimize(2) 'p1'
$ plm86 mnem3.plm debug optimize(2) 'p1'
$ plm86 mnem4.plm debug optimize(2) 'p1'
$ plm86 symb.plm debug optimize(2) 'p1' xref
$ plm86 io.plm debug optimize(2) 'p1' xref
$ plm86 subr1.plm debug optimize(2) 'p1' xref
$ plm86 subr2.plm debug optimize(2) 'p1' xref
$ plm86 files.plm debug optimize(2) 'p1' xref
$ plm86 scan.plm debug optimize(2) 'p1' xref
$ plm86 print.plm debug optimize(2) 'p1' xref
$ plm86 predef.plm debug optimize(2) 'p1' xref
$ plm86 ermod.plm debug optimize(2) 'p1' xref
$ plm86 text.plm debug optimize(2) 'p1' xref
$ plm86 outp.plm debug optimize(2) 'p1' xref
$ plm86 expr.plm debug optimize(2) 'p1' xref
$ plm86 brexpr.plm debug optimize(2) 'p1' xref
$ plm86 pseud1.plm debug optimize(2) 'p1' xref
$ plm86 pseud2.plm debug optimize(2) 'p1' xref
$ plm86 cmsubr.plm debug optimize(2) 'p1' xref
$ plm86 instr.plm debug optimize(2) 'p1' xref
$ plm86 dline.plm debug optimize(2) 'p1' xref
$ plm86 global.plm debug optimize(2) 'p1' xref
$ plm86 cm.plm debug optimize(2) 'p1' xref
$ plm86 cm2.plm debug optimize(2) 'p1' xref
$ asm86 c86lnk.asm debug
$ link86 cmac1.obj,cmac2.obj,cmac3.obj,cmac4.obj,cmac5.obj to f11.mod
$ link86 mnem1.obj,mnem2.obj,mnem3.obj,mnem4.obj,symb.obj to f12.mod
$ link86 io.obj,subr1.obj,subr2.obj,files.obj,scan.obj to f13.mod
$ link86 print.obj,predef.obj,ermod.obj,text.obj,outp.obj to f14.mod
$ link86 expr.obj,brexpr.obj,pseud1.obj,pseud2.obj,cmsubr.obj to f15.mod
$ link86 instr.obj,dline.obj,global.obj,cm.obj,cm2.obj to f16.mod
$ link86 f11.mod,f12.mod,f13.mod to f21.mod
$ link86 f14.mod,f15.mod,f16.mod to f22.mod
$ link86 c86lnk.obj,mainp.obj,f21.mod,f22.mod,plm86.lib to asm86.mod
$ loc86 asm86.mod nopublics ad(sm(code(0))) od(sm(code,const,stack))
$ h86 asm86
! on micro under cp/m or mp/m
!
! determine BBB and MMM from asm86.mp2 file
! BBB = start of const segment / 16
! MMM = (start of memory segment - start of const segment)/ 16 + 100h
! (4K for sysmbol table)
!
! gencmd asm86 data[bBBB,mMMM,xfff]
! which turns out to be:
! gencmd asm86 data[4ad, m44e, xfff]

View File

@@ -0,0 +1,19 @@
/*********** "BNF"-expression syntax ************/
/*
E::= E xor A !! E or A !! A
A::= A and N !! N
N::= not N !! R
R::= P eq P !! P lt P !! P le P !! P gt P !! P ge P !! P ne P !! P
P::= P + T !! P - T !! T
T::= T * M !! T / M !! T mod M !! T shl M !! T shr M !! M
M::= - M !! + M !! S
S::= <over>: F !! F
F::= F ptr B !! seg B !! offset B !! type B !!
length B !! last B !! B
B::= ( E ) !! [ bracket-expression ] !! I
I::= varaible !! . number !! number !! label !! string
<over>::= segment register
(stringlength < 3)
*/

View File

@@ -0,0 +1,5 @@
--3 X[zP
&6Si COPYRIGHT (C) DIGITAL RESEARCH, 1981 10/01/81 XZYPM`C-z.<6l{<6lhA8BPh h[vPPXs
8bPhuhbh h&F2 21~@"21<4 CQc'khkh$kh'k\afhhE v3vPPXs,hqPXs FvF21kdFy3h_?0PhhPhkK
217Qc'Hhdkhkkhwky9>CEhI{tUlh*hkhthY]CUlhhr
h]CUlhevPPXr-h'8V

View File

@@ -0,0 +1,263 @@
PL/M-86 COMPILER BRACKET EXPRESSION 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE BREXPR
OBJECT MODULE PLACED IN BREXPR.OBJ
COMPILER INVOKED BY: :F0: BREXPR.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100) XREF
$title ('BRACKET EXPRESSION')
1 brexpr:
/*
modified 4/13/81 R. Silberstein
*/
do;
$include (:f1:macro.lit)
= $nolist
$include (:f1:brexpr.x86)
= $nolist
$include (:f1:ermod.ext)
= $nolist
$include (:f1:exglob.ext)
= $nolist
PL/M-86 COMPILER BRACKET EXPRESSION 10/5/81 PAGE 2
$eject
/* compute index expression within brackets */
17 1 bracketexpr: proc(pt) byte public;
18 2 dcl pt address,oper based pt operandstruc,
(firsttype,firstreg,lasttype,lastreg) byte,
baseregi lit '0',indexregi lit'1';
19 2 regtyp: proc(pt1,pt2) byte;
20 3 dcl (pt1,pt2) address,(typ based pt1,regi based pt2) byte;
21 3 if (token.type=reg) and (token.descr=wrd) then$do
23 4 typ=baseregi;
24 4 regi=token.value;
25 4 if (regi=rbp) or (regi=rbx) then return true;
27 4 typ=indexregi;
28 4 if (regi=rsi) or (regi=rdi) then return true;
end$if;
31 3 return false;
32 3 end regtyp;
33 2 setoperflags: proc (pt1,pt2);
34 3 dcl (pt1,pt2) address,(typ based pt1,regi based pt2) byte;
35 3 if typ=indexregi then$do
37 4 oper.sflag=oper.sflag or iregbit;
38 4 IF REGI = RDI THEN OPER.BASEINDEX = OPER.BASEINDEX OR INDEXREGBIT;
else$do
42 4 oper.sflag=oper.sflag or bregbit;
43 4 IF REGI = RBP THEN OPER.BASEINDEX = OPER.BASEINDEX OR BASEREGBIT;
end$if;
46 3 end setoperflags;
47 2 if not regtyp(.firsttype,.firstreg) then return false;
49 2 call setoperflags(.firsttype,.firstreg);
50 2 call scan;
51 2 if specialtoken('+') then$do
53 3 call scan;
54 3 if not regtyp(.lasttype,.lastreg) then return false;
56 3 if firsttype=lasttype then return false;
58 3 call setoperflags(.lasttype,.lastreg);
59 3 call scan;
60 3 end$if;
61 2 if not specialtoken(rightbracket) then return false;
63 2 call scan;
64 2 if (oper.sflag and segmbit) = 0 then$do
66 3 if oper.stype=number then$do
68 4 oper.baseindex=oper.baseindex or nooverridebit;
69 4 end$if;
end$if;
71 2 oper.stype=variable;
72 2 return true;
73 2 end bracketexpr;
74 1 end$module brexpr;
PL/M-86 COMPILER BRACKET EXPRESSION 10/5/81 PAGE 3
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
16 0000H 1 ACCLEN . . . . . . BYTE EXTERNAL(11)
16 0000H 80 ACCUM. . . . . . . BYTE ARRAY(80) EXTERNAL(12)
2 ADDR . . . . . . . LITERALLY 16 18
16 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPERANDS)
18 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPER) 39 44 68
7 BASEREGBIT . . . . LITERALLY 44
7 BASEREGCOUNT . . . LITERALLY
18 BASEREGI . . . . . LITERALLY 23
17 0000H 148 BRACKETEXPR. . . . PROCEDURE BYTE PUBLIC STACK=000AH
7 BREGBIT. . . . . . LITERALLY 42
7 BREGCOUNT. . . . . LITERALLY
1 0000H BREXPR . . . . . . PROCEDURE STACK=0000H
4 BYT. . . . . . . . LITERALLY
16 0000H 2 CIP. . . . . . . . WORD EXTERNAL(3)
3 CODE . . . . . . . LITERALLY
2 CR . . . . . . . . LITERALLY
16 0000H 1 CSEGSPEC . . . . . BYTE EXTERNAL(6)
16 0000H 1 CSEGTYPE . . . . . BYTE EXTERNAL(4)
16 0000H 2 CSEGVALUE. . . . . WORD EXTERNAL(5)
16 0000H 2 CURDSEG. . . . . . WORD EXTERNAL(8)
2 DCL. . . . . . . . LITERALLY
3 DELETEDSYMB. . . . LITERALLY
16 0001H 1 DESCR. . . . . . . BYTE MEMBER(TOKEN) 21
3 DOUBLEDEFINED. . . LITERALLY
16 0000H 1 DSPEC. . . . . . . BYTE EXTERNAL(7)
4 DWRD . . . . . . . LITERALLY
2 ELSEDO . . . . . . LITERALLY 39
2 ENDCASE. . . . . . LITERALLY
2 ENDDO. . . . . . . LITERALLY
2 ENDFOREVER . . . . LITERALLY
2 ENDIF. . . . . . . LITERALLY 29 44 69
2 ENDMODULE. . . . . LITERALLY
2 ENDOFFILE. . . . . LITERALLY
2 ENDPROC. . . . . . LITERALLY
2 ENDWHILE . . . . . LITERALLY
13 0000H ERRMSG . . . . . . PROCEDURE EXTERNAL(2) STACK=0000H
13 0000H 1 ERRNO. . . . . . . BYTE PARAMETER 14
2 FALSE. . . . . . . LITERALLY 31 48 55 57 62
18 0003H 1 FIRSTREG . . . . . BYTE 47 49
18 0002H 1 FIRSTTYPE. . . . . BYTE 47 49 56
2 FOREVER. . . . . . LITERALLY
2 FORMFEED . . . . . LITERALLY
3 IDENT. . . . . . . LITERALLY
7 INDEXREGBIT. . . . LITERALLY 39
7 INDEXREGCOUNT. . . LITERALLY
18 INDEXREGI. . . . . LITERALLY 27 35
2 INIT . . . . . . . LITERALLY
7 IREGBIT. . . . . . LITERALLY 37
7 IREGCOUNT. . . . . LITERALLY
PL/M-86 COMPILER BRACKET EXPRESSION 10/5/81 PAGE 4
3 LAB. . . . . . . . LITERALLY
18 0005H 1 LASTREG. . . . . . BYTE 54 58
18 0004H 1 LASTTYPE . . . . . BYTE 54 56 58
6 LEFTBRACKET. . . . LITERALLY
16 0000H 2 LENGTH . . . . . . WORD MEMBER(OPERANDS)
18 0000H 2 LENGTH . . . . . . WORD MEMBER(OPER)
2 LF . . . . . . . . LITERALLY
2 LIT. . . . . . . . LITERALLY 2 3 4 5 6 7 18
3 NEGLECTED. . . . . LITERALLY
16 0000H 1 NEXTCH . . . . . . BYTE EXTERNAL(10)
4 NIL. . . . . . . . LITERALLY
16 0000H 1 NOOPER . . . . . . BYTE EXTERNAL(13)
7 NOOVERCOUNT. . . . LITERALLY
7 NOOVERRIDEBIT. . . LITERALLY 68
3 NUMBER . . . . . . LITERALLY 66
6 OAND . . . . . . . LITERALLY
6 OEQ. . . . . . . . LITERALLY
16 0006H 2 OFFSET . . . . . . WORD MEMBER(OPERANDS)
18 0006H 2 OFFSET . . . . . . WORD MEMBER(OPER)
6 OGE. . . . . . . . LITERALLY
6 OGT. . . . . . . . LITERALLY
6 OLAST. . . . . . . LITERALLY
6 OLE. . . . . . . . LITERALLY
6 OLENGTH. . . . . . LITERALLY
6 OLT. . . . . . . . LITERALLY
6 OMOD . . . . . . . LITERALLY
6 ONE. . . . . . . . LITERALLY
6 ONOT . . . . . . . LITERALLY
6 OOFFSET. . . . . . LITERALLY
6 OOR. . . . . . . . LITERALLY
18 0000H 9 OPER . . . . . . . STRUCTURE BASED(PT) 37 39 42 44 64
66 68 71
16 0000H 36 OPERANDS . . . . . STRUCTURE ARRAY(4) EXTERNAL(14)
7 OPERANDSTRUC . . . LITERALLY 16 18
3 OPERATOR . . . . . LITERALLY
6 OPTR . . . . . . . LITERALLY
6 OSEG . . . . . . . LITERALLY
6 OSHL . . . . . . . LITERALLY
6 OSHORT . . . . . . LITERALLY
6 OSHR . . . . . . . LITERALLY
6 OTYPE. . . . . . . LITERALLY
6 OXOR . . . . . . . LITERALLY
2 PROC . . . . . . . LITERALLY 8 10 13 17 19 33
3 PSEUDO . . . . . . LITERALLY
17 0000H 2 PT . . . . . . . . WORD PARAMETER 18 37 39 42 44 64
66 68 71
19 0006H 2 PT1. . . . . . . . WORD PARAMETER AUTOMATIC 20 23 27
33 0006H 2 PT1. . . . . . . . WORD PARAMETER AUTOMATIC 34 35
33 0004H 2 PT2. . . . . . . . WORD PARAMETER AUTOMATIC 34 38 43
19 0004H 2 PT2. . . . . . . . WORD PARAMETER AUTOMATIC 20 24 25 28
5 RBP. . . . . . . . LITERALLY 25 43
5 RBX. . . . . . . . LITERALLY 25
5 RCS. . . . . . . . LITERALLY
5 RDI. . . . . . . . LITERALLY 28 38
5 RDS. . . . . . . . LITERALLY
PL/M-86 COMPILER BRACKET EXPRESSION 10/5/81 PAGE 5
2 REENT. . . . . . . LITERALLY
3 REG. . . . . . . . LITERALLY 21
20 0000H 1 REGI . . . . . . . BYTE BASED(PT2) 24 25 28
34 0000H 1 REGI . . . . . . . BYTE BASED(PT2) 38 43
19 0094H 73 REGTYP . . . . . . PROCEDURE BYTE STACK=0006H 47 54
5 RES. . . . . . . . LITERALLY
6 RIGHTBRACKET . . . LITERALLY 61
5 RSI. . . . . . . . LITERALLY 28
5 RSS. . . . . . . . LITERALLY
8 0000H SCAN . . . . . . . PROCEDURE EXTERNAL(0) STACK=0000H 50 53
59 63
7 SEGMBIT. . . . . . LITERALLY 64
7 SEGMCOUNT. . . . . LITERALLY
18 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPER)
16 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPERANDS)
7 SEGTYPEBIT . . . . LITERALLY
7 SEGTYPECOUNT . . . LITERALLY
33 00DDH 65 SETOPERFLAGS . . . PROCEDURE STACK=0006H 49 58
18 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPER) 37 42 64
16 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPERANDS)
2 SPACE. . . . . . . LITERALLY
3 SPEC . . . . . . . LITERALLY
10 0000H SPECIALTOKEN . . . PROCEDURE BYTE EXTERNAL(1) STACK=0000H 51
61
3 STRING . . . . . . LITERALLY
2 STRUC. . . . . . . LITERALLY 16 18
18 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPER) 66 71
16 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPERANDS)
3 SYMBOL . . . . . . LITERALLY
2 TAB. . . . . . . . LITERALLY
2 THENDO . . . . . . LITERALLY 21 35 51 64 66
10 0000H 1 TOK. . . . . . . . BYTE PARAMETER 11
16 0000H 4 TOKEN. . . . . . . STRUCTURE EXTERNAL(9) 21 24
2 TRUE . . . . . . . LITERALLY 26 29 72
34 0000H 1 TYP. . . . . . . . BYTE BASED(PT1) 35
20 0000H 1 TYP. . . . . . . . BYTE BASED(PT1) 23 27
16 0000H 1 TYPE . . . . . . . BYTE MEMBER(TOKEN) 21
7 TYPEBIT. . . . . . LITERALLY
7 TYPECOUNT. . . . . LITERALLY
3 UDEFSYMB . . . . . LITERALLY
16 0002H 2 VALUE. . . . . . . WORD MEMBER(TOKEN) 24
3 VARIABLE . . . . . LITERALLY 71
4 WRD. . . . . . . . LITERALLY 21
MODULE INFORMATION:
CODE AREA SIZE = 011EH 286D
CONSTANT AREA SIZE = 0000H 0D
VARIABLE AREA SIZE = 0006H 6D
MAXIMUM STACK SIZE = 000AH 10D
254 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,68 @@
$title ('BRACKET EXPRESSION')
brexpr:
/*
modified 4/13/81 R. Silberstein
*/
do;
$include (:f1:macro.lit)
$include (:f1:brexpr.x86)
$include (:f1:ermod.ext)
$include (:f1:exglob.ext)
$eject
/* compute index expression within brackets */
bracketexpr: proc(pt) byte public;
dcl pt address,oper based pt operandstruc,
(firsttype,firstreg,lasttype,lastreg) byte,
baseregi lit '0',indexregi lit'1';
regtyp: proc(pt1,pt2) byte;
dcl (pt1,pt2) address,(typ based pt1,regi based pt2) byte;
if (token.type=reg) and (token.descr=wrd) then$do
typ=baseregi;
regi=token.value;
if (regi=rbp) or (regi=rbx) then return true;
typ=indexregi;
if (regi=rsi) or (regi=rdi) then return true;
end$if;
return false;
end regtyp;
setoperflags: proc (pt1,pt2);
dcl (pt1,pt2) address,(typ based pt1,regi based pt2) byte;
if typ=indexregi then$do
oper.sflag=oper.sflag or iregbit;
IF REGI = RDI THEN OPER.BASEINDEX = OPER.BASEINDEX OR INDEXREGBIT;
else$do
oper.sflag=oper.sflag or bregbit;
IF REGI = RBP THEN OPER.BASEINDEX = OPER.BASEINDEX OR BASEREGBIT;
end$if;
end setoperflags;
if not regtyp(.firsttype,.firstreg) then return false;
call setoperflags(.firsttype,.firstreg);
call scan;
if specialtoken('+') then$do
call scan;
if not regtyp(.lasttype,.lastreg) then return false;
if firsttype=lasttype then return false;
call setoperflags(.lasttype,.lastreg);
call scan;
end$if;
if not specialtoken(rightbracket) then return false;
call scan;
if (oper.sflag and segmbit) = 0 then$do
if oper.stype=number then$do
oper.baseindex=oper.baseindex or nooverridebit;
end$if;
end$if;
oper.stype=variable;
return true;
end bracketexpr;
end$module brexpr;

View File

@@ -0,0 +1,124 @@
$nolist
/*
modified 4/13/81 R. Silberstein
*/
/* Symbol types : */
dcl
reg lit '0', /* register */
pseudo lit '1', /* pseudo instruction */
code lit '2', /* instruction */
string lit '3', /* character string */
spec lit '4', /* special character */
number lit '5', /* 8 or 16 bit number */
variable lit '6',
lab lit '7', /* label */
operator lit '8', /* operator in expressions */
doubledefined lit '0f9h', /* doubled defined symbol */
neglected lit '0fah', /* neglected symb.,never to be def. */
ident lit '0fbh', /* identificator, scanner output */
udefsymb lit '0fdh', /* undefined symbol */
symbol lit '0feh', /* variable,label or undef. symb. */
deletedsymb lit '0ffh'; /* deleted symbol (not used */
/* Symbol description values */
dcl
nil lit '0', /* no specification */
byt lit '1', /* symbol is 8-bit type */
wrd lit '2', /* symbol is 16 bit type */
dwrd lit '4'; /* symbol is 2*16 bit type
or a segment register */
/* Register values : */
dcl
rbx lit '3',
rbp lit '5',
rsi lit '6',
rdi lit '7',
res lit '0', /* segment registers */
rcs lit '1',
rss lit '2',
rds lit '3';
/* Symbolic operators */
dcl
oshort lit '0', /* 8-bit value of expression */
oor lit '1', /* logical OR */
oxor lit '2', /* logical XOR */
oand lit '3', /* logical AND */
onot lit '4', /* logical NOT */
oeq lit '5', /* equal */
ogt lit '6', /* greater */
oge lit '7', /* greater or equal */
olt lit '8', /* less */
ole lit '9', /* less or equal */
one lit '10', /* not equal */
omod lit '11', /* arithmetic MOD */
oshl lit '12', /* shift left */
oshr lit '13', /* shift rigth */
optr lit '14', /* take type of 1. op, value of 2. */
ooffset lit '15', /* offset value of operand */
oseg lit '16', /* segment value of operand */
otype lit '17', /* type value of operand */
olength lit '18', /* length attribute of variables */
olast lit '19', /* length - 1 */
leftbracket lit '''[''',
rightbracket lit ''']''';
dcl
operandstruc lit 'struc(
length addr,
stype byte,
sflag byte,
segment addr,
offset addr,
baseindex byte)',
/* define bits of SFLAG of structures above */
type$bit lit '7h', /* bit 0-2 */
segtypebit lit '18h', /* bit 3-4 */
segmbit lit '20h', /* bit 5 */
iregbit lit '40h', /* bit 6 */
bregbit lit '80h', /* bit 7 */
/* left-shift counters */
typecount lit '0',
segtypecount lit '3',
segmcount lit '5',
iregcount lit '6',
bregcount lit '7',
/* define bits of BASEINDEX byte of structures above */
indexregbit lit '01h', /* bit 0 */
baseregbit lit '02h', /* bit 1 */
nooverridebit lit '40h', /* bit 6 */
/* left shift counters */
indexregcount lit '0',
baseregcount lit '1',
noovercount lit '6';
scan: proc external;
end scan;
specialtoken: proc (tok) byte external;
dcl tok byte;
end specialtoken;
$list

View File

@@ -0,0 +1,77 @@
;
extrn asm86:near
cgroup group code
dgroup group const,data,stack,memory
assume cs:cgroup,ds:dgroup
data segment public 'DATA'
data ends
;
stack segment word stack 'STACK'
stack_base label byte
stack ends
;
memory segment memory 'MEMORY'
memory ends
const segment public 'CONST'
public fcb,fcb16,tbuff,endbuf
org 6
endbuf equ $
org 5ch
fcb equ $
org 6ch
fcb16 equ $
org 80h
tbuff equ $
org 100h
const ends
code segment public 'CODE'
public mon1,mon2
start: mov ax,ds
pushf
pop bx
cli
mov ss,ax
lea sp,stack_base
push bx
popf
jmp asm86
copyright db ' COPYRIGHT (C) DIGITAL RESEARCH, 1981 '
public patch
patch:
db 90h,90h,90h,90h,90h,90h,90h,90h
db 90h,90h,90h,90h,90h,90h,90h,90h
db 90h,90h,90h,90h,90h,90h,90h,90h
db 90h,90h,90h,90h,90h,90h,90h,90h
db 90h,90h,90h,90h,90h,90h,90h,90h
db 90h,90h,90h,90h,90h,90h,90h,90h
db 90h,90h,90h,90h,90h,90h,90h,90h
db 90h,90h,90h,90h,90h,90h,90h,90h
date db ' 10/01/81 '
bdos:
pop ax ; return address
pop dx
pop cx
push ax
int 224
ret
mon1 equ bdos
mon2 equ bdos
code ends
end

View File

@@ -0,0 +1,161 @@
MCS-86 MACRO ASSEMBLER C86LNK PAGE 1
ISIS-II MCS-86 MACRO ASSEMBLER V2.1 ASSEMBLY OF MODULE C86LNK
OBJECT MODULE PLACED IN :F0:C86LNK.OBJ
ASSEMBLER INVOKED BY: :F0: C86LNK.ASM DEBUG
LOC OBJ LINE SOURCE
1 ;
2 extrn asm86:near
3 cgroup group code
4 dgroup group const,data,stack,memory
5
6 assume cs:cgroup,ds:dgroup
7
---- 8 data segment public 'DATA'
---- 9 data ends
10
11 ;
---- 12 stack segment word stack 'STACK'
0000 13 stack_base label byte
---- 14 stack ends
15 ;
16
---- 17 memory segment memory 'MEMORY'
---- 18 memory ends
19
---- 20 const segment public 'CONST'
21
22 public fcb,fcb16,tbuff,endbuf
23
0006 24 org 6
0006 25 endbuf equ $
005C 26 org 5ch
005C 27 fcb equ $
006C 28 org 6ch
006C 29 fcb16 equ $
0080 30 org 80h
0080 31 tbuff equ $
0100 32 org 100h
33
---- 34 const ends
35
---- 36 code segment public 'CODE'
37
38 public mon1,mon2
39
0000 8CD8 40 start: mov ax,ds
0002 9C 41 pushf
0003 5B 42 pop bx
0004 FA 43 cli
0005 8ED0 44 mov ss,ax
0007 8D260000 R 45 lea sp,stack_base
000B 53 46 push bx
000C 9D 47 popf
000D E90000 E 48 jmp asm86
49
0010 20434F50595249 50 copyright db ' COPYRIGHT (C) DIGITAL RESEARCH, 1981 '
MCS-86 MACRO ASSEMBLER C86LNK PAGE 2
LOC OBJ LINE SOURCE
47485420284329
20444947495441
4C205245534541
5243482C203139
383120
51
52 public patch
0036 53 patch:
0036 90 54 db 90h,90h,90h,90h,90h,90h,90h,90h
0037 90
0038 90
0039 90
003A 90
003B 90
003C 90
003D 90
003E 90 55 db 90h,90h,90h,90h,90h,90h,90h,90h
003F 90
0040 90
0041 90
0042 90
0043 90
0044 90
0045 90
0046 90 56 db 90h,90h,90h,90h,90h,90h,90h,90h
0047 90
0048 90
0049 90
004A 90
004B 90
004C 90
004D 90
004E 90 57 db 90h,90h,90h,90h,90h,90h,90h,90h
004F 90
0050 90
0051 90
0052 90
0053 90
0054 90
0055 90
0056 90 58 db 90h,90h,90h,90h,90h,90h,90h,90h
0057 90
0058 90
0059 90
005A 90
005B 90
005C 90
005D 90
005E 90 59 db 90h,90h,90h,90h,90h,90h,90h,90h
005F 90
0060 90
0061 90
0062 90
0063 90
0064 90
MCS-86 MACRO ASSEMBLER C86LNK PAGE 3
LOC OBJ LINE SOURCE
0065 90
0066 90 60 db 90h,90h,90h,90h,90h,90h,90h,90h
0067 90
0068 90
0069 90
006A 90
006B 90
006C 90
006D 90
006E 90 61 db 90h,90h,90h,90h,90h,90h,90h,90h
006F 90
0070 90
0071 90
0072 90
0073 90
0074 90
0075 90
62
0076 2031302F30312F 63 date db ' 10/01/81 '
383120
64
0080 65 bdos:
0080 58 66 pop ax ; return address
0081 5A 67 pop dx
0082 59 68 pop cx
0083 50 69 push ax
0084 CDE0 70 int 224
0086 C3 71 ret
72
0080 73 mon1 equ bdos
0080 74 mon2 equ bdos
---- 75 code ends
76
77 end
ASSEMBLY COMPLETE, NO ERRORS FOUND

View File

@@ -0,0 +1,36 @@
$nolist
codemacro$rout: PROC external;
end$proc codemacro$rout;
db$cm$rout: PROC external;
end$proc db$cm$rout;
dw$cm$rout: PROC external;
end$proc dw$cm$rout;
dd$cm$rout: PROC external;
end$proc dd$cm$rout;
segfix$cm$rout: PROC external;
end$proc segfix$cm$rout;
nosegfix$cm$rout: PROC external;
end$proc nosegfix$cm$rout;
modrm$cm$rout: PROC external;
end$proc modrm$cm$rout;
relb$cm$rout: PROC external;
end$proc relb$cm$rout;
relw$cm$rout: PROC external;
end$proc relw$cm$rout;
dbit$cm$rout: PROC external;
end$proc dbit$cm$rout;
end$cm$rout: PROC external;
end$proc end$cm$rout;
$list

View File

@@ -0,0 +1,15 @@
$nolist
/* D E C L A R A T I O N F O R "C O D E M A C R O" P A R T
Extended version of ASM86 */
dcl comma lit ''',''',
colon lit ''':''',
first lit '0',
second lit '1',
leftpar lit '''(''',
rightpar lit ''')''';
$list

View File

@@ -0,0 +1,820 @@
PL/M-86 COMPILER CODEMACRO MODULE 1 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE CM1
OBJECT MODULE PLACED IN CM.OBJ
COMPILER INVOKED BY: :F0: CM.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100) XREF
$title ('codemacro module 1')
1 cm1:
do;
/*
modified 7/24/81 R. Silberstein
*/
/* This is the module to build new instructions
which is not present in the already existing
system. */
$include (:f1:macro.lit)
= $nolist
$include (:f1:equals.lit)
= $nolist
$include (:f1:struc.lit)
= $nolist
$include (:f1:cmacd.lit)
= $nolist
$include (:f1:ermod.lit)
= $nolist
$include (:f1:scan.ext)
= $nolist
$include (:f1:ermod.ext)
= $nolist
$include (:f1:cm2.ext)
= $nolist
$include (:f1:cm.lit)
= $nolist
$include (:f1:global.ext)
= $nolist
PL/M-86 COMPILER CODEMACRO MODULE 1 10/5/81 PAGE 2
$eject
/* Subroutines: */
59 1 more$left$on$line: PROC byte;
60 2 if accum(0) <> cr then return true;
62 2 else return false;
63 2 end$proc more$left$on$line;
64 1 modrm$rout: PROC;
65 2 dcl nopar byte;
66 2 if token.type = number then$do
68 3 call put$b(mmodrm1);
69 3 if token.value > 7 then$do
71 4 cm$error=true; /* legal values are 0,1,.. .,7 */
72 4 return;
73 4 else$do
75 4 call put$b(token.value);
76 4 end$if;
77 3 else$do
79 3 if token.type = ident then$do
81 4 if legal$parameter(acclen,.accum(0),.nopar) then$do
83 5 call put$b(mmodrm2);
84 5 call put$b(nopar);
85 5 else$do /* error, parameter mismatch */
87 5 cm$error=true;
88 5 return;
89 5 end$if;
90 4 else$do /* error, expected parameter */
92 4 cm$error=true;
93 4 return;
94 4 end$if;
95 3 end$if;
96 2 call scan;
97 2 if accum(0) <> comma then$do
/* error, expected comma */
99 3 cm$error=true;
100 3 return;
101 3 end$if;
102 2 call scan;
103 2 if token.type = ident then$do
105 3 if legal$parameter(acclen,.accum(0),.nopar) then$do
107 4 call put$b(nopar);
108 4 call scan;
109 4 return;
110 4 else$do /* error, parameter mismatch */
112 4 cm$error=true;
113 4 return;
114 4 end$if;
115 3 else$do /* error, expected parameter */
117 3 cm$error=true;
118 3 return;
119 3 end$if;
120 2 end$proc modrm$rout;
121 1 db$dw$common$rout: PROC(directive);
122 2 dcl (directive,nopar) byte;
PL/M-86 COMPILER CODEMACRO MODULE 1 10/5/81 PAGE 3
123 2 if token.type = number then$do
125 3 call put$b(directive);
126 3 if directive = mdwn then$do
128 4 call put$w(token.value);
129 4 else$do
131 4 if token.value > 0ffh then cm$error=true;
133 4 else call put$b(token.value);
134 4 end$if;
135 3 call scan;
136 3 return;
137 3 else$do
139 3 if token.type = ident then$do
141 4 if legal$parameter(acclen,.accum(0),.nopar) then$do
143 5 call put$b(directive+1);
144 5 call put$b(nopar);
145 5 call scan;
146 5 return;
147 5 else$do /* error, parameter mismatch */
149 5 cm$error=true;
150 5 return;
151 5 end$if;
152 4 else$do /* error, expected parameter */
154 4 cm$error=true;
155 4 return;
156 4 end$if;
157 3 end$if;
158 2 end$proc db$dw$common$rout;
159 1 d$s$rb$rw$rout: PROC(directive);
160 2 dcl (directive,nopar) byte;
161 2 if token.type = ident then$do
163 3 if legal$parameter(acclen,.accum(0),.nopar) then$do
165 4 call put$b(directive);
166 4 call put$b(nopar);
167 4 call scan;
168 4 return;
169 4 else$do /* error, parameter mismatch */
171 4 cm$error=true;
172 4 return;
173 4 end$if;
174 3 else$do /* error, expected parameter */
176 3 cm$error=true;
177 3 return;
178 3 end$if;
179 2 end$proc d$s$rb$rw$rout;
180 1 nosegfix$rout: PROC;
181 2 dcl nopar byte;
182 2 call put$b(mnosegfix);
183 2 do case legal$seg$reg;
184 3 do; /* error, no segment register specified */
185 4 cm$error=true;
186 4 return;
187 4 end;
188 3 call put$b(res);
189 3 call put$b(rcs);
190 3 call put$b(rss);
PL/M-86 COMPILER CODEMACRO MODULE 1 10/5/81 PAGE 4
191 3 call put$b(rds);
192 3 end$case;
193 2 call scan;
194 2 if accum(0) <> comma then$do
/* error, expected comma */
196 3 cm$error=true;
197 3 return;
198 3 end$if;
199 2 call scan; /* skip comma */
200 2 if legal$parameter(acclen,.accum(0),.nopar) then$do
202 3 call put$b(nopar);
203 3 call scan;
204 3 else$do
206 3 cm$error=true;
207 3 return;
208 3 end$if;
209 2 end$proc nosegfix$rout;
210 1 dbit$rout: PROC;
211 2 call put$b(mdbit);
212 2 end$proc dbit$rout;
213 1 field$descr$rout: PROC;
214 2 dcl nopar byte,cm$b$var based cmpt byte;
215 2 do forever;
216 3 if token.type <> number or token.value > 0fh then$do
/* error, expected numberdef. */
218 4 cm$error=true;
219 4 return;
220 4 end$if;
221 3 call put$b(mnumberbits);
222 3 call put$b(token.value);
223 3 call scan;
224 3 if accum(0) <> leftpar then$do
/* error, expected left paranthesis */
226 4 cm$error=true;
227 4 return;
228 4 end$if;
229 3 call scan; /* skip left paranthesis */
230 3 if token.type = ident then$do
232 4 if not legal$parameter(acclen,.accum(0),.nopar) then$do
/* error, parameter mismatch */
234 5 cm$error=true;
235 5 return;
236 5 end$if;
237 4 cmpt=cmpt-2;
238 4 cm$b$var=cm$b$var-1; /* it was a parameter, not a number */
239 4 cmpt=cmpt+2;
240 4 call put$b(nopar);
241 4 call scan;
242 4 if accum(0) <> leftpar then$do
/* error, expected left paranthesis */
244 5 cm$error=true;
245 5 return;
246 5 end$if;
247 4 call scan; /* skip left paranthesis */
248 4 end$if;
PL/M-86 COMPILER CODEMACRO MODULE 1 10/5/81 PAGE 5
249 3 if token.type <> number or token.value > 0ffh then$do
/* error, expected numberdef.(byte) or parameter */
251 4 cm$error=true;
252 4 return;
253 4 end$if;
254 3 call put$b(token.value);
255 3 call scan;
256 3 if accum(0) <> rightpar then$do
/* error,expected right paranthesis */
258 4 cm$error=true;
259 4 return;
260 4 end$if;
261 3 call scan; /* skip right paranthesis */
262 3 cmpt=cmpt-4;
263 3 if cm$b$var = mformalbits and
accum(0) = rightpar then call scan;
265 3 cmpt=cmpt+4;
266 3 if accum(0) <> comma then return;
268 3 call scan;
269 3 end$forever;
270 2 end$proc field$descr$rout;
271 1 enddbit$rout: PROC;
272 2 call put$b(mendbit);
273 2 end$proc enddbit$rout;
274 1 endm$rout: PROC;
275 2 call put$b(mendm);
276 2 end$proc endm$rout;
PL/M-86 COMPILER CODEMACRO MODULE 1 10/5/81 PAGE 6
$eject
/* level 1 in the syntax-tree of codemacrobuilding */
277 1 COMMON$CM$ROUT: PROC (TYPE);
278 2 DECLARE TYPE BYTE;
279 2 if pass = 1 then$do
281 3 call skip$rest$of$line;
282 3 return;
283 3 end$if;
284 2 cm$error=false;
285 2 if not codemacro$flag then$do
/* error, codemacro directive outside codemacrobodydef. */
287 3 cm$error=true;
288 3 end$if;
289 2 DO CASE TYPE;
290 3 call db$dw$common$rout(mdbn);
291 3 call db$dw$common$rout(mdwn);
292 3 call d$s$rb$rw$rout(mddf);
293 3 call d$s$rb$rw$rout(msegfix);
294 3 call nosegfix$rout;
295 3 call modrm$rout;
296 3 call d$s$rb$rw$rout(mrelb);
297 3 call d$s$rb$rw$rout(mrelw);
298 3 DO;
299 4 call dbit$rout;
300 4 call field$descr$rout;
301 4 call enddbit$rout;
302 4 END;
303 3 END$CASE;
304 2 if cm$error or more$left$on$line then$do
/* error */
306 3 global$cm$error=true;
307 3 call errmsg(codemacroerr);
308 3 end$if;
309 2 call skip$rest$of$line;
310 2 END COMMON$CM$ROUT;
311 1 codemacro$rout: PROC public;
312 2 if pass = 1 then$do
314 3 codemacro$flag=true;
315 3 call skip$rest$of$line;
316 3 return;
317 3 end$if;
318 2 cm$error=false;
319 2 global$cm$error=false;
320 2 if codemacro$flag then$do
/* error, nested codemacrodefinition */
322 3 cm$error=true;
323 3 end$if;
324 2 call init$cm$rout; /* clearing all temp. working storages */
325 2 codemacro$flag=true;
326 2 if not name$rout then$do
/* error, expected codemacroname */
328 3 cm$error=true;
329 3 end$if;
330 2 call formal$list$rout;
PL/M-86 COMPILER CODEMACRO MODULE 1 10/5/81 PAGE 7
331 2 if cm$error or more$left$on$line$ then$do
/* error */
333 3 global$cm$error=true;
334 3 call errmsg(codemacroerr);
335 3 end$if;
336 2 call skip$rest$of$line;
337 2 end$proc codemacro$rout;
338 1 db$cm$rout: PROC public;
339 2 CALL COMMON$CM$ROUT (0);
340 2 end$proc db$cm$rout;
341 1 dw$cm$rout: PROC public;
342 2 CALL COMMON$CM$ROUT (1);
343 2 end$proc dw$cm$rout;
344 1 dd$cm$rout: PROC public;
345 2 CALL COMMON$CM$ROUT (2);
346 2 end$proc dd$cm$rout;
347 1 segfix$cm$rout: PROC public;
348 2 CALL COMMON$CM$ROUT (3);
349 2 end$proc segfix$cm$rout;
350 1 nosegfix$cm$rout: PROC public;
351 2 CALL COMMON$CM$ROUT (4);
352 2 end$proc nosegfix$cm$rout;
353 1 modrm$cm$rout: PROC public;
354 2 CALL COMMON$CM$ROUT (5);
355 2 end$proc modrm$cm$rout;
356 1 relb$cm$rout: PROC public;
357 2 CALL COMMON$CM$ROUT (6);
358 2 end$proc relb$cm$rout;
359 1 relw$cm$rout: PROC public;
360 2 CALL COMMON$CM$ROUT (7);
361 2 end$proc relw$cm$rout;
362 1 dbit$cm$rout: PROC public;
363 2 CALL COMMON$CM$ROUT (8);
364 2 end$proc dbit$cm$rout;
365 1 end$cm$rout: PROC public;
366 2 if pass = 1 then$do
368 3 call skip$rest$of$line;
369 3 codemacro$flag=false;
370 3 return;
371 3 end$if;
372 2 cm$error=false;
373 2 if not codemacro$flag then$do
/* error, terminating a not yet started codemacro */
375 3 cm$error=true;
376 3 end$if;
377 2 call endm$rout;
378 2 if pass = 0 then call terminate$cm$rout;
PL/M-86 COMPILER CODEMACRO MODULE 1 10/5/81 PAGE 8
380 2 if cm$error or more$left$on$line or cm$list$overflow then$do
/* error */
382 3 call errmsg(codemacroerr);
383 3 end$if;
384 2 call skip$rest$of$line;
385 2 global$cm$error=false;
386 2 codemacro$flag=false;
387 2 end$proc end$cm$rout;
388 1 end$module cm1;
PL/M-86 COMPILER CODEMACRO MODULE 1 10/5/81 PAGE 9
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
56 0000H 4 ABSADDR. . . . . . BYTE ARRAY(4) EXTERNAL(51)
56 0000H 1 ACCLEN . . . . . . BYTE EXTERNAL(55) 81 105 141 163 200
232
56 0000H 1 ACCLENSAVE . . . . BYTE EXTERNAL(58)
56 0000H 80 ACCUM. . . . . . . BYTE ARRAY(80) EXTERNAL(56) 60 81 97
105 141 163 194 200 224 232 242 256 263
266
56 0000H 80 ACCUMSAVE. . . . . BYTE ARRAY(80) EXTERNAL(57)
2 ADDR . . . . . . . LITERALLY 56
49 0000H 1 B. . . . . . . . . BYTE PARAMETER 50
56 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPERANDS)
56 0008H 1 BASEINDEX. . . . . BYTE MEMBER(CURRENTSYMBOL)
8 BASEREGBIT . . . . LITERALLY
8 BASEREGCOUNT . . . LITERALLY
8 BREGBIT. . . . . . LITERALLY
8 BREGCOUNT. . . . . LITERALLY
4 BYT. . . . . . . . LITERALLY
56 0000H 2 CIP. . . . . . . . WORD EXTERNAL(20)
1 0000H CM1. . . . . . . . PROCEDURE STACK=0000H
214 0000H 1 CMBVAR . . . . . . BYTE BASED(CMPT) 238 263
35 0000H 1 CMERROR. . . . . . BYTE EXTERNAL(7) 71 87 92 99 112
117 132 149 154 171 176 185 196 206 218
226 234 244 251 258 284 287 304 318 322
328 331 372 375 380
35 0000H 1 CMLISTOVERFLOW . . BYTE EXTERNAL(9) 380
35 0000H 2 CMPT . . . . . . . WORD EXTERNAL(10) 214 237 238 239 262
263 265
3 CODE . . . . . . . LITERALLY
17 CODEMACROERR . . . LITERALLY 307 334 382
56 0000H 1 CODEMACROFLAG. . . BYTE EXTERNAL(77) 285 314 320 325 369
373 386
8 CODEMACROHEAD. . . LITERALLY
56 0000H 2 CODEMACROPTR . . . WORD EXTERNAL(72)
311 0313H 91 CODEMACROROUT. . . PROCEDURE PUBLIC STACK=0006H
55 COLON. . . . . . . LITERALLY
55 COMMA. . . . . . . LITERALLY 97 194 266
277 0286H 141 COMMONCMROUT . . . PROCEDURE STACK=0012H 339 342 345 348
351 354 357 360 363
2 CR . . . . . . . . LITERALLY 60
56 0000H 2 CSCIP. . . . . . . WORD EXTERNAL(25)
56 0000H 1 CSEGSPEC . . . . . BYTE EXTERNAL(23)
56 0000H 1 CSEGTYPE . . . . . BYTE EXTERNAL(21)
56 0000H 2 CSEGVALUE. . . . . WORD EXTERNAL(22)
12 CSOVER . . . . . . LITERALLY
56 0000H 1 CSPEC. . . . . . . BYTE EXTERNAL(32)
56 0000H 2 CURCSEG. . . . . . WORD EXTERNAL(28)
56 0000H 2 CURDSEG. . . . . . WORD EXTERNAL(29)
56 0000H 2 CURESEG. . . . . . WORD EXTERNAL(31)
56 0000H 9 CURRENTSYMBOL. . . STRUCTURE EXTERNAL(68)
PL/M-86 COMPILER CODEMACRO MODULE 1 10/5/81 PAGE 10
56 0000H 2 CURSSEG. . . . . . WORD EXTERNAL(30)
338 036EH 11 DBCMROUT . . . . . PROCEDURE PUBLIC STACK=0016H
121 0092H 108 DBDWCOMMONROUT . . PROCEDURE STACK=000CH 290 291
362 03C6H 11 DBITCMROUT . . . . PROCEDURE PUBLIC STACK=0016H
210 019EH 11 DBITROUT . . . . . PROCEDURE STACK=0006H 299
2 DCL. . . . . . . . LITERALLY
344 0384H 11 DDCMROUT . . . . . PROCEDURE PUBLIC STACK=0016H
56 0000H 1 DEFAULTDRIVE . . . BYTE EXTERNAL(75)
3 DELETEDSYMB. . . . LITERALLY
56 0001H 1 DESCR. . . . . . . BYTE MEMBER(TOKEN)
121 0004H 1 DIRECTIVE. . . . . BYTE PARAMETER AUTOMATIC 122 125 126 143
159 0004H 1 DIRECTIVE. . . . . BYTE PARAMETER AUTOMATIC 160 165
3 DOUBLEDEFINED. . . LITERALLY
17 DOUBLEDEFLAB . . . LITERALLY
17 DOUBLEDEFSYMB. . . LITERALLY
17 DOUBLEDEFVAR . . . LITERALLY
16 DOUBLERANGE. . . . LITERALLY
56 0000H 2 DSCIP. . . . . . . WORD EXTERNAL(27)
12 DSOVER . . . . . . LITERALLY
56 0000H 1 DSPEC. . . . . . . BYTE EXTERNAL(33)
159 00FEH 56 DSRBRWROUT . . . . PROCEDURE STACK=000CH 292 293 296 297
341 0379H 11 DWCMROUT . . . . . PROCEDURE PUBLIC STACK=0016H
4 DWRD . . . . . . . LITERALLY
2 ELSEDO . . . . . . LITERALLY
30 0000H EMPTYLINE. . . . . PROCEDURE BYTE EXTERNAL(5) STACK=0000H
2 ENDCASE. . . . . . LITERALLY
365 03D1H 83 ENDCMROUT. . . . . PROCEDURE PUBLIC STACK=000AH
271 0270H 11 ENDDBITROUT. . . . PROCEDURE STACK=0006H 301
2 ENDDO. . . . . . . LITERALLY
2 ENDFOREVER . . . . LITERALLY
2 ENDIF. . . . . . . LITERALLY
2 ENDMODULE. . . . . LITERALLY
274 027BH 11 ENDMROUT . . . . . PROCEDURE STACK=0006H 377
2 ENDOFFILE. . . . . LITERALLY
17 ENDOFLINEERR . . . LITERALLY
2 ENDPROC. . . . . . LITERALLY
2 ENDWHILE . . . . . LITERALLY
56 0000H 1 EOFSET . . . . . . BYTE EXTERNAL(59)
32 0000H ERRMSG . . . . . . PROCEDURE EXTERNAL(6) STACK=0000H 307 334
382
32 0000H 1 ERRNO. . . . . . . BYTE PARAMETER 33
3 ERROR. . . . . . . LITERALLY
56 0000H 1 ERRORPRINTED . . . BYTE EXTERNAL(62)
56 0000H 2 ERRORS . . . . . . WORD EXTERNAL(52)
56 0000H 2 ESCIP. . . . . . . WORD EXTERNAL(24)
12 ESOVER . . . . . . LITERALLY
56 0000H 1 ESPEC. . . . . . . BYTE EXTERNAL(35)
2 FALSE. . . . . . . LITERALLY 62 284 318 319 369 372 385
386
213 01A9H 199 FIELDDESCRROUT . . PROCEDURE STACK=000AH 300
8 FILEISTRUCTURE . . LITERALLY
8 FILEOSTRUCTURE . . LITERALLY
17 FILESYNTERR. . . . LITERALLY
55 FIRST. . . . . . . LITERALLY
17 FIRSTITEM. . . . . LITERALLY
56 0000H 2 FIRSTMACROPTR. . . WORD EXTERNAL(63)
2 FOREVER. . . . . . LITERALLY 215
PL/M-86 COMPILER CODEMACRO MODULE 1 10/5/81 PAGE 11
40 0000H FORMALLISTROUT . . PROCEDURE EXTERNAL(13) STACK=0000H 330
2 FORMFEED . . . . . LITERALLY
56 0000H 1 FULLSYMBTAB. . . . BYTE EXTERNAL(65)
35 0000H 1 GLOBALCMERROR. . . BYTE EXTERNAL(8) 306 319 333 385
57 0000H GLOBALINIT . . . . PROCEDURE EXTERNAL(78) STACK=0000H
56 0000H 5 HELP . . . . . . . BYTE ARRAY(5) EXTERNAL(73)
56 0000H 1 I. . . . . . . . . BYTE EXTERNAL(74)
3 IDENT. . . . . . . LITERALLY 79 103 139 161 230
56 0000H 1 IFLEVEL. . . . . . BYTE EXTERNAL(67)
56 0000H 1 IFLIST . . . . . . BYTE EXTERNAL(38)
17 IFPARERR . . . . . LITERALLY
17 ILLEGALMACRO . . . LITERALLY
17 ILLEGALPSEUDO. . . LITERALLY
17 ILLEXPRELEM. . . . LITERALLY
17 ILLIOPER . . . . . LITERALLY
56 0000H 1 INCLUDEDEFAULT . . BYTE EXTERNAL(76)
56 0000H 1 INCLUDEON. . . . . BYTE EXTERNAL(66)
8 INDEXREGBIT. . . . LITERALLY
8 INDEXREGCOUNT. . . LITERALLY
2 INIT . . . . . . . LITERALLY
36 0000H INITCMROUT . . . . PROCEDURE EXTERNAL(11) STACK=0000H 324
17 INSTRERR . . . . . LITERALLY
56 0000H 1 INTELHEXON . . . . BYTE EXTERNAL(60)
8 IREGBIT. . . . . . LITERALLY
8 IREGCOUNT. . . . . LITERALLY
3 LAB. . . . . . . . LITERALLY
17 LABOUTOFRANGE. . . LITERALLY
7 LEFTBRACKET. . . . LITERALLY
55 LEFTPAR. . . . . . LITERALLY 224 242
44 0000H LEGALPARAMETER . . PROCEDURE BYTE EXTERNAL(15) STACK=0000H 81
105 141 163 200 232
47 0000H LEGALSEGREG. . . . PROCEDURE BYTE EXTERNAL(16) STACK=0000H 183
56 0000H 2 LENGTH . . . . . . WORD MEMBER(CURRENTSYMBOL)
56 0000H 2 LENGTH . . . . . . WORD MEMBER(OPERANDS)
2 LF . . . . . . . . LITERALLY
44 0000H 1 LG . . . . . . . . BYTE PARAMETER 45
2 LIT. . . . . . . . LITERALLY 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16 17 55
56 0000H 2 MACROPTR . . . . . WORD EXTERNAL(64)
56 0000H 1 MAXCOL . . . . . . BYTE EXTERNAL(39)
9 MDBF . . . . . . . LITERALLY
9 MDBIT. . . . . . . LITERALLY 211
9 MDBN . . . . . . . LITERALLY 290
9 MDDF . . . . . . . LITERALLY 292
9 MDWF . . . . . . . LITERALLY
9 MDWN . . . . . . . LITERALLY 126 291
9 MENDBIT. . . . . . LITERALLY 272
9 MENDM. . . . . . . LITERALLY 275
9 MFORMALBITS. . . . LITERALLY 263
17 MISSIFERR. . . . . LITERALLY
17 MISSINGPSEUDO. . . LITERALLY
17 MISSINSTR. . . . . LITERALLY
17 MISSSEGMINFO . . . LITERALLY
17 MISSTYPEINFO . . . LITERALLY
9 MMODRM1. . . . . . LITERALLY 68
9 MMODRM2. . . . . . LITERALLY 83
PL/M-86 COMPILER CODEMACRO MODULE 1 10/5/81 PAGE 12
9 MNOSEGFIX. . . . . LITERALLY 182
9 MNUMBERBITS. . . . LITERALLY 221
11 MODB . . . . . . . LITERALLY
11 MODD . . . . . . . LITERALLY
15 MODLETTERBIT . . . LITERALLY
15 MODLETTERCOUNT . . LITERALLY
353 03A5H 11 MODRMCMROUT. . . . PROCEDURE PUBLIC STACK=0016H
64 0012H 128 MODRMROUT. . . . . PROCEDURE STACK=000AH 295
11 MODSB. . . . . . . LITERALLY
11 MODW . . . . . . . LITERALLY
59 0000H 18 MORELEFTONLINE . . PROCEDURE BYTE STACK=0002H 304 331 380
9 MRELB. . . . . . . LITERALLY 296
9 MRELW. . . . . . . LITERALLY 297
9 MSEGFIX. . . . . . LITERALLY 293
38 0000H NAMEROUT . . . . . PROCEDURE BYTE EXTERNAL(12) STACK=0000H 326
3 NEGLECTED. . . . . LITERALLY
17 NEGLECTERR . . . . LITERALLY
17 NESTEDIFERR. . . . LITERALLY
17 NESTEDINCLUDEERR . LITERALLY
56 0000H 1 NEXTCH . . . . . . BYTE EXTERNAL(54)
4 NIL. . . . . . . . LITERALLY
56 0000H 1 NOERROR. . . . . . BYTE EXTERNAL(61)
11 NOMOD. . . . . . . LITERALLY
56 0000H 1 NOOPER . . . . . . BYTE EXTERNAL(70)
8 NOOVERCOUNT. . . . LITERALLY
8 NOOVERRIDEBIT. . . LITERALLY
214 0004H 1 NOPAR. . . . . . . BYTE 232 240
181 0003H 1 NOPAR. . . . . . . BYTE 200 202
160 0002H 1 NOPAR. . . . . . . BYTE 163 166
122 0001H 1 NOPAR. . . . . . . BYTE 141 144
65 0000H 1 NOPAR. . . . . . . BYTE 81 84 105 107
13 NOPARAND . . . . . LITERALLY
16 NORANGE. . . . . . LITERALLY
350 039AH 11 NOSEGFIXCMROUT . . PROCEDURE PUBLIC STACK=0016H
180 0136H 104 NOSEGFIXROUT . . . PROCEDURE STACK=000AH 294
3 NUMBER . . . . . . LITERALLY 66 123 216 249
16 NUMBERRANGE. . . . LITERALLY
7 OAND . . . . . . . LITERALLY
7 OEQ. . . . . . . . LITERALLY
56 0006H 2 OFFSET . . . . . . WORD MEMBER(OPERANDS)
56 0006H 2 OFFSET . . . . . . WORD MEMBER(CURRENTSYMBOL)
7 OGE. . . . . . . . LITERALLY
7 OGT. . . . . . . . LITERALLY
7 OLAST. . . . . . . LITERALLY
7 OLE. . . . . . . . LITERALLY
7 OLENGTH. . . . . . LITERALLY
7 OLT. . . . . . . . LITERALLY
7 OMOD . . . . . . . LITERALLY
7 ONE. . . . . . . . LITERALLY
7 ONOT . . . . . . . LITERALLY
7 OOFFSET. . . . . . LITERALLY
7 OOR. . . . . . . . LITERALLY
56 0000H 36 OPERANDS . . . . . STRUCTURE ARRAY(4) EXTERNAL(71)
8 OPERANDSTRUC . . . LITERALLY 56
3 OPERATOR . . . . . LITERALLY
17 OPMISMATCH . . . . LITERALLY
7 OPTR . . . . . . . LITERALLY
PL/M-86 COMPILER CODEMACRO MODULE 1 10/5/81 PAGE 13
7 OSEG . . . . . . . LITERALLY
7 OSHL . . . . . . . LITERALLY
7 OSHORT . . . . . . LITERALLY
7 OSHR . . . . . . . LITERALLY
7 OTYPE. . . . . . . LITERALLY
7 OXOR . . . . . . . LITERALLY
56 0000H 1 PAGESIZE . . . . . BYTE EXTERNAL(45)
56 0000H 1 PASS . . . . . . . BYTE EXTERNAL(19) 279 312 366 378
6 PCODEMACRO . . . . LITERALLY
6 PCSEG. . . . . . . LITERALLY
6 PDB. . . . . . . . LITERALLY
6 PDBIT. . . . . . . LITERALLY
6 PDD. . . . . . . . LITERALLY
6 PDSEG. . . . . . . LITERALLY
6 PDW. . . . . . . . LITERALLY
6 PEJECT . . . . . . LITERALLY
6 PEND . . . . . . . LITERALLY
6 PENDIF . . . . . . LITERALLY
6 PENDM. . . . . . . LITERALLY
6 PEQU . . . . . . . LITERALLY
6 PESEG. . . . . . . LITERALLY
6 PIF. . . . . . . . LITERALLY
6 PIFLIST. . . . . . LITERALLY
6 PINCLUDE . . . . . LITERALLY
6 PLIST. . . . . . . LITERALLY
6 PMODRM . . . . . . LITERALLY
6 PNOIFLIST. . . . . LITERALLY
6 PNOLIST. . . . . . LITERALLY
6 PNOSEGFIX. . . . . LITERALLY
6 PORG . . . . . . . LITERALLY
6 PPAGESIZE. . . . . LITERALLY
6 PPAGEWIDTH . . . . LITERALLY
6 PRB. . . . . . . . LITERALLY
56 0000H 240 PREFIX . . . . . . BYTE ARRAY(240) EXTERNAL(49)
13 PREFIXAND. . . . . LITERALLY
14 PREFIXON . . . . . LITERALLY
56 0000H 1 PREFIXPTR. . . . . BYTE EXTERNAL(50)
6 PRELB. . . . . . . LITERALLY
6 PRELW. . . . . . . LITERALLY
56 0000H 1 PRINTDEVICE. . . . BYTE EXTERNAL(42)
56 0000H 1 PRINTON. . . . . . BYTE EXTERNAL(36)
56 0000H 1 PRINTSWITCHOFF . . BYTE EXTERNAL(37)
2 PROC . . . . . . . LITERALLY 18 20 22 24 27 30 32
36 38 40 42 44 47 49 52 59 64
121 159 180 210 213 271 274 277 311 338
341 344 347 350 353 356 359 362 365
6 PRS. . . . . . . . LITERALLY
6 PRW. . . . . . . . LITERALLY
6 PSEGFIX. . . . . . LITERALLY
3 PSEUDO . . . . . . LITERALLY
17 PSEUDOOPERR. . . . LITERALLY
6 PSIMFORM . . . . . LITERALLY
6 PSSEG. . . . . . . LITERALLY
6 PTITLE . . . . . . LITERALLY
44 0000H 2 PTR. . . . . . . . WORD PARAMETER 45
44 0000H 2 PTR2 . . . . . . . WORD PARAMETER 45
49 0000H PUTB . . . . . . . PROCEDURE EXTERNAL(17) STACK=0000H 68 75
PL/M-86 COMPILER CODEMACRO MODULE 1 10/5/81 PAGE 14
83 84 107 125 133 143 144 165 166 182
188 189 190 191 202 211 221 222 240 254
272 275
52 0000H PUTW . . . . . . . PROCEDURE EXTERNAL(18) STACK=0000H 128
5 RAH. . . . . . . . LITERALLY
5 RAL. . . . . . . . LITERALLY
16 RANGEAND . . . . . LITERALLY
15 RANGESPECBIT . . . LITERALLY
15 RANGESPECCOUNT . . LITERALLY
16 RANGETYPEAND . . . LITERALLY
5 RAX. . . . . . . . LITERALLY
5 RBH. . . . . . . . LITERALLY
5 RBL. . . . . . . . LITERALLY
5 RBP. . . . . . . . LITERALLY
5 RBX. . . . . . . . LITERALLY
5 RCH. . . . . . . . LITERALLY
5 RCL. . . . . . . . LITERALLY
5 RCS. . . . . . . . LITERALLY 189
5 RCX. . . . . . . . LITERALLY
5 RDH. . . . . . . . LITERALLY
5 RDI. . . . . . . . LITERALLY
5 RDL. . . . . . . . LITERALLY
5 RDS. . . . . . . . LITERALLY 191
5 RDX. . . . . . . . LITERALLY
2 REENT. . . . . . . LITERALLY
3 REG. . . . . . . . LITERALLY
16 REGISTERRANGE. . . LITERALLY
356 03B0H 11 RELBCMROUT . . . . PROCEDURE PUBLIC STACK=0016H
359 03BBH 11 RELWCMROUT . . . . PROCEDURE PUBLIC STACK=0016H
5 RES. . . . . . . . LITERALLY 188
7 RIGHTBRACKET . . . LITERALLY
55 RIGHTPAR . . . . . LITERALLY 256 263
5 RSI. . . . . . . . LITERALLY
5 RSP. . . . . . . . LITERALLY
5 RSS. . . . . . . . LITERALLY 190
56 0000H 12 SAVESOURCE . . . . BYTE ARRAY(12) EXTERNAL(41)
20 0000H SCAN . . . . . . . PROCEDURE EXTERNAL(1) STACK=0000H 96 102
108 135 145 167 193 199 203 223 229 241
247 255 261 264 268
18 0000H SCANINIT . . . . . PROCEDURE EXTERNAL(0) STACK=0000H
55 SECOND . . . . . . LITERALLY
347 038FH 11 SEGFIXCMROUT . . . PROCEDURE PUBLIC STACK=0016H
8 SEGMBIT. . . . . . LITERALLY
8 SEGMCOUNT. . . . . LITERALLY
56 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPERANDS)
56 0004H 2 SEGMENT. . . . . . WORD MEMBER(CURRENTSYMBOL)
8 SEGTYPEBIT . . . . LITERALLY
8 SEGTYPECOUNT . . . LITERALLY
56 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPERANDS)
56 0003H 1 SFLAG. . . . . . . BYTE MEMBER(CURRENTSYMBOL)
56 0000H 1 SIMFORM. . . . . . BYTE EXTERNAL(46)
16 SINGLERANGE. . . . LITERALLY
22 0000H SKIPRESTOFLINE . . PROCEDURE EXTERNAL(2) STACK=0000H 281 309
315 336 368 384
27 0000H SKIPUNTIL. . . . . PROCEDURE BYTE EXTERNAL(4) STACK=0000H
56 0000H 80 SOURCEBUF. . . . . BYTE ARRAY(80) EXTERNAL(47)
56 0000H 12 SOURCENAME . . . . BYTE ARRAY(12) EXTERNAL(40)
PL/M-86 COMPILER CODEMACRO MODULE 1 10/5/81 PAGE 15
56 0000H 1 SOURCEPTR. . . . . BYTE EXTERNAL(48)
2 SPACE. . . . . . . LITERALLY
3 SPEC . . . . . . . LITERALLY
10 SPECA. . . . . . . LITERALLY
10 SPECC. . . . . . . LITERALLY
10 SPECD. . . . . . . LITERALLY
10 SPECE. . . . . . . LITERALLY
24 0000H SPECIALTOKEN . . . PROCEDURE BYTE EXTERNAL(3) STACK=0000H
10 SPECM. . . . . . . LITERALLY
10 SPECR. . . . . . . LITERALLY
10 SPECS. . . . . . . LITERALLY
10 SPECX. . . . . . . LITERALLY
56 0000H 2 SSCIP. . . . . . . WORD EXTERNAL(26)
12 SSOVER . . . . . . LITERALLY
56 0000H 1 SSPEC. . . . . . . BYTE EXTERNAL(34)
3 STRING . . . . . . LITERALLY
2 STRUC. . . . . . . LITERALLY 56
56 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPERANDS)
56 0002H 1 STYPE. . . . . . . BYTE MEMBER(CURRENTSYMBOL)
3 SYMBOL . . . . . . LITERALLY
56 0000H 1 SYMBOLDEVICE . . . BYTE EXTERNAL(43)
8 SYMBOLHEAD . . . . LITERALLY
8 SYMBOLSTRUC. . . . LITERALLY 56
56 0000H 2 SYMBTABADR . . . . WORD EXTERNAL(69)
2 TAB. . . . . . . . LITERALLY
42 0000H TERMINATECMROUT. . PROCEDURE EXTERNAL(14) STACK=0000H 379
2 THENDO . . . . . . LITERALLY 66 69 79 81 97 103 105
123 126 139 141 161 163 194 200 216 224
230 232 242 249 256 279 285 304 312 320
326 331 366 373 380
56 0000H 30 TITLE. . . . . . . BYTE ARRAY(30) EXTERNAL(44)
27 0000H 1 TOK. . . . . . . . BYTE PARAMETER 28
24 0000H 1 TOK. . . . . . . . BYTE PARAMETER 25
56 0000H 4 TOKEN. . . . . . . STRUCTURE EXTERNAL(53) 66 69 75 79
103 123 128 131 133 139 161 216 222 230
249 254
2 TRUE . . . . . . . LITERALLY 61 71 87 92 99 112 117
132 149 154 171 176 185 196 206 215 218
226 234 244 251 258 287 306 314 322 325
328 333 375
277 0004H 1 TYPE . . . . . . . BYTE PARAMETER AUTOMATIC 278 289
56 0000H 1 TYPE . . . . . . . BYTE MEMBER(TOKEN) 66 79 103 123 139
161 216 230 249
8 TYPEBIT. . . . . . LITERALLY
8 TYPECOUNT. . . . . LITERALLY
3 UDEFSYMB . . . . . LITERALLY
17 UDEFSYMBOL . . . . LITERALLY
56 0002H 2 VALUE. . . . . . . WORD MEMBER(TOKEN) 69 75 128 131 133
216 222 249 254
3 VARIABLE . . . . . LITERALLY
52 0000H 2 W. . . . . . . . . WORD PARAMETER 53
4 WRD. . . . . . . . LITERALLY
MODULE INFORMATION:
PL/M-86 COMPILER CODEMACRO MODULE 1 10/5/81 PAGE 16
CODE AREA SIZE = 0424H 1060D
CONSTANT AREA SIZE = 0000H 0D
VARIABLE AREA SIZE = 0005H 5D
MAXIMUM STACK SIZE = 0016H 22D
936 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,350 @@
$title ('codemacro module 1')
cm1:
do;
/*
modified 7/24/81 R. Silberstein
*/
/* This is the module to build new instructions
which is not present in the already existing
system. */
$include (:f1:macro.lit)
$include (:f1:equals.lit)
$include (:f1:struc.lit)
$include (:f1:cmacd.lit)
$include (:f1:ermod.lit)
$include (:f1:scan.ext)
$include (:f1:ermod.ext)
$include (:f1:cm2.ext)
$include (:f1:cm.lit)
$include (:f1:global.ext)
$eject
/* Subroutines: */
more$left$on$line: PROC byte;
if accum(0) <> cr then return true;
else return false;
end$proc more$left$on$line;
modrm$rout: PROC;
dcl nopar byte;
if token.type = number then$do
call put$b(mmodrm1);
if token.value > 7 then$do
cm$error=true; /* legal values are 0,1,.. .,7 */
return;
else$do
call put$b(token.value);
end$if;
else$do
if token.type = ident then$do
if legal$parameter(acclen,.accum(0),.nopar) then$do
call put$b(mmodrm2);
call put$b(nopar);
else$do /* error, parameter mismatch */
cm$error=true;
return;
end$if;
else$do /* error, expected parameter */
cm$error=true;
return;
end$if;
end$if;
call scan;
if accum(0) <> comma then$do
/* error, expected comma */
cm$error=true;
return;
end$if;
call scan;
if token.type = ident then$do
if legal$parameter(acclen,.accum(0),.nopar) then$do
call put$b(nopar);
call scan;
return;
else$do /* error, parameter mismatch */
cm$error=true;
return;
end$if;
else$do /* error, expected parameter */
cm$error=true;
return;
end$if;
end$proc modrm$rout;
db$dw$common$rout: PROC(directive);
dcl (directive,nopar) byte;
if token.type = number then$do
call put$b(directive);
if directive = mdwn then$do
call put$w(token.value);
else$do
if token.value > 0ffh then cm$error=true;
else call put$b(token.value);
end$if;
call scan;
return;
else$do
if token.type = ident then$do
if legal$parameter(acclen,.accum(0),.nopar) then$do
call put$b(directive+1);
call put$b(nopar);
call scan;
return;
else$do /* error, parameter mismatch */
cm$error=true;
return;
end$if;
else$do /* error, expected parameter */
cm$error=true;
return;
end$if;
end$if;
end$proc db$dw$common$rout;
d$s$rb$rw$rout: PROC(directive);
dcl (directive,nopar) byte;
if token.type = ident then$do
if legal$parameter(acclen,.accum(0),.nopar) then$do
call put$b(directive);
call put$b(nopar);
call scan;
return;
else$do /* error, parameter mismatch */
cm$error=true;
return;
end$if;
else$do /* error, expected parameter */
cm$error=true;
return;
end$if;
end$proc d$s$rb$rw$rout;
nosegfix$rout: PROC;
dcl nopar byte;
call put$b(mnosegfix);
do case legal$seg$reg;
do; /* error, no segment register specified */
cm$error=true;
return;
end;
call put$b(res);
call put$b(rcs);
call put$b(rss);
call put$b(rds);
end$case;
call scan;
if accum(0) <> comma then$do
/* error, expected comma */
cm$error=true;
return;
end$if;
call scan; /* skip comma */
if legal$parameter(acclen,.accum(0),.nopar) then$do
call put$b(nopar);
call scan;
else$do
cm$error=true;
return;
end$if;
end$proc nosegfix$rout;
dbit$rout: PROC;
call put$b(mdbit);
end$proc dbit$rout;
field$descr$rout: PROC;
dcl nopar byte,cm$b$var based cmpt byte;
do forever;
if token.type <> number or token.value > 0fh then$do
/* error, expected numberdef. */
cm$error=true;
return;
end$if;
call put$b(mnumberbits);
call put$b(token.value);
call scan;
if accum(0) <> leftpar then$do
/* error, expected left paranthesis */
cm$error=true;
return;
end$if;
call scan; /* skip left paranthesis */
if token.type = ident then$do
if not legal$parameter(acclen,.accum(0),.nopar) then$do
/* error, parameter mismatch */
cm$error=true;
return;
end$if;
cmpt=cmpt-2;
cm$b$var=cm$b$var-1; /* it was a parameter, not a number */
cmpt=cmpt+2;
call put$b(nopar);
call scan;
if accum(0) <> leftpar then$do
/* error, expected left paranthesis */
cm$error=true;
return;
end$if;
call scan; /* skip left paranthesis */
end$if;
if token.type <> number or token.value > 0ffh then$do
/* error, expected numberdef.(byte) or parameter */
cm$error=true;
return;
end$if;
call put$b(token.value);
call scan;
if accum(0) <> rightpar then$do
/* error,expected right paranthesis */
cm$error=true;
return;
end$if;
call scan; /* skip right paranthesis */
cmpt=cmpt-4;
if cm$b$var = mformalbits and
accum(0) = rightpar then call scan;
cmpt=cmpt+4;
if accum(0) <> comma then return;
call scan;
end$forever;
end$proc field$descr$rout;
enddbit$rout: PROC;
call put$b(mendbit);
end$proc enddbit$rout;
endm$rout: PROC;
call put$b(mendm);
end$proc endm$rout;
$eject
/* level 1 in the syntax-tree of codemacrobuilding */
COMMON$CM$ROUT: PROC (TYPE);
DECLARE TYPE BYTE;
if pass = 1 then$do
call skip$rest$of$line;
return;
end$if;
cm$error=false;
if not codemacro$flag then$do
/* error, codemacro directive outside codemacrobodydef. */
cm$error=true;
end$if;
DO CASE TYPE;
call db$dw$common$rout(mdbn);
call db$dw$common$rout(mdwn);
call d$s$rb$rw$rout(mddf);
call d$s$rb$rw$rout(msegfix);
call nosegfix$rout;
call modrm$rout;
call d$s$rb$rw$rout(mrelb);
call d$s$rb$rw$rout(mrelw);
DO;
call dbit$rout;
call field$descr$rout;
call enddbit$rout;
END;
END$CASE;
if cm$error or more$left$on$line then$do
/* error */
global$cm$error=true;
call errmsg(codemacroerr);
end$if;
call skip$rest$of$line;
END COMMON$CM$ROUT;
codemacro$rout: PROC public;
if pass = 1 then$do
codemacro$flag=true;
call skip$rest$of$line;
return;
end$if;
cm$error=false;
global$cm$error=false;
if codemacro$flag then$do
/* error, nested codemacrodefinition */
cm$error=true;
end$if;
call init$cm$rout; /* clearing all temp. working storages */
codemacro$flag=true;
if not name$rout then$do
/* error, expected codemacroname */
cm$error=true;
end$if;
call formal$list$rout;
if cm$error or more$left$on$line$ then$do
/* error */
global$cm$error=true;
call errmsg(codemacroerr);
end$if;
call skip$rest$of$line;
end$proc codemacro$rout;
db$cm$rout: PROC public;
CALL COMMON$CM$ROUT (0);
end$proc db$cm$rout;
dw$cm$rout: PROC public;
CALL COMMON$CM$ROUT (1);
end$proc dw$cm$rout;
dd$cm$rout: PROC public;
CALL COMMON$CM$ROUT (2);
end$proc dd$cm$rout;
segfix$cm$rout: PROC public;
CALL COMMON$CM$ROUT (3);
end$proc segfix$cm$rout;
nosegfix$cm$rout: PROC public;
CALL COMMON$CM$ROUT (4);
end$proc nosegfix$cm$rout;
modrm$cm$rout: PROC public;
CALL COMMON$CM$ROUT (5);
end$proc modrm$cm$rout;
relb$cm$rout: PROC public;
CALL COMMON$CM$ROUT (6);
end$proc relb$cm$rout;
relw$cm$rout: PROC public;
CALL COMMON$CM$ROUT (7);
end$proc relw$cm$rout;
dbit$cm$rout: PROC public;
CALL COMMON$CM$ROUT (8);
end$proc dbit$cm$rout;
end$cm$rout: PROC public;
if pass = 1 then$do
call skip$rest$of$line;
codemacro$flag=false;
return;
end$if;
cm$error=false;
if not codemacro$flag then$do
/* error, terminating a not yet started codemacro */
cm$error=true;
end$if;
call endm$rout;
if pass = 0 then call terminate$cm$rout;
if cm$error or more$left$on$line or cm$list$overflow then$do
/* error */
call errmsg(codemacroerr);
end$if;
call skip$rest$of$line;
global$cm$error=false;
codemacro$flag=false;
end$proc end$cm$rout;
end$module cm1;

View File

@@ -0,0 +1,46 @@
$nolist
/* D E C L A R A T I O N F O R "C O D E M A C R O" P A R T
Extended version of ASM86 */
dcl cm$error byte external,
global$cm$error byte external,
cm$list$overflow byte external,
cmpt address external;
/* level 2 in the syntax-tree of codemacro building */
/* Procedure to initialize temporary storage and pointers
conserning the building of codemacro */
init$cm$rout: PROC external;
end$proc init$cm$rout;
name$rout: PROC byte external;
end$proc name$rout;
formal$list$rout: PROC external;
end$proc formal$list$rout;
terminate$cm$rout: PROC external;
end$proc terminate$cm$rout;
legal$parameter: PROC(lg,ptr,ptr2) byte external;
dcl lg byte,
(ptr,ptr2) address;
end$proc legal$parameter;
legal$seg$reg: PROC byte external;
end$proc legal$seg$reg;
put$b: PROC(b) external;
dcl b byte;
end$proc put$b;
put$w: PROC(w) external;
dcl w address;
end$proc put$w;
$list

View File

@@ -0,0 +1,835 @@
PL/M-86 COMPILER CODEMACRO MODULE 2 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE CM2
OBJECT MODULE PLACED IN CM2.OBJ
COMPILER INVOKED BY: :F0: CM2.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100) XREF
$title ('codemacro module 2')
1 cm2:
do;
/*
modified 3/26/81 R. Silberstein
*/
/* This is the module to build new instructions
which is not present in the already existing
system. */
$include (:f1:macro.lit)
= $nolist
$include (:f1:equals.lit)
= $nolist
$include (:f1:struc.lit)
= $nolist
$include (:f1:cmacd.lit)
= $nolist
$include (:f1:cm.lit)
= $nolist
$include (:f1:symb.ext)
= $nolist
$include (:f1:subr1.ext)
= $nolist
$include (:f1:subr2.ext)
= $nolist
$include (:f1:scan.ext)
= $nolist
$include (:f1:files.ext)
= $nolist
$include (:f1:exglob.ext)
= $nolist
PL/M-86 COMPILER CODEMACRO MODULE 2 10/5/81 PAGE 2
$eject
/* D E C L A R A T I O N F O R "C O D E M A C R O" P A R T
Extended version of ASM86 */
148 1 dcl cm$name(80) byte ,
codemacro$found byte ,
cm$n$pt address ,
cm$n$var based cm$n$pt byte,
cm$n$lg byte ,
par$name(80) byte ,
pmpt address ,
cm$pm$var based pmpt byte,
cm$error byte public ,
cm$body(100) byte ,
cmpt address public ,
cm$b$var based cmpt byte,
cm$w$var based cmpt addr,
cm$counter addr ,
global$cm$error byte public ,
cm$body$full byte ,
ant$par byte ,
cm$list$overflow byte public;
PL/M-86 COMPILER CODEMACRO MODULE 2 10/5/81 PAGE 3
$eject
/* VARIOUS SUBROUTINES */
149 1 legal$parameter: PROC(lg,ptr,ptr2) byte public;
150 2 dcl (lg,i) byte,
(ptr,ptr2) address,
no based ptr2 byte;
151 2 i=0;
152 2 do no=0 to cm$body(2)-1;
153 3 if parname(i+lg) = 0 and
equal(lg,ptr,.par$name(i)) then return true;
155 3 do while par$name(i:=i+1) <> 0;
156 4 end$while;
157 3 i=i+1;
158 3 end;
159 2 return false;
160 2 end$proc legal$parameter;
161 1 legal$spec$letter: PROC(l) byte;
162 2 dcl (l,i) byte;
163 2 dcl table(8) byte data ('ACDEMRSX');
164 2 do i=0 to last(table);
165 3 if table(i) = l then return i;
167 3 end;
168 2 return i;
169 2 end$proc legal$spec$letter;
170 1 legal$mod$letter: PROC(l) byte;
171 2 dcl (l,i) byte;
172 2 dcl table(4) byte data ('BWDS');
173 2 do i=0 to last(table);
174 3 if table(i) = l and i < 3 then return i;
176 3 if table(i) = l and i = 3 then$do
178 4 if accum(2) = 'B' then return 3;
end$if;
181 3 end;
182 2 return i;
183 2 end$proc legal$mod$letter;
184 1 legal$register: PROC byte;
185 2 declare disp byte;
186 2 if token.type <> reg then return 0;
188 2 disp=0;
189 2 if token.descr=byt then disp=8;
191 2 if token.descr=dwrd then disp=16;
193 2 return token.value + disp + 1;
194 2 end$proc legal$register;
195 1 legal$seg$reg: PROC byte public;
196 2 if token.type <> reg then return 0;
198 2 if token.descr <> dwrd then return 0;
200 2 return token.value + 1;
201 2 end$proc legal$seg$reg;
202 1 put$b: PROC(b) public;
203 2 dcl b byte;
PL/M-86 COMPILER CODEMACRO MODULE 2 10/5/81 PAGE 4
204 2 cm$counter=cm$counter+1;
205 2 if cm$counter > 99 then$do
207 3 cm$error=true;
208 3 cm$body$full=true;
209 3 return;
210 3 end$if;
211 2 cm$b$var=b;
212 2 cmpt=cmpt+1;
213 2 end$proc put$b;
214 1 put$w: PROC(w) public;
215 2 dcl w addr;
216 2 cm$counter=cm$counter+2;
217 2 if cm$counter > 99 then$do
219 3 cm$error=true;
220 3 cm$body$full=true;
221 3 return;
222 3 end$if;
223 2 cm$w$var=w;
224 2 cmpt=cmpt+2;
225 2 end$proc put$w;
226 1 update$cm$lists: PROC byte;
227 2 dcl listptr address,next based listptr address;
228 2 dcl ptr address;
229 2 ptr=.listptr;
230 2 if findcodemacro(cm$n$lg,.cm$name(0),ptr)
then$do
232 3 do while next <> 0;
233 4 listptr=next;
234 4 end$while;
235 3 else$do
237 3 if not new$cm$name(cm$n$lg,.cm$name(0),ptr)
then return false;
end$if;
240 2 next=freept;
241 2 if not new$cm$body(cm$counter,.cm$body(0))
then return false;
243 2 return true;
244 2 end$proc update$cm$lists;
PL/M-86 COMPILER CODEMACRO MODULE 2 10/5/81 PAGE 5
$eject
/* level 4 in the syntax-tree of coeemacro building */
245 1 register$rout: PROC (l);
246 2 dcl l byte;
247 2 call put$b(l);
248 2 end$proc register$rout;
249 1 range$rout: PROC;
250 2 put$range: PROC(time);
251 3 dcl time byte;
252 3 if token.type = number then$do
254 4 if time = first then$do
256 5 cm$b$var=cm$b$var+numberrange;
257 5 cmpt=cmpt+1;
258 5 end$if;
259 4 if token.value > 0ffh then$do
261 5 cm$error=true; /* too large number */
262 5 return;
263 5 else$do
265 5 call put$b(token.value);
266 5 end$if;
267 4 else$do
269 4 if time = first then$do
271 5 cm$b$var=cm$b$var+registerrange;
272 5 cmpt=cmpt+1;
273 5 end$if;
274 4 do case legal$register;
275 5 do; /* error, expecting a register spec. */
276 6 cm$error=true;
277 6 return;
278 6 end;
279 5 call register$rout(rax);
280 5 call register$rout(rcx);
281 5 call register$rout(rdx);
282 5 call register$rout(rbx);
283 5 call register$rout(rsp);
284 5 call register$rout(rbp);
285 5 call register$rout(rsi);
286 5 call register$rout(rdi);
287 5 call register$rout(ral);
288 5 call register$rout(rcl);
289 5 call register$rout(rdl);
290 5 call register$rout(rbl);
291 5 call register$rout(rah);
292 5 call register$rout(rch);
293 5 call register$rout(rdh);
294 5 call register$rout(rbh);
295 5 call register$rout(res);
296 5 call register$rout(rcs);
297 5 call register$rout(rss);
298 5 call register$rout(rds);
299 5 end$case;
300 4 end$if;
301 3 call scan;
PL/M-86 COMPILER CODEMACRO MODULE 2 10/5/81 PAGE 6
302 3 end$proc put$range;
303 2 s$range: PROC;
304 3 cmpt=cmpt-1;
305 3 cm$b$var=cm$b$var+singlerange;
306 3 call put$range(first);
307 3 end$proc s$range;
308 2 d$range: PROC;
309 3 cmpt=cmpt-1;
310 3 cm$b$var=cm$b$var+doublerange;
311 3 call put$range(first);
312 3 if accum(0) <> comma then$do
314 4 cm$error=true;
315 4 return;
316 4 end$if;
317 3 call scan;
318 3 call put$range(second);
319 3 if accum(0) <> rightpar then$do
321 4 cm$error=true;
322 4 return;
323 4 end$if;
end$proc d$range;
/* mainpart of range routine */
325 2 call scan; /* skip left paranthesis */
326 2 if nextch = comma then call d$range;
328 2 else call s$range;
329 2 call scan;
330 2 end$proc range$rout;
331 1 spec$letter$rout: PROC(l);
332 2 dcl l byte;
333 2 call put$b(l);
334 2 end$proc spec$letter$rout;
335 1 mod$letter$rout: PROC(l);
336 2 dcl l byte;
337 2 call put$b(l);
338 2 end$proc mod$letter$rout;
PL/M-86 COMPILER CODEMACRO MODULE 2 10/5/81 PAGE 7
$eject
/* level 3 in the syntax-tree of codemacro building */
339 1 par$descr$rout: PROC;
340 2 call copy(acclen,.accum(0),.cm$pm$var);
341 2 pmpt=pmpt+acclen;
342 2 cm$pm$var=0; /* end of par.name */
343 2 pmpt=pmpt+1;
344 2 call scan;
345 2 if accum(0) <> colon then$do
/* error, expected colon in parameterdecl */
347 3 cm$error=true;
348 3 end$if;
349 2 call scan;
350 2 do case legal$spec$letter(accum(0));
351 3 call spec$letter$rout(speca);
352 3 call spec$letter$rout(specc);
353 3 call spec$letter$rout(specd);
354 3 call spec$letter$rout(spece);
355 3 call spec$letter$rout(specm);
356 3 call spec$letter$rout(specr);
357 3 call spec$letter$rout(specs);
358 3 call spec$letter$rout(specx);
359 3 do; /* error, expected specifier letter */
360 4 cm$error=true;
361 4 return;
362 4 end;
363 3 end$case;
364 2 do case legal$mod$letter(accum(1));
365 3 call mod$letter$rout(modb);
366 3 call mod$letter$rout(modw);
367 3 call mod$letter$rout(modd);
368 3 call mod$letter$rout(modsb);
369 3 call mod$letter$rout(nomod); /* no modletter */
370 3 end$case;
371 2 call scan;
372 2 if accum(0) = leftpar then call range$rout;
374 2 cm$body(2)=cm$body(2)+1;
375 2 end$proc par$descr$rout;
PL/M-86 COMPILER CODEMACRO MODULE 2 10/5/81 PAGE 8
$eject
/* level 2 in the syntax-tree of codemacro building */
/* Procedure to initialize temporary storage and pointers
conserning the building of codemacro */
376 1 init$cm$rout: PROC public;
377 2 cm$n$pt=.cm$name(0);
378 2 cmpt=.cm$body(0)+3; /* correcting for the head */
379 2 pmpt=.par$name(0);
380 2 CALL FILL (0, LENGTH (CM$NAME), .CM$NAME);
381 2 CALL FILL (0, LENGTH (CM$BODY), .CM$BODY);
382 2 CALL FILL (0, LENGTH (PAR$NAME), .PAR$NAME);
383 2 ant$par=0;
384 2 cm$counter=3;
385 2 cm$body$full=false;
386 2 cm$list$overflow=false;
387 2 end$proc init$cm$rout;
388 1 name$rout: PROC byte public;
389 2 if token.type <> ident then return false;
391 2 call copy(acclen,.accum(0),.cm$name(0));
392 2 cm$n$lg=acclen;
393 2 call scan;
394 2 return true;
395 2 end$proc name$rout;
396 1 formal$list$rout: PROC public;
397 2 do while token.type = ident;
398 3 call par$descr$rout;
399 3 if accum(0) <> ',' then return; /* end of parameters */
401 3 call scan;
402 3 end$while;
403 2 end$proc formal$list$rout;
404 1 terminate$cm$rout: PROC public;
405 2 if global$cm$error then$do
/* error present in codemacrodef, */
/* no updating of codemacrolist */
407 3 return;
408 3 end$if;
409 2 if not update$cm$lists
then$do
411 3 cm$error=true; /* overflow, no more vacant memory */
412 3 cm$list$overflow=true;
413 3 return;
414 3 end$if;
end$proc terminate$cm$rout;
416 1 end$module cm2;
PL/M-86 COMPILER CODEMACRO MODULE 2 10/5/81 PAGE 9
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
147 0000H 1 ACCLEN . . . . . . BYTE EXTERNAL(59) 340 341 391 392
147 0000H 80 ACCUM. . . . . . . BYTE ARRAY(80) EXTERNAL(60) 178 312 319
340 345 350 364 372 391 399
2 ADDR . . . . . . . LITERALLY 18 19 25 28 31 34 37
40 43 46 49 52 55 58 64 82 85
88 91 143 147 148 215
72 0000H ALPHANUMERIC . . . PROCEDURE BYTE EXTERNAL(20) STACK=0000H
148 0115H 1 ANTPAR . . . . . . BYTE 383
75 0000H ASCIICHAR. . . . . PROCEDURE BYTE EXTERNAL(21) STACK=0000H
45 0000H 2 ASCIIPTR . . . . . WORD PARAMETER 46
202 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 203 211
147 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPERANDS)
8 BASEREGBIT . . . . LITERALLY
8 BASEREGCOUNT . . . LITERALLY
8 BREGBIT. . . . . . LITERALLY
8 BREGCOUNT. . . . . LITERALLY
4 BYT. . . . . . . . LITERALLY 189
69 0000H 1 CH . . . . . . . . BYTE PARAMETER 70
72 0000H 1 CH . . . . . . . . BYTE PARAMETER 73
75 0000H 1 CH . . . . . . . . BYTE PARAMETER 76
63 0000H 1 CH . . . . . . . . BYTE PARAMETER 64
110 0000H 1 CH . . . . . . . . BYTE PARAMETER 111
78 0000H 1 CH . . . . . . . . BYTE PARAMETER 79
113 0000H 1 CH . . . . . . . . BYTE PARAMETER 114
66 0000H 1 CH . . . . . . . . BYTE PARAMETER 67
107 0000H 1 CH . . . . . . . . BYTE PARAMETER 108
147 0000H 2 CIP. . . . . . . . WORD EXTERNAL(51)
136 0000H CLOSEHEX . . . . . PROCEDURE EXTERNAL(46) STACK=0000H
134 0000H CLOSEINCLUDE . . . PROCEDURE EXTERNAL(45) STACK=0000H
138 0000H CLOSEPRINT . . . . PROCEDURE EXTERNAL(47) STACK=0000H
130 0000H CLOSESOURCE. . . . PROCEDURE EXTERNAL(43) STACK=0000H
140 0000H CLOSESYMBOL. . . . PROCEDURE EXTERNAL(48) STACK=0000H
1 0000H CM2. . . . . . . . PROCEDURE STACK=0000H
148 00AFH 100 CMBODY . . . . . . BYTE ARRAY(100) 152 241 374 378 381
148 0114H 1 CMBODYFULL . . . . BYTE 208 220 385
148 0000H 1 CMBVAR . . . . . . BYTE BASED(CMPT) 211 256 271 305 310
148 0006H 2 CMCOUNTER. . . . . WORD 204 205 216 217 241 384
148 00AEH 1 CMERROR. . . . . . BYTE PUBLIC 207 219 261 276 314 321
347 360 411
148 0116H 1 CMLISTOVERFLOW . . BYTE PUBLIC 386 412
148 000CH 80 CMNAME . . . . . . BYTE ARRAY(80) 230 237 377 380 391
148 005DH 1 CMNLG. . . . . . . BYTE 230 237 392
148 0000H 2 CMNPT. . . . . . . WORD 148 377
148 0000H 1 CMNVAR . . . . . . BYTE BASED(CMNPT)
148 0000H 1 CMPMVAR. . . . . . BYTE BASED(PMPT) 340 342
148 0004H 2 CMPT . . . . . . . WORD PUBLIC 148 211 212 223 224 256
257 271 272 304 305 309 310 378
148 0000H 2 CMWVAR . . . . . . WORD BASED(CMPT) 223
PL/M-86 COMPILER CODEMACRO MODULE 2 10/5/81 PAGE 10
3 CODE . . . . . . . LITERALLY
148 005CH 1 CODEMACROFOUND . . BYTE
8 CODEMACROHEAD. . . LITERALLY
17 COLON. . . . . . . LITERALLY 345
17 COMMA. . . . . . . LITERALLY 312 326
54 0000H COPY . . . . . . . PROCEDURE EXTERNAL(14) STACK=0000H 340 391
2 CR . . . . . . . . LITERALLY
147 0000H 1 CSEGSPEC . . . . . BYTE EXTERNAL(54)
147 0000H 1 CSEGTYPE . . . . . BYTE EXTERNAL(52)
147 0000H 2 CSEGVALUE. . . . . WORD EXTERNAL(53)
12 CSOVER . . . . . . LITERALLY
147 0000H 2 CURDSEG. . . . . . WORD EXTERNAL(56)
87 0000H 2 D. . . . . . . . . WORD PARAMETER 88
81 0000H 2 D. . . . . . . . . WORD PARAMETER 82
54 0000H 2 D. . . . . . . . . WORD PARAMETER 55
84 0000H 2 D. . . . . . . . . WORD PARAMETER 85
90 0000H 2 D. . . . . . . . . WORD PARAMETER 91
2 DCL. . . . . . . . LITERALLY
90 0000H DECOUT . . . . . . PROCEDURE EXTERNAL(26) STACK=0000H
3 DELETEDSYMB. . . . LITERALLY
147 0001H 1 DESCR. . . . . . . BYTE MEMBER(TOKEN) 189 191 198
33 0000H 2 DEST . . . . . . . WORD PARAMETER 34
142 0000H 1 DEV. . . . . . . . BYTE PARAMETER 143
66 0000H DIGIT. . . . . . . PROCEDURE BYTE EXTERNAL(18) STACK=0000H
185 011AH 1 DISP . . . . . . . BYTE 188 190 192 193
3 DOUBLEDEFINED. . . LITERALLY
16 DOUBLERANGE. . . . LITERALLY 310
308 02DCH 53 DRANGE . . . . . . PROCEDURE STACK=0014H 327
12 DSOVER . . . . . . LITERALLY
147 0000H 1 DSPEC. . . . . . . BYTE EXTERNAL(55)
4 DWRD . . . . . . . LITERALLY 191 198
2 ELSEDO . . . . . . LITERALLY
105 0000H EMPTYLINE. . . . . PROCEDURE BYTE EXTERNAL(32) STACK=0000H
2 ENDCASE. . . . . . LITERALLY
2 ENDDO. . . . . . . LITERALLY
2 ENDFOREVER . . . . LITERALLY
2 ENDIF. . . . . . . LITERALLY 179 238
2 ENDMODULE. . . . . LITERALLY
2 ENDOFFILE. . . . . LITERALLY
19 0000H 2 ENDOFSYMBTAB . . . WORD EXTERNAL(1)
2 ENDPROC. . . . . . LITERALLY 323 414
2 ENDWHILE . . . . . LITERALLY
36 0000H ENTERATTRIBUTES. . PROCEDURE EXTERNAL(8) STACK=0000H
81 0000H EQUAL. . . . . . . PROCEDURE BYTE EXTERNAL(23) STACK=0000H 153
3 ERROR. . . . . . . LITERALLY
12 ESOVER . . . . . . LITERALLY
2 FALSE. . . . . . . LITERALLY 159 238 242 385 386 390
60 0000H 2 FCBADR . . . . . . WORD PARAMETER 61
60 0000H FILEABORT. . . . . PROCEDURE EXTERNAL(16) STACK=0000H
8 FILEISTRUCTURE . . LITERALLY
8 FILEOSTRUCTURE . . LITERALLY
145 0000H FILESETUP. . . . . PROCEDURE BYTE EXTERNAL(50) STACK=0000H
63 0000H FILL . . . . . . . PROCEDURE EXTERNAL(17) STACK=0000H 380 381
382
142 0000H 2 FILNAM . . . . . . WORD PARAMETER 143
142 0000H 2 FILTYP . . . . . . WORD PARAMETER 143
39 0000H FINDCODEMACRO. . . PROCEDURE BYTE EXTERNAL(9) STACK=0000H 230
PL/M-86 COMPILER CODEMACRO MODULE 2 10/5/81 PAGE 11
30 0000H FINDSYMBOL . . . . PROCEDURE BYTE EXTERNAL(6) STACK=0000H
17 FIRST. . . . . . . LITERALLY 254 269 306 311
2 FOREVER. . . . . . LITERALLY
396 0479H 29 FORMALLISTROUT . . PROCEDURE PUBLIC STACK=0020H
2 FORMFEED . . . . . LITERALLY
18 0000H 2 FREEPT . . . . . . WORD EXTERNAL(0) 240
33 0000H GETATTRIBUTES. . . PROCEDURE EXTERNAL(7) STACK=0000H
148 0113H 1 GLOBALCMERROR. . . BYTE PUBLIC 405
84 0000H HEX1OUT. . . . . . PROCEDURE EXTERNAL(24) STACK=0000H
87 0000H HEX2OUT. . . . . . PROCEDURE EXTERNAL(25) STACK=0000H
150 0117H 1 I. . . . . . . . . BYTE 151 153 155 157
171 0119H 1 I. . . . . . . . . BYTE 173 174 175 176 182
162 0118H 1 I. . . . . . . . . BYTE 164 165 166 168
3 IDENT. . . . . . . LITERALLY 389 397
142 0000H IFILESETUP . . . . PROCEDURE EXTERNAL(49) STACK=0000H
8 INDEXREGBIT. . . . LITERALLY
8 INDEXREGCOUNT. . . LITERALLY
118 0000H ININCLUDEBYTE. . . PROCEDURE BYTE EXTERNAL(37) STACK=0000H
2 INIT . . . . . . . LITERALLY
376 0400H 79 INITCMROUT . . . . PROCEDURE PUBLIC STACK=000AH
116 0000H INSOURCEBYTE . . . PROCEDURE BYTE EXTERNAL(36) STACK=0000H
8 IREGBIT. . . . . . LITERALLY
8 IREGCOUNT. . . . . LITERALLY
170 0004H 1 L. . . . . . . . . BYTE PARAMETER AUTOMATIC 171 174 176
161 0004H 1 L. . . . . . . . . BYTE PARAMETER AUTOMATIC 162 165
335 0004H 1 L. . . . . . . . . BYTE PARAMETER AUTOMATIC 336 337
331 0004H 1 L. . . . . . . . . BYTE PARAMETER AUTOMATIC 332 333
245 0004H 1 L. . . . . . . . . BYTE PARAMETER AUTOMATIC 246 247
3 LAB. . . . . . . . LITERALLY
LAST . . . . . . . BUILTIN 164 173
7 LEFTBRACKET. . . . LITERALLY
17 LEFTPAR. . . . . . LITERALLY 372
170 009AH 76 LEGALMODLETTER . . PROCEDURE BYTE STACK=0004H 364
149 0000H 113 LEGALPARAMETER . . PROCEDURE BYTE PUBLIC STACK=0012H
184 00E6H 55 LEGALREGISTER. . . PROCEDURE BYTE STACK=0002H 274
195 011DH 27 LEGALSEGREG. . . . PROCEDURE BYTE PUBLIC STACK=0002H
161 0071H 41 LEGALSPECLETTER. . PROCEDURE BYTE STACK=0004H 350
LENGTH . . . . . . BUILTIN 380 381 382
147 0000H 2 LENGTH . . . . . . WORD MEMBER(OPERANDS)
69 0000H LETTER . . . . . . PROCEDURE BYTE EXTERNAL(19) STACK=0000H
2 LF . . . . . . . . LITERALLY
149 0008H 1 LG . . . . . . . . BYTE PARAMETER AUTOMATIC 150 153
45 0000H 1 LG . . . . . . . . BYTE PARAMETER 46
42 0000H 1 LG . . . . . . . . BYTE PARAMETER 43
39 0000H 1 LG . . . . . . . . BYTE PARAMETER 40
30 0000H 1 LG . . . . . . . . BYTE PARAMETER 31
27 0000H 1 LG . . . . . . . . BYTE PARAMETER 28
24 0000H 1 LG . . . . . . . . BYTE PARAMETER 25
227 0008H 2 LISTPTR. . . . . . WORD 227 229 232 233 240
2 LIT. . . . . . . . LITERALLY 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16 17
27 0000H 2 MACDEFPT . . . . . WORD PARAMETER 28
9 MDBF . . . . . . . LITERALLY
9 MDBIT. . . . . . . LITERALLY
9 MDBN . . . . . . . LITERALLY
9 MDDF . . . . . . . LITERALLY
9 MDWF . . . . . . . LITERALLY
PL/M-86 COMPILER CODEMACRO MODULE 2 10/5/81 PAGE 12
9 MDWN . . . . . . . LITERALLY
9 MENDBIT. . . . . . LITERALLY
9 MENDM. . . . . . . LITERALLY
9 MFORMALBITS. . . . LITERALLY
9 MMODRM1. . . . . . LITERALLY
9 MMODRM2. . . . . . LITERALLY
9 MNOSEGFIX. . . . . LITERALLY
9 MNUMBERBITS. . . . LITERALLY
11 MODB . . . . . . . LITERALLY 365
11 MODD . . . . . . . LITERALLY 367
15 MODLETTERBIT . . . LITERALLY
15 MODLETTERCOUNT . . LITERALLY
335 031EH 13 MODLETTERROUT. . . PROCEDURE STACK=000AH 365 366 367 368
369
11 MODSB. . . . . . . LITERALLY 368
11 MODW . . . . . . . LITERALLY 366
9 MRELB. . . . . . . LITERALLY
9 MRELW. . . . . . . LITERALLY
9 MSEGFIX. . . . . . LITERALLY
90 0000H 2 N. . . . . . . . . WORD PARAMETER 91
87 0000H 2 N. . . . . . . . . WORD PARAMETER 88
84 0000H 1 N. . . . . . . . . BYTE PARAMETER 85
81 0000H 1 N. . . . . . . . . BYTE PARAMETER 82
63 0000H 1 N. . . . . . . . . BYTE PARAMETER 64
54 0000H 1 N. . . . . . . . . BYTE PARAMETER 55
51 0000H 2 N. . . . . . . . . WORD PARAMETER 52
388 044FH 42 NAMEROUT . . . . . PROCEDURE BYTE PUBLIC STACK=000AH
3 NEGLECTED. . . . . LITERALLY
42 0000H NEWCMBODY. . . . . PROCEDURE BYTE EXTERNAL(10) STACK=0000H 241
45 0000H NEWCMNAME. . . . . PROCEDURE BYTE EXTERNAL(11) STACK=0000H 237
27 0000H NEWMACRO . . . . . PROCEDURE BYTE EXTERNAL(5) STACK=0000H
24 0000H NEWSYMBOL. . . . . PROCEDURE BYTE EXTERNAL(4) STACK=0000H
227 0000H 2 NEXT . . . . . . . WORD BASED(LISTPTR) 232 233 240
147 0000H 1 NEXTCH . . . . . . BYTE EXTERNAL(58) 326
4 NIL. . . . . . . . LITERALLY
150 0000H 1 NO . . . . . . . . BYTE BASED(PTR2) 152
11 NOMOD. . . . . . . LITERALLY 369
147 0000H 1 NOOPER . . . . . . BYTE EXTERNAL(61)
8 NOOVERCOUNT. . . . LITERALLY
8 NOOVERRIDEBIT. . . LITERALLY
13 NOPARAND . . . . . LITERALLY
16 NORANGE. . . . . . LITERALLY
3 NUMBER . . . . . . LITERALLY 252
16 NUMBERRANGE. . . . LITERALLY 256
7 OAND . . . . . . . LITERALLY
7 OEQ. . . . . . . . LITERALLY
147 0006H 2 OFFSET . . . . . . WORD MEMBER(OPERANDS)
7 OGE. . . . . . . . LITERALLY
7 OGT. . . . . . . . LITERALLY
7 OLAST. . . . . . . LITERALLY
7 OLE. . . . . . . . LITERALLY
7 OLENGTH. . . . . . LITERALLY
7 OLT. . . . . . . . LITERALLY
7 OMOD . . . . . . . LITERALLY
7 ONE. . . . . . . . LITERALLY
7 ONOT . . . . . . . LITERALLY
7 OOFFSET. . . . . . LITERALLY
PL/M-86 COMPILER CODEMACRO MODULE 2 10/5/81 PAGE 13
7 OOR. . . . . . . . LITERALLY
124 0000H OPENHEX. . . . . . PROCEDURE EXTERNAL(40) STACK=0000H
122 0000H OPENINCLUDE. . . . PROCEDURE EXTERNAL(39) STACK=0000H
126 0000H OPENPRINT. . . . . PROCEDURE EXTERNAL(41) STACK=0000H
120 0000H OPENSOURCE . . . . PROCEDURE EXTERNAL(38) STACK=0000H
128 0000H OPENSYMBOL . . . . PROCEDURE EXTERNAL(42) STACK=0000H
147 0000H 36 OPERANDS . . . . . STRUCTURE ARRAY(4) EXTERNAL(62)
8 OPERANDSTRUC . . . LITERALLY 147
3 OPERATOR . . . . . LITERALLY
7 OPTR . . . . . . . LITERALLY
7 OSEG . . . . . . . LITERALLY
7 OSHL . . . . . . . LITERALLY
7 OSHORT . . . . . . LITERALLY
7 OSHR . . . . . . . LITERALLY
7 OTYPE. . . . . . . LITERALLY
107 0000H OUTHEXBYTE . . . . PROCEDURE EXTERNAL(33) STACK=0000H
110 0000H OUTPRINTBYTE . . . PROCEDURE EXTERNAL(34) STACK=0000H
113 0000H OUTSYMBOLBYTE. . . PROCEDURE EXTERNAL(35) STACK=0000H
57 0000H OUTTEXT. . . . . . PROCEDURE EXTERNAL(15) STACK=0000H
7 OXOR . . . . . . . LITERALLY
339 032BH 213 PARDESCRROUT . . . PROCEDURE STACK=001CH 398
148 005EH 80 PARNAME. . . . . . BYTE ARRAY(80) 153 155 379 382
6 PCODEMACRO . . . . LITERALLY
6 PCSEG. . . . . . . LITERALLY
6 PDB. . . . . . . . LITERALLY
6 PDBIT. . . . . . . LITERALLY
6 PDD. . . . . . . . LITERALLY
6 PDSEG. . . . . . . LITERALLY
6 PDW. . . . . . . . LITERALLY
6 PEJECT . . . . . . LITERALLY
6 PEND . . . . . . . LITERALLY
6 PENDIF . . . . . . LITERALLY
6 PENDM. . . . . . . LITERALLY
6 PEQU . . . . . . . LITERALLY
6 PESEG. . . . . . . LITERALLY
6 PIF. . . . . . . . LITERALLY
6 PIFLIST. . . . . . LITERALLY
6 PINCLUDE . . . . . LITERALLY
6 PLIST. . . . . . . LITERALLY
6 PMODRM . . . . . . LITERALLY
148 0002H 2 PMPT . . . . . . . WORD 148 340 341 342 343 379
6 PNOIFLIST. . . . . LITERALLY
6 PNOLIST. . . . . . LITERALLY
6 PNOSEGFIX. . . . . LITERALLY
6 PORG . . . . . . . LITERALLY
6 PPAGESIZE. . . . . LITERALLY
6 PPAGEWIDTH . . . . LITERALLY
6 PRB. . . . . . . . LITERALLY
13 PREFIXAND. . . . . LITERALLY
14 PREFIXON . . . . . LITERALLY
6 PRELB. . . . . . . LITERALLY
6 PRELW. . . . . . . LITERALLY
2 PROC . . . . . . . LITERALLY 20 22 24 27 30 33 36
39 42 45 48 51 72 75 84 87 90
93 95 97 99 102 105 107 110 113 116
118 120 122 124 126 128 130 132 134 136
138 140 142 145 149 161 170 184 195 202
PL/M-86 COMPILER CODEMACRO MODULE 2 10/5/81 PAGE 14
214 226 245 249 250 303 308 331 335 339
376 388 396 404
6 PRS. . . . . . . . LITERALLY
6 PRW. . . . . . . . LITERALLY
6 PSEGFIX. . . . . . LITERALLY
3 PSEUDO . . . . . . LITERALLY
6 PSIMFORM . . . . . LITERALLY
6 PSSEG. . . . . . . LITERALLY
63 0000H 2 PT . . . . . . . . WORD PARAMETER 64
6 PTITLE . . . . . . LITERALLY
228 000AH 2 PTR. . . . . . . . WORD 229 230 237
149 0006H 2 PTR. . . . . . . . WORD PARAMETER AUTOMATIC 150 153
42 0000H 2 PTR. . . . . . . . WORD PARAMETER 43
149 0004H 2 PTR2 . . . . . . . WORD PARAMETER AUTOMATIC 150 152
202 0138H 44 PUTB . . . . . . . PROCEDURE PUBLIC STACK=0004H 247 265 333
337
250 021DH 168 PUTRANGE . . . . . PROCEDURE STACK=0010H 306 311 318
214 0164H 47 PUTW . . . . . . . PROCEDURE PUBLIC STACK=0004H
5 RAH. . . . . . . . LITERALLY 291
5 RAL. . . . . . . . LITERALLY 287
16 RANGEAND . . . . . LITERALLY
249 0203H 26 RANGEROUT. . . . . PROCEDURE STACK=0018H 373
15 RANGESPECBIT . . . LITERALLY
15 RANGESPECCOUNT . . LITERALLY
16 RANGETYPEAND . . . LITERALLY
5 RAX. . . . . . . . LITERALLY 279
5 RBH. . . . . . . . LITERALLY 294
5 RBL. . . . . . . . LITERALLY 290
5 RBP. . . . . . . . LITERALLY 284
5 RBX. . . . . . . . LITERALLY 282
5 RCH. . . . . . . . LITERALLY 292
5 RCL. . . . . . . . LITERALLY 288
5 RCS. . . . . . . . LITERALLY 296
5 RCX. . . . . . . . LITERALLY 280
5 RDH. . . . . . . . LITERALLY 293
5 RDI. . . . . . . . LITERALLY 286
5 RDL. . . . . . . . LITERALLY 289
5 RDS. . . . . . . . LITERALLY 298
5 RDX. . . . . . . . LITERALLY 281
2 REENT. . . . . . . LITERALLY
3 REG. . . . . . . . LITERALLY 186 196
16 REGISTERRANGE. . . LITERALLY 271
245 01F6H 13 REGISTERROUT . . . PROCEDURE STACK=000AH 279 280 281 282
283 284 285 286 287 288 289 290 291 292
293 294 295 296 297 298
5 RES. . . . . . . . LITERALLY 295
39 0000H 2 RESULT . . . . . . WORD PARAMETER 40
30 0000H 2 RESULT . . . . . . WORD PARAMETER 31
24 0000H 2 RESULT . . . . . . WORD PARAMETER 25
45 0000H 2 RETURNPTR. . . . . WORD PARAMETER 46
132 0000H REWINDSOURCE . . . PROCEDURE EXTERNAL(44) STACK=0000H
7 RIGHTBRACKET . . . LITERALLY
17 RIGHTPAR . . . . . LITERALLY 319
5 RSI. . . . . . . . LITERALLY 285
5 RSP. . . . . . . . LITERALLY 283
5 RSS. . . . . . . . LITERALLY 297
81 0000H 2 S. . . . . . . . . WORD PARAMETER 82
PL/M-86 COMPILER CODEMACRO MODULE 2 10/5/81 PAGE 15
54 0000H 2 S. . . . . . . . . WORD PARAMETER 55
95 0000H SCAN . . . . . . . PROCEDURE EXTERNAL(28) STACK=0000H 301 317
325 329 344 349 371 393 401
93 0000H SCANINIT . . . . . PROCEDURE EXTERNAL(27) STACK=0000H
17 SECOND . . . . . . LITERALLY 318
8 SEGMBIT. . . . . . LITERALLY
8 SEGMCOUNT. . . . . LITERALLY
147 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPERANDS)
8 SEGTYPEBIT . . . . LITERALLY
8 SEGTYPECOUNT . . . LITERALLY
147 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPERANDS)
16 SINGLERANGE. . . . LITERALLY 305
97 0000H SKIPRESTOFLINE . . PROCEDURE EXTERNAL(29) STACK=0000H
102 0000H SKIPUNTIL. . . . . PROCEDURE BYTE EXTERNAL(31) STACK=0000H
36 0000H 2 SOURCE . . . . . . WORD PARAMETER 37
2 SPACE. . . . . . . LITERALLY
3 SPEC . . . . . . . LITERALLY
10 SPECA. . . . . . . LITERALLY 351
10 SPECC. . . . . . . LITERALLY 352
10 SPECD. . . . . . . LITERALLY 353
10 SPECE. . . . . . . LITERALLY 354
99 0000H SPECIALTOKEN . . . PROCEDURE BYTE EXTERNAL(30) STACK=0000H
331 0311H 13 SPECLETTERROUT . . PROCEDURE STACK=000AH 351 352 353 354
355 356 357 358
10 SPECM. . . . . . . LITERALLY 355
10 SPECR. . . . . . . LITERALLY 356
10 SPECS. . . . . . . LITERALLY 357
10 SPECX. . . . . . . LITERALLY 358
303 02C5H 23 SRANGE . . . . . . PROCEDURE STACK=0014H 328
12 SSOVER . . . . . . LITERALLY
39 0000H 2 STRADR . . . . . . WORD PARAMETER 40
30 0000H 2 STRADR . . . . . . WORD PARAMETER 31
27 0000H 2 STRADR . . . . . . WORD PARAMETER 28
24 0000H 2 STRADR . . . . . . WORD PARAMETER 25
3 STRING . . . . . . LITERALLY
2 STRUC. . . . . . . LITERALLY 147
147 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPERANDS)
36 0000H 2 SYMBADR. . . . . . WORD PARAMETER 37
33 0000H 2 SYMBADR. . . . . . WORD PARAMETER 34
22 0000H SYMBINIT . . . . . PROCEDURE EXTERNAL(3) STACK=0000H
3 SYMBOL . . . . . . LITERALLY
8 SYMBOLHEAD . . . . LITERALLY
8 SYMBOLSTRUC. . . . LITERALLY 147
20 0000H SYMBTERMINATE. . . PROCEDURE EXTERNAL(2) STACK=0000H
57 0000H 2 T. . . . . . . . . WORD PARAMETER 58
2 TAB. . . . . . . . LITERALLY
172 0008H 4 TABLE. . . . . . . BYTE ARRAY(4) DATA 173 174 176
163 0000H 8 TABLE. . . . . . . BYTE ARRAY(8) DATA 164 165
404 0496H 35 TERMINATECMROUT. . PROCEDURE PUBLIC STACK=000EH
60 0000H 2 TEXTADR. . . . . . WORD PARAMETER 61
2 THENDO . . . . . . LITERALLY 176 205 217 230 252 254 259
269 312 319 345 405 409
250 0004H 1 TIME . . . . . . . BYTE PARAMETER AUTOMATIC 251 254 269
102 0000H 1 TOK. . . . . . . . BYTE PARAMETER 103
99 0000H 1 TOK. . . . . . . . BYTE PARAMETER 100
147 0000H 4 TOKEN. . . . . . . STRUCTURE EXTERNAL(57) 186 189 191 193
196 198 200 252 259 265 389 397
PL/M-86 COMPILER CODEMACRO MODULE 2 10/5/81 PAGE 16
2 TRUE . . . . . . . LITERALLY 154 207 208 219 220 243 261
276 314 321 347 360 394 411 412
147 0000H 1 TYPE . . . . . . . BYTE MEMBER(TOKEN) 186 196 252 389 397
8 TYPEBIT. . . . . . LITERALLY
48 0000H TYPECALC . . . . . PROCEDURE BYTE EXTERNAL(12) STACK=0000H
8 TYPECOUNT. . . . . LITERALLY
3 UDEFSYMB . . . . . LITERALLY
226 0193H 99 UPDATECMLISTS. . . PROCEDURE BYTE STACK=000AH 409
78 0000H UPPER. . . . . . . PROCEDURE BYTE EXTERNAL(22) STACK=0000H
48 0000H 2 VAL. . . . . . . . WORD PARAMETER 49
147 0002H 2 VALUE. . . . . . . WORD MEMBER(TOKEN) 193 200 259 265
3 VARIABLE . . . . . LITERALLY
214 0004H 2 W. . . . . . . . . WORD PARAMETER AUTOMATIC 215 223
4 WRD. . . . . . . . LITERALLY
51 0000H WRDTEST. . . . . . PROCEDURE BYTE EXTERNAL(13) STACK=0000H
MODULE INFORMATION:
CODE AREA SIZE = 04B9H 1209D
CONSTANT AREA SIZE = 000CH 12D
VARIABLE AREA SIZE = 011BH 283D
MAXIMUM STACK SIZE = 0020H 32D
936 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,343 @@
$title ('codemacro module 2')
cm2:
do;
/*
modified 3/26/81 R. Silberstein
*/
/* This is the module to build new instructions
which is not present in the already existing
system. */
$include (:f1:macro.lit)
$include (:f1:equals.lit)
$include (:f1:struc.lit)
$include (:f1:cmacd.lit)
$include (:f1:cm.lit)
$include (:f1:symb.ext)
$include (:f1:subr1.ext)
$include (:f1:subr2.ext)
$include (:f1:scan.ext)
$include (:f1:files.ext)
$include (:f1:exglob.ext)
$eject
/* D E C L A R A T I O N F O R "C O D E M A C R O" P A R T
Extended version of ASM86 */
dcl cm$name(80) byte ,
codemacro$found byte ,
cm$n$pt address ,
cm$n$var based cm$n$pt byte,
cm$n$lg byte ,
par$name(80) byte ,
pmpt address ,
cm$pm$var based pmpt byte,
cm$error byte public ,
cm$body(100) byte ,
cmpt address public ,
cm$b$var based cmpt byte,
cm$w$var based cmpt addr,
cm$counter addr ,
global$cm$error byte public ,
cm$body$full byte ,
ant$par byte ,
cm$list$overflow byte public;
$eject
/* VARIOUS SUBROUTINES */
legal$parameter: PROC(lg,ptr,ptr2) byte public;
dcl (lg,i) byte,
(ptr,ptr2) address,
no based ptr2 byte;
i=0;
do no=0 to cm$body(2)-1;
if parname(i+lg) = 0 and
equal(lg,ptr,.par$name(i)) then return true;
do while par$name(i:=i+1) <> 0;
end$while;
i=i+1;
end;
return false;
end$proc legal$parameter;
legal$spec$letter: PROC(l) byte;
dcl (l,i) byte;
dcl table(8) byte data ('ACDEMRSX');
do i=0 to last(table);
if table(i) = l then return i;
end;
return i;
end$proc legal$spec$letter;
legal$mod$letter: PROC(l) byte;
dcl (l,i) byte;
dcl table(4) byte data ('BWDS');
do i=0 to last(table);
if table(i) = l and i < 3 then return i;
if table(i) = l and i = 3 then$do
if accum(2) = 'B' then return 3;
end$if;
end;
return i;
end$proc legal$mod$letter;
legal$register: PROC byte;
declare disp byte;
if token.type <> reg then return 0;
disp=0;
if token.descr=byt then disp=8;
if token.descr=dwrd then disp=16;
return token.value + disp + 1;
end$proc legal$register;
legal$seg$reg: PROC byte public;
if token.type <> reg then return 0;
if token.descr <> dwrd then return 0;
return token.value + 1;
end$proc legal$seg$reg;
put$b: PROC(b) public;
dcl b byte;
cm$counter=cm$counter+1;
if cm$counter > 99 then$do
cm$error=true;
cm$body$full=true;
return;
end$if;
cm$b$var=b;
cmpt=cmpt+1;
end$proc put$b;
put$w: PROC(w) public;
dcl w addr;
cm$counter=cm$counter+2;
if cm$counter > 99 then$do
cm$error=true;
cm$body$full=true;
return;
end$if;
cm$w$var=w;
cmpt=cmpt+2;
end$proc put$w;
update$cm$lists: PROC byte;
dcl listptr address,next based listptr address;
dcl ptr address;
ptr=.listptr;
if findcodemacro(cm$n$lg,.cm$name(0),ptr)
then$do
do while next <> 0;
listptr=next;
end$while;
else$do
if not new$cm$name(cm$n$lg,.cm$name(0),ptr)
then return false;
end$if;
next=freept;
if not new$cm$body(cm$counter,.cm$body(0))
then return false;
return true;
end$proc update$cm$lists;
$eject
/* level 4 in the syntax-tree of coeemacro building */
register$rout: PROC (l);
dcl l byte;
call put$b(l);
end$proc register$rout;
range$rout: PROC;
put$range: PROC(time);
dcl time byte;
if token.type = number then$do
if time = first then$do
cm$b$var=cm$b$var+numberrange;
cmpt=cmpt+1;
end$if;
if token.value > 0ffh then$do
cm$error=true; /* too large number */
return;
else$do
call put$b(token.value);
end$if;
else$do
if time = first then$do
cm$b$var=cm$b$var+registerrange;
cmpt=cmpt+1;
end$if;
do case legal$register;
do; /* error, expecting a register spec. */
cm$error=true;
return;
end;
call register$rout(rax);
call register$rout(rcx);
call register$rout(rdx);
call register$rout(rbx);
call register$rout(rsp);
call register$rout(rbp);
call register$rout(rsi);
call register$rout(rdi);
call register$rout(ral);
call register$rout(rcl);
call register$rout(rdl);
call register$rout(rbl);
call register$rout(rah);
call register$rout(rch);
call register$rout(rdh);
call register$rout(rbh);
call register$rout(res);
call register$rout(rcs);
call register$rout(rss);
call register$rout(rds);
end$case;
end$if;
call scan;
end$proc put$range;
s$range: PROC;
cmpt=cmpt-1;
cm$b$var=cm$b$var+singlerange;
call put$range(first);
end$proc s$range;
d$range: PROC;
cmpt=cmpt-1;
cm$b$var=cm$b$var+doublerange;
call put$range(first);
if accum(0) <> comma then$do
cm$error=true;
return;
end$if;
call scan;
call put$range(second);
if accum(0) <> rightpar then$do
cm$error=true;
return;
end$if;
end$proc d$range;
/* mainpart of range routine */
call scan; /* skip left paranthesis */
if nextch = comma then call d$range;
else call s$range;
call scan;
end$proc range$rout;
spec$letter$rout: PROC(l);
dcl l byte;
call put$b(l);
end$proc spec$letter$rout;
mod$letter$rout: PROC(l);
dcl l byte;
call put$b(l);
end$proc mod$letter$rout;
$eject
/* level 3 in the syntax-tree of codemacro building */
par$descr$rout: PROC;
call copy(acclen,.accum(0),.cm$pm$var);
pmpt=pmpt+acclen;
cm$pm$var=0; /* end of par.name */
pmpt=pmpt+1;
call scan;
if accum(0) <> colon then$do
/* error, expected colon in parameterdecl */
cm$error=true;
end$if;
call scan;
do case legal$spec$letter(accum(0));
call spec$letter$rout(speca);
call spec$letter$rout(specc);
call spec$letter$rout(specd);
call spec$letter$rout(spece);
call spec$letter$rout(specm);
call spec$letter$rout(specr);
call spec$letter$rout(specs);
call spec$letter$rout(specx);
do; /* error, expected specifier letter */
cm$error=true;
return;
end;
end$case;
do case legal$mod$letter(accum(1));
call mod$letter$rout(modb);
call mod$letter$rout(modw);
call mod$letter$rout(modd);
call mod$letter$rout(modsb);
call mod$letter$rout(nomod); /* no modletter */
end$case;
call scan;
if accum(0) = leftpar then call range$rout;
cm$body(2)=cm$body(2)+1;
end$proc par$descr$rout;
$eject
/* level 2 in the syntax-tree of codemacro building */
/* Procedure to initialize temporary storage and pointers
conserning the building of codemacro */
init$cm$rout: PROC public;
cm$n$pt=.cm$name(0);
cmpt=.cm$body(0)+3; /* correcting for the head */
pmpt=.par$name(0);
CALL FILL (0, LENGTH (CM$NAME), .CM$NAME);
CALL FILL (0, LENGTH (CM$BODY), .CM$BODY);
CALL FILL (0, LENGTH (PAR$NAME), .PAR$NAME);
ant$par=0;
cm$counter=3;
cm$body$full=false;
cm$list$overflow=false;
end$proc init$cm$rout;
name$rout: PROC byte public;
if token.type <> ident then return false;
call copy(acclen,.accum(0),.cm$name(0));
cm$n$lg=acclen;
call scan;
return true;
end$proc name$rout;
formal$list$rout: PROC public;
do while token.type = ident;
call par$descr$rout;
if accum(0) <> ',' then return; /* end of parameters */
call scan;
end$while;
end$proc formal$list$rout;
terminate$cm$rout: PROC public;
if global$cm$error then$do
/* error present in codemacrodef, */
/* no updating of codemacrolist */
return;
end$if;
if not update$cm$lists
then$do
cm$error=true; /* overflow, no more vacant memory */
cm$list$overflow=true;
return;
end$if;
end$proc terminate$cm$rout;
end$module cm2;

View File

@@ -0,0 +1,43 @@
$nolist
/* Literals used in codemacro specification : */
dcl
divisor lit '0',
mplier lit '0',
place lit '0',
itype lit '0',
si$ptr lit '0',
di$ptr lit '1',
port lit '1',
adr lit '0',
dst lit '0',
src lit '1',
opcode lit '0';
/* Literals to simplify table punching: */
dcl
cmachead lit 'struc (next address,nopar byte',
cmac2struc lit 'cmachead,body(2) byte)',
cmac3struc lit 'cmachead,body(3) byte)',
cmac4struc lit 'cmachead,body(4) byte)',
cmac5struc lit 'cmachead,body(5) byte)',
cmac6struc lit 'cmachead,body(6) byte)',
cmac7struc lit 'cmachead,body(7) byte)',
cmac8struc lit 'cmachead,body(8) byte)',
cmac9struc lit 'cmachead,body(9) byte)',
cmac10struc lit 'cmachead,body(10) byte)',
cmac11struc lit 'cmachead,body(11) byte)',
cmac12struc lit 'cmachead,body(12) byte)',
cmac13struc lit 'cmachead,body(13) byte)',
cmac14struc lit 'cmachead,body(14) byte)',
cmac15struc lit 'cmachead,body(15) byte)',
cmac16struc lit 'cmachead,body(16) byte)',
cmac17struc lit 'cmachead,body(17) byte)',
cmac18struc lit 'cmachead,body(18) byte)',
cmac19struc lit 'cmachead,body(19) byte)',
cmac20struc lit 'cmachead,body(20) byte)',
cmac21struc lit 'cmachead,body(21) byte)';
$list

View File

@@ -0,0 +1,576 @@
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 1 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE CMAC1
OBJECT MODULE PLACED IN CMAC1.OBJ
COMPILER INVOKED BY: :F0: CMAC1.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100)
$title ('CODEMACRO DEFINITIONS - PART 1')
1 cmac1:
do;
$include (:f1:macro.lit)
= $nolist
$include (:f1:cmacd.lit)
= $nolist
$include (:f1:equals.lit)
= $nolist
$include (:f1:cmac.lit)
= $nolist
/* Code-macro table: */
18 1 dcl
/* AAA */
aaa1 cmac3struc public data(
nil,0,
mdbn,37h, /* DB 37H */
mendm), /* ENDM */
/* AAD */
aad1 cmac4struc public data(
nil,0,
mdwn,0d5h,0ah, /* DW 0AD5H */
mendm), /* ENDM */
/* AAM */
aam1 cmac4struc public data(
nil,0,
mdwn,0d4h,0ah, /* DW 0AD4H */
mendm), /* ENDM */
/* AAS */
aas1 cmac3struc public data(
nil,0,
mdbn,3fh, /* DB 3FH */
mendm), /* ENDM */
/* ADC dst:Eb,src:Db */
adc1 cmac14struc data(
nil,2,
specE,modb,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,80h, /* DB 80H */
mmodrm1,2,dst, /* MODRM 2,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 1 10/5/81 PAGE 2
/* ADC dst:Ew,src:Db */
adc2 cmac14struc data(
.adc1,2,
specE,modw,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,2,dst, /* MODRM 2,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* ADC dst:Ew,src:Dsb */
adc3 cmac14struc data(
.adc2,2,
specE,modw,
specD,modsb,
msegfix,dst, /* SEGFIX dst */
mdbn,83h, /* DB 83H */
mmodrm1,2,dst, /* MODRM 2,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* ADC dst:Ew,src:Dw */
adc4 cmac14struc data(
.adc3,2,
specE,modw,
specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,2,dst, /* MODRM 2,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* ADC dst:Ab,src:Db */
adc5 cmac9struc data(
.adc4,2,
specA,modb,
specD,modb,
mdbn,14h, /* DB 14H */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* ADC dst:Aw,src:Db */
adc6 cmac9struc data(
.adc5,2,
specA,modw,
specD,modb,
mdbn,15h, /* DB 15H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* ADC dst:Aw,src:Dw */
adc7 cmac9struc data(
.adc6,2,
specA,modw,
specD,modw,
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 1 10/5/81 PAGE 3
mdbn,15h, /* DB 15H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* ADC dst:Eb,src:Rb */
adc8 cmac12struc data(
.adc7,2,
specE,modb,
specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,10h, /* DB 10H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* ADC dst:Ew,src:Rw */
adc9 cmac12struc data(
.adc8,2,
specE,modw,
specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,11h, /* DB 11H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* ADC dst:Rb,src:Eb */
adc10 cmac12struc data(
.adc9,2,
specR,modb,
specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,12h, /* DB 12H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* ADC dst:Rw,src:Ew */
adc11 cmac12struc public data(
.adc10,2,
specR,modw,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,13h, /* DB 13H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* ADD dst:Eb,src:Db */
add1 cmac14struc data(
nil,2,
specE,modb,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,80h, /* DB 80H */
mmodrm1,0,dst, /* MODRM 0,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* ADD dst:Ew,src:Db */
add2 cmac14struc data(
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 1 10/5/81 PAGE 4
.add1,2,
specE,modw,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,0,dst, /* MODRM 0,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* ADD dst:Ew,src:Dsb */
add3 cmac14struc data(
.add2,2,
specE,modw,
specD,modsb,
msegfix,dst, /* SEGFIX dst */
mdbn,83h, /* DB 83H */
mmodrm1,0,dst, /* MODRM 0,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* ADD dst:Ew,src:Dw */
add4 cmac14struc data(
.add3,2,
specE,modw,
specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,0,dst, /* MODRM 0,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* ADD dst:Ab,src:Db */
add5 cmac9struc data(
.add4,2,
specA,modb,
specD,modb,
mdbn,04h, /* DB 04H */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* ADD dst:Aw,src:Db */
add6 cmac9struc data(
.add5,2,
specA,modw,
specD,modb,
mdbn,05h, /* DB 05H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* ADD dst:Aw,src:Dw */
add7 cmac9struc data(
.add6,2,
specA,modw,
specD,modw,
mdbn,05h, /* DB 05H */
mdwf,src, /* DW src */
mendm), /* ENDM */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 1 10/5/81 PAGE 5
/* ADD dst:Eb,src:Rb */
add8 cmac12struc data(
.add7,2,
specE,modb,
specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0, /* DB 00H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* ADD dst:Ew,src:Rw */
add9 cmac12struc data(
.add8,2,
specE,modw,
specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,1, /* DB 01H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* ADD dst:Rb,src:Eb */
add10 cmac12struc data(
.add9,2,
specR,modb,
specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,2, /* DB 02H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* ADD dst:Rw,src:Ew */
add11 cmac12struc public data(
.add10,2,
specR,modw,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,3, /* DB 03H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* AND dst:Eb,src:Db */
and1 cmac14struc data(
nil,2,
specE,modb,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,80h, /* DB 80H */
mmodrm1,4,dst, /* MODRM 4,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* AND dst:Ew,src:Db */
and2 cmac14struc data(
.and1,2,
specE,modw,specD,modb,
msegfix,dst, /* SEGFIX dst */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 1 10/5/81 PAGE 6
mdbn,81h, /* DB 81H */
mmodrm1,4,dst, /* MODRM 4,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* AND dst:Ew,src:Dw */
and3 cmac14struc data(
.and2,2,
specE,modw,specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,4,dst, /* MODRM 4,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* AND dst:Ab,src:Db */
and4 cmac9struc data(
.and3,2,
specA,modb,specD,modb,
mdbn,24h, /* DB 24H */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* AND dst:Aw,src:Db */
and5 cmac9struc data(
.and4,2,
specA,modw,specD,modb,
mdbn,25h, /* DB 25H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* AND dst:Aw,src:Dw */
and6 cmac9struc data(
.and5,2,
specA,modw,specD,modw,
mdbn,25h, /* DB 25H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* AND dst:Eb,src:Rb */
and7 cmac12struc data(
.and6,2,
specE,modb,specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,20h, /* DB 20H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* AND dst:Ew,src:Rw */
and8 cmac12struc data(
.and7,2,
specE,modw,specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,21h, /* DB 21H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm),
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 1 10/5/81 PAGE 7
/* AND dst:Rb,src:Eb */
and9 cmac12struc data(
.and8,2,
specR,modb,specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,22h, /* DB 22H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* AND dst:Rw,src:Ew */
and10 cmac12struc public data(
.and9,2,
specR,modw,specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,23h, /* DB 23H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* CALL adr:Ew */
call1 cmac10struc data(
nil,1,
specE,modw,
msegfix,adr, /* SEGFIX adr */
mdbn,0ffh, /* DB 0FFH */
mmodrm1,2,adr, /* MODRM 2,adr */
mendm), /* ENDM */
/* CALL adr:Cb */
call2 cmac7struc data(
.call1,1,
specC,modb,
mdbn,0e8h, /* DB 0E8H */
mrelw,adr, /* RELW adr */
mendm), /* ENDM */
/* CALL adr:Cw */
call3 cmac7struc public data(
.call2,1,
specC,modw,
mdbn,0e8h, /* DB 0E8H */
mrelw,adr, /* RELW adr */
mendm), /* ENDM */
/* CALLF adr:Ed */
callf1 cmac10struc data(
nil,1,
specE,modd,
msegfix,adr, /* SEGFIX adr */
mdbn,0ffh, /* DB 0FFH */
mmodrm1,3,adr, /* MODRM 3,adr */
mendm), /* ENDM */
/* CALLF adr:Cd */
callf2 cmac7struc public data(
.callf1,1,
specC,modd,
mdbn,9ah, /* DB 9AH */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 1 10/5/81 PAGE 8
mddf,adr, /* DD adr */
mendm), /* ENDM */
/* CBW */
cbw1 cmac3struc public data(
nil,0,
mdbn,98h, /* DB 98H */
mendm), /* ENDM */
/* CLC */
clc1 cmac3struc public data(
nil,0,
mdbn,0f8h, /* DB 0F8H */
mendm), /* ENDM */
/* CLD */
cld1 cmac3struc public data(
nil,0,
mdbn,0fch, /* DB 0FCH */
mendm), /* ENDM */
/* CLI */
cli1 cmac3struc public data(
nil,0,
mdbn,0fah, /* DB 0FAH */
mendm), /* ENDM */
/* CMC */
cmc1 cmac3struc public data(
nil,0,
mdbn,0f5h, /* DB 0F5H */
mendm), /* ENDM */
/* CMP dst:Eb,src:Db */
cmp1 cmac14struc data(
nil,2,
specE,modb,specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,80h, /* DB 80H */
mmodrm1,7,dst, /* MODRM 7,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* CMP dst:Ew,src:Db */
cmp2 cmac14struc data(
.cmp1,2,
specE,modw,specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,7,dst, /* MODRM 7,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* CMP dst:Ew,src:Dsb */
cmp3 cmac14struc data(
.cmp2,2,
specE,modw,specD,modsb,
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 1 10/5/81 PAGE 9
msegfix,dst, /* SEGFIX dst */
mdbn,83h, /* DB 83H */
mmodrm1,7,dst, /* MODRM 7,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* CMP dst:Ew,src:Dw */
cmp4 cmac14struc data(
.cmp3,2,
specE,modw,specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,7,dst, /* MODRM 7,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* CMP dst:Ab,src:Db */
cmp5 cmac9struc data(
.cmp4,2,
specA,modb,specD,modb,
mdbn,3ch, /* DB 3CH */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* CMP dst:Aw,src:Db */
cmp6 cmac9struc data(
.cmp5,2,
specA,modw,specD,modb,
mdbn,3dh, /* DB 3DH */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* CMP dst:Aw,src:Dw */
cmp7 cmac9struc data(
.cmp6,2,
specA,modw,specD,modw,
mdbn,3dh, /* DB 3DH */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* CMP dst:Eb,src:Rb */
cmp8 cmac12struc data(
.cmp7,2,
specE,modb,specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,38h, /* DB 38H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* CMP dst:Ew,src:Rw */
cmp9 cmac12struc data(
.cmp8,2,
specE,modw,specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,39h, /* DB 39H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 1 10/5/81 PAGE 10
/* CMP dst:Rb,src:Eb */
cmp10 cmac12struc data(
.cmp9,2,
specR,modb,specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,3ah, /* DB 3AH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* CMP dst:Rw,src:Ew */
cmp11 cmac12struc public data(
.cmp10,2,
specR,modw,specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,3bh, /* DB 3BH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm); /* ENDM */
19 1 end$module cmac1;
MODULE INFORMATION:
CODE AREA SIZE = 0000H 0D
CONSTANT AREA SIZE = 02EFH 751D
VARIABLE AREA SIZE = 0000H 0D
MAXIMUM STACK SIZE = 0000H 0D
826 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,523 @@
$title ('CODEMACRO DEFINITIONS - PART 1')
cmac1:
do;
$include (:f1:macro.lit)
$include (:f1:cmacd.lit)
$include (:f1:equals.lit)
$include (:f1:cmac.lit)
/* Code-macro table: */
dcl
/* AAA */
aaa1 cmac3struc public data(
nil,0,
mdbn,37h, /* DB 37H */
mendm), /* ENDM */
/* AAD */
aad1 cmac4struc public data(
nil,0,
mdwn,0d5h,0ah, /* DW 0AD5H */
mendm), /* ENDM */
/* AAM */
aam1 cmac4struc public data(
nil,0,
mdwn,0d4h,0ah, /* DW 0AD4H */
mendm), /* ENDM */
/* AAS */
aas1 cmac3struc public data(
nil,0,
mdbn,3fh, /* DB 3FH */
mendm), /* ENDM */
/* ADC dst:Eb,src:Db */
adc1 cmac14struc data(
nil,2,
specE,modb,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,80h, /* DB 80H */
mmodrm1,2,dst, /* MODRM 2,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* ADC dst:Ew,src:Db */
adc2 cmac14struc data(
.adc1,2,
specE,modw,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,2,dst, /* MODRM 2,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* ADC dst:Ew,src:Dsb */
adc3 cmac14struc data(
.adc2,2,
specE,modw,
specD,modsb,
msegfix,dst, /* SEGFIX dst */
mdbn,83h, /* DB 83H */
mmodrm1,2,dst, /* MODRM 2,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* ADC dst:Ew,src:Dw */
adc4 cmac14struc data(
.adc3,2,
specE,modw,
specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,2,dst, /* MODRM 2,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* ADC dst:Ab,src:Db */
adc5 cmac9struc data(
.adc4,2,
specA,modb,
specD,modb,
mdbn,14h, /* DB 14H */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* ADC dst:Aw,src:Db */
adc6 cmac9struc data(
.adc5,2,
specA,modw,
specD,modb,
mdbn,15h, /* DB 15H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* ADC dst:Aw,src:Dw */
adc7 cmac9struc data(
.adc6,2,
specA,modw,
specD,modw,
mdbn,15h, /* DB 15H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* ADC dst:Eb,src:Rb */
adc8 cmac12struc data(
.adc7,2,
specE,modb,
specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,10h, /* DB 10H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* ADC dst:Ew,src:Rw */
adc9 cmac12struc data(
.adc8,2,
specE,modw,
specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,11h, /* DB 11H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* ADC dst:Rb,src:Eb */
adc10 cmac12struc data(
.adc9,2,
specR,modb,
specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,12h, /* DB 12H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* ADC dst:Rw,src:Ew */
adc11 cmac12struc public data(
.adc10,2,
specR,modw,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,13h, /* DB 13H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* ADD dst:Eb,src:Db */
add1 cmac14struc data(
nil,2,
specE,modb,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,80h, /* DB 80H */
mmodrm1,0,dst, /* MODRM 0,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* ADD dst:Ew,src:Db */
add2 cmac14struc data(
.add1,2,
specE,modw,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,0,dst, /* MODRM 0,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* ADD dst:Ew,src:Dsb */
add3 cmac14struc data(
.add2,2,
specE,modw,
specD,modsb,
msegfix,dst, /* SEGFIX dst */
mdbn,83h, /* DB 83H */
mmodrm1,0,dst, /* MODRM 0,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* ADD dst:Ew,src:Dw */
add4 cmac14struc data(
.add3,2,
specE,modw,
specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,0,dst, /* MODRM 0,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* ADD dst:Ab,src:Db */
add5 cmac9struc data(
.add4,2,
specA,modb,
specD,modb,
mdbn,04h, /* DB 04H */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* ADD dst:Aw,src:Db */
add6 cmac9struc data(
.add5,2,
specA,modw,
specD,modb,
mdbn,05h, /* DB 05H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* ADD dst:Aw,src:Dw */
add7 cmac9struc data(
.add6,2,
specA,modw,
specD,modw,
mdbn,05h, /* DB 05H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* ADD dst:Eb,src:Rb */
add8 cmac12struc data(
.add7,2,
specE,modb,
specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0, /* DB 00H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* ADD dst:Ew,src:Rw */
add9 cmac12struc data(
.add8,2,
specE,modw,
specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,1, /* DB 01H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* ADD dst:Rb,src:Eb */
add10 cmac12struc data(
.add9,2,
specR,modb,
specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,2, /* DB 02H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* ADD dst:Rw,src:Ew */
add11 cmac12struc public data(
.add10,2,
specR,modw,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,3, /* DB 03H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* AND dst:Eb,src:Db */
and1 cmac14struc data(
nil,2,
specE,modb,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,80h, /* DB 80H */
mmodrm1,4,dst, /* MODRM 4,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* AND dst:Ew,src:Db */
and2 cmac14struc data(
.and1,2,
specE,modw,specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,4,dst, /* MODRM 4,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* AND dst:Ew,src:Dw */
and3 cmac14struc data(
.and2,2,
specE,modw,specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,4,dst, /* MODRM 4,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* AND dst:Ab,src:Db */
and4 cmac9struc data(
.and3,2,
specA,modb,specD,modb,
mdbn,24h, /* DB 24H */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* AND dst:Aw,src:Db */
and5 cmac9struc data(
.and4,2,
specA,modw,specD,modb,
mdbn,25h, /* DB 25H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* AND dst:Aw,src:Dw */
and6 cmac9struc data(
.and5,2,
specA,modw,specD,modw,
mdbn,25h, /* DB 25H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* AND dst:Eb,src:Rb */
and7 cmac12struc data(
.and6,2,
specE,modb,specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,20h, /* DB 20H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* AND dst:Ew,src:Rw */
and8 cmac12struc data(
.and7,2,
specE,modw,specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,21h, /* DB 21H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm),
/* AND dst:Rb,src:Eb */
and9 cmac12struc data(
.and8,2,
specR,modb,specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,22h, /* DB 22H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* AND dst:Rw,src:Ew */
and10 cmac12struc public data(
.and9,2,
specR,modw,specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,23h, /* DB 23H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* CALL adr:Ew */
call1 cmac10struc data(
nil,1,
specE,modw,
msegfix,adr, /* SEGFIX adr */
mdbn,0ffh, /* DB 0FFH */
mmodrm1,2,adr, /* MODRM 2,adr */
mendm), /* ENDM */
/* CALL adr:Cb */
call2 cmac7struc data(
.call1,1,
specC,modb,
mdbn,0e8h, /* DB 0E8H */
mrelw,adr, /* RELW adr */
mendm), /* ENDM */
/* CALL adr:Cw */
call3 cmac7struc public data(
.call2,1,
specC,modw,
mdbn,0e8h, /* DB 0E8H */
mrelw,adr, /* RELW adr */
mendm), /* ENDM */
/* CALLF adr:Ed */
callf1 cmac10struc data(
nil,1,
specE,modd,
msegfix,adr, /* SEGFIX adr */
mdbn,0ffh, /* DB 0FFH */
mmodrm1,3,adr, /* MODRM 3,adr */
mendm), /* ENDM */
/* CALLF adr:Cd */
callf2 cmac7struc public data(
.callf1,1,
specC,modd,
mdbn,9ah, /* DB 9AH */
mddf,adr, /* DD adr */
mendm), /* ENDM */
/* CBW */
cbw1 cmac3struc public data(
nil,0,
mdbn,98h, /* DB 98H */
mendm), /* ENDM */
/* CLC */
clc1 cmac3struc public data(
nil,0,
mdbn,0f8h, /* DB 0F8H */
mendm), /* ENDM */
/* CLD */
cld1 cmac3struc public data(
nil,0,
mdbn,0fch, /* DB 0FCH */
mendm), /* ENDM */
/* CLI */
cli1 cmac3struc public data(
nil,0,
mdbn,0fah, /* DB 0FAH */
mendm), /* ENDM */
/* CMC */
cmc1 cmac3struc public data(
nil,0,
mdbn,0f5h, /* DB 0F5H */
mendm), /* ENDM */
/* CMP dst:Eb,src:Db */
cmp1 cmac14struc data(
nil,2,
specE,modb,specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,80h, /* DB 80H */
mmodrm1,7,dst, /* MODRM 7,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* CMP dst:Ew,src:Db */
cmp2 cmac14struc data(
.cmp1,2,
specE,modw,specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,7,dst, /* MODRM 7,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* CMP dst:Ew,src:Dsb */
cmp3 cmac14struc data(
.cmp2,2,
specE,modw,specD,modsb,
msegfix,dst, /* SEGFIX dst */
mdbn,83h, /* DB 83H */
mmodrm1,7,dst, /* MODRM 7,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* CMP dst:Ew,src:Dw */
cmp4 cmac14struc data(
.cmp3,2,
specE,modw,specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,7,dst, /* MODRM 7,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* CMP dst:Ab,src:Db */
cmp5 cmac9struc data(
.cmp4,2,
specA,modb,specD,modb,
mdbn,3ch, /* DB 3CH */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* CMP dst:Aw,src:Db */
cmp6 cmac9struc data(
.cmp5,2,
specA,modw,specD,modb,
mdbn,3dh, /* DB 3DH */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* CMP dst:Aw,src:Dw */
cmp7 cmac9struc data(
.cmp6,2,
specA,modw,specD,modw,
mdbn,3dh, /* DB 3DH */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* CMP dst:Eb,src:Rb */
cmp8 cmac12struc data(
.cmp7,2,
specE,modb,specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,38h, /* DB 38H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* CMP dst:Ew,src:Rw */
cmp9 cmac12struc data(
.cmp8,2,
specE,modw,specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,39h, /* DB 39H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* CMP dst:Rb,src:Eb */
cmp10 cmac12struc data(
.cmp9,2,
specR,modb,specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,3ah, /* DB 3AH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* CMP dst:Rw,src:Ew */
cmp11 cmac12struc public data(
.cmp10,2,
specR,modw,specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,3bh, /* DB 3BH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm); /* ENDM */
end$module cmac1;

View File

@@ -0,0 +1,604 @@
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 2 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE CMAC2
OBJECT MODULE PLACED IN CMAC2.OBJ
COMPILER INVOKED BY: :F0: CMAC2.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100)
$title ('CODEMACRO DEFINITIONS - PART 2')
1 cmac2:
do;
/*
modified 6/16/81 R. Silberstein
*/
$include (:f1:macro.lit)
= $nolist
$include (:f1:cmacd.lit)
= $nolist
$include (:f1:equals.lit)
= $nolist
$include (:f1:cmac.lit)
= $nolist
18 1 dcl
/* CMPS dst:Eb,src:Eb */
cmps1 cmac12struc data(
nil,2,
specE,modb,specE,modb,
mnosegfix,res,dst, /* NOSEGFIX ES,dst */
msegfix,src, /* SEGFIX src */
mdbn,0a6h, /* DB 0A6H */
mendm), /* ENDM */
/* CMPS dst:Ew,src:Ew */
cmps2 cmac12struc public data(
.cmps1,2,
specE,modw,specE,modw,
mnosegfix,res,dst, /* NOSEGFIX ES,dst */
msegfix,src, /* SEGFIX src */
mdbn,0a7h, /* DB 0A7H */
mendm), /* ENDM */
/* CMPSB */
CMPSB1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0A6H,
MENDM),
/* CMPSW */
CMPSW1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0A7H,
MENDM),
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 2 10/5/81 PAGE 2
/* CWD */
cwd1 cmac3struc public data(
nil,0,
mdbn,99h, /* DB 99H */
mendm), /* ENDM */
/* DAA */
daa1 cmac3struc public data(
nil,0,
mdbn,27h, /* DB 27H */
mendm), /* ENDM */
/* DAS */
das1 cmac3struc public data(
nil,0,
mdbn,2fh, /* DB 2FH */
mendm), /* ENDM */
/* DEC dst:Eb */
dec1 cmac10struc data(
nil,1,
specE,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0feh, /* DB 0FEH */
mmodrm1,1,dst, /* MODRM 1,dst */
mendm), /* ENDM */
/* DEC dst:Ew */
dec2 cmac10struc data(
.dec1,1,
specE,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,0ffh, /* DB 0FFH */
mmodrm1,1,dst, /* MODRM 1,dst */
mendm), /* ENDM */
/* DEC dst:Rw */
dec3 cmac12struc public data(
.dec2,1,
specR,modw,
mdbit, /* DBIT 5(9H),3(dst) */
mnumberbits,5,9h,
mformalbits,3,dst,0,
mendbit,
mendm),
/* DIV divisor:Eb */
div1 cmac10struc data(
nil,1,
specE,modb,
msegfix,divisor, /* SEGFIX divisor */
mdbn,0f6h, /* DB 6FH */
mmodrm1,6,divisor, /* MODRM divisor */
mendm), /* ENDM */
/* DIV divisor:Ew */
div2 cmac10struc public data(
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 2 10/5/81 PAGE 3
.div1,1,
specE,modw,
msegfix,divisor, /* SEGFIX divisor */
mdbn,0f7h, /* DB 0F7H */
mmodrm1,6,divisor, /* MODRM 6,divisor */
mendm), /* ENDM */
/* ESC opcode:Db(0,63),src:Eb */
esc1 cmac21struc data(
nil,2,
specD,modb+doublerange+numberrange,0,63,
specE,modb,
msegfix,src, /* SEGFIX src */
mdbit, /* DBIT 5(1BH),3(opcode(3)) */
mnumberbits,5,1bh,
mformalbits,3,opcode,3,
mendbit,
mmodrm2,opcode,src, /* MODRM opcode,src */
mendm), /* ENDM */
/* ESC opcode:Db(0,63),src:Ew */
esc2 cmac21struc data(
.esc1,2,
specD,modb+doublerange+numberrange,0,63,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbit, /* DBIT 5(1BH),3(opcode(3)) */
mnumberbits,5,1bh,
mformalbits,3,opcode,3,
mendbit,
mmodrm2,opcode,src, /* MODRM opcode,src */
mendm), /* ENDM */
/* ESC opcode:Db(0,63),src:Ed */
esc3 cmac21struc public data(
.esc2,2,
specD,modb+doublerange+numberrange,0,63,
specE,modd,
msegfix,src, /* SEGFIX src */
mdbit, /* DBIT 5(1BH),3(opcode(3)) */
mnumberbits,5,1bh,
mformalbits,3,opcode,3,
mendbit,
mmodrm2,opcode,src, /* MODRM opcode,src */
mendm), /* ENDM */
/* HLT */
hlt1 cmac3struc public data(
nil,0,
mdbn,0f4h, /* DB 0F4H */
mendm), /* ENDM */
/* IDIV divisor:Eb */
idiv1 cmac10struc data(
nil,1,
specE,modb,
msegfix,divisor, /* SEGFIX divisor */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 2 10/5/81 PAGE 4
mdbn,0f6h, /* DB 0F6H */
mmodrm1,7,divisor, /* MODRM 7,divisor */
mendm), /* ENDM */
/* IDIV divisor:Ew */
idiv2 cmac10struc public data(
.idiv1,1,
specE,modw,
msegfix,divisor, /* SEGFIX divisor */
mdbn,0f7h, /* DB 0F7H */
mmodrm1,7,divisor, /* MODRM 7,divisor */
mendm),
/* IMUL mplier:Eb */
imul1 cmac10struc data(
nil,1,
specE,modb,
msegfix,mplier, /* SEGFIX mplier */
mdbn,0f6h, /* DB 0F6H */
mmodrm1,5,mplier, /* MODRM 5,mplier */
mendm), /* ENDM */
/* IMUL mplier:Ew */
imul2 cmac10struc public data(
.imul1,1,
specE,modw,
msegfix,mplier, /* SEGFIX mplier */
mdbn,0f7h, /* DB 0F7H */
mmodrm1,5,mplier, /* MODRM 5,mplier */
mendm), /* ENDM */
/* IN dst:Ab,port:Db */
in1 cmac9struc data(
nil,2,
specA,modb,specD,modb,
mdbn,0e4h, /* DB 0E4H */
mdbf,port, /* DB port */
mendm), /* ENDM */
/* IN dst:Aw,port:Db */
in2 cmac9struc data(
.in1,2,
specA,modw,specD,modb,
mdbn,0e5h, /* DB 0E5H */
mdbf,port, /* DB port */
mendm), /* ENDM */
/* IN dst:Ab,port:Rw(DX) */
in3 cmac8struc data(
.in2,2,
specA,modb,
specR,modw+singlerange+register$range,rdx,
mdbn,0ech, /* DB 0ECH */
mendm),
/* IN dst:Aw,port:Rw(DX) */
in4 cmac8struc public data(
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 2 10/5/81 PAGE 5
.in3,2,
specA,modw,
specR,modw+singlerange+register$range,rdx,
mdbn,0edh, /* DB 0EDH */
mendm), /* ENDM */
/* INC dst:Eb */
inc1 cmac10struc data(
nil,1,
specE,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0feh, /* DB 0FEH */
mmodrm1,0,dst, /* MODRM 0,dst */
mendm), /* ENDM */
/* INC dst:Ew */
inc2 cmac10struc data(
.inc1,1,
specE,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,0ffh, /* DB 0FFH */
mmodrm1,0,dst, /* MODRM 0,dst */
mendm), /* ENDM */
/* INC dst:Rw */
inc3 cmac12struc public data(
.inc2,1,
specR,modw,
mdbit, /* DBIT 5(08H),3(dst(0)) */
mnumberbits,5,08h,
mformalbits,3,dst,0,
mendbit,
mendm), /* ENDM */
/* INT itype:Db */
int1 cmac7struc data(
nil,1,
specD,modb,
mdbn,0cdh, /* DB 0CDH */
mdbf,itype, /* DB itype */
mendm), /* ENDM */
/* INT itype:Db(3) */
int2 cmac6struc public data(
.int1,1,
specD,modb+singlerange,3,
mdbn,0cch, /* DB 0CCH */
mendm), /* ENDM */
/* INTO */
into1 cmac3struc public data(
nil,0,
mdbn,0ceh, /* DB 0CEH */
mendm), /* ENDM */
/* IRET */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 2 10/5/81 PAGE 6
iret1 cmac3struc public data(
nil,0,
mdbn,0cfh, /* DB 0CFH */
mendm), /* ENDM */
/* JA place:Cb */
ja1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,77h, /* DB 77H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JAE place:Cb */
jae1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,73h, /* DB 73H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JB place:Cb */
jb1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,72h, /* DB 72H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JBE place:Cb */
jbe1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,76h, /* DB 76H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JCXZ place:Cb */
jcxz1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,0e3h, /* DB 0E3H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JE place:Cb */
je1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,74h, /* DB 74H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JG place:Cb */
jg1 cmac7struc public data(
nil,1,
specC,modb,
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 2 10/5/81 PAGE 7
mdbn,7fh, /* DB 7FH */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JGE place:Cb */
jge1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,7dh, /* DB 7DH */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JL place:Cb */
jl1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,7ch, /* DB 7CH */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JLE place:Cb */
jle1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,7eh, /* DB 7EH */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JMP place:Ew */
jmp1 cmac10struc data(
nil,1,
specE,modw,
msegfix,place, /* SEGFIX place */
mdbn,0ffh, /* DB 0FFH */
mmodrm1,4,place, /* MODRM 4,place */
mendm), /* ENDM */
/* JMP place:Cw */
jmp2 cmac7struc public data(
.jmp1,1,
specC,modw,
mdbn,0e9h, /* DB 0E9H */
mrelw,place, /* RELW place */
mendm), /* ENDM */
/* JMPF place:Md */
jmpf1 cmac10struc data(
nil,1,
specM,modd,
msegfix,place, /* SEGFIX place */
mdbn,0ffh, /* DB 0FFH */
mmodrm1,5,place, /* MODRM 5,place */
mendm), /* ENDM */
/* JMPF place:Cd */
jmpf2 cmac7struc public data(
.jmpf1,1,
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 2 10/5/81 PAGE 8
specC,modd,
mdbn,0eah, /* DB 0EAH */
mddf,place, /* DD place */
mendm), /* ENDM */
/* JMPS place:Cb */
jmps1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,0ebh, /* DB 0EBH */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JNE place:Cb */
jne1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,75h, /* DB 75H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JNO place:Cb */
jno1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,71h, /* DB 71H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JNP place:Cb */
jnp1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,7bh, /* DB 7BH */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JNS place:Cb */
jns1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,79h, /* DB 79H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JO place:Cb */
jo1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,70h, /* DB 70H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JP place:Cb */
jp1 cmac7struc public data(
nil,1,
specC,modb,
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 2 10/5/81 PAGE 9
mdbn,7ah, /* DB 7AH */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JS place:Cb */
js1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,78h, /* DB 78H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* LAHF */
lahf1 cmac3struc public data(
nil,0,
mdbn,9fh, /* DB 9FH */
mendm), /* ENDM */
/* LDS dst:Rw,src:Ed */
lds1 cmac12struc public data(
nil,2,
specR,modw,specE,modd,
msegfix,src, /* SEGFIX src */
mdbn,0c5h, /* DB 0C5H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* LES dst:Rw,src:Ed */
les1 cmac12struc public data(
nil,2,
specR,modw,specE,modd,
msegfix,src, /* SEGFIX src */
mdbn,0c4h, /* DB 0C4H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* LEA dst:Rw,src:M */
lea1 cmac10struc public data(
nil,2,
specR,modw,specM,nomod,
mdbn,8dh, /* DB 8DH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* LOCK prefx */
lock1 cmac3struc public data(
nil,0+prefix$on,
mdbn,0f0h, /* DB 0F0H */
mendm), /* ENDM */
/* LODS SI$ptr:Eb */
lods1 cmac7struc data(
nil,1,
specE,modb,
msegfix,si$ptr, /* SEGFIX SI$ptr */
mdbn,0ach, /* DB 0ACH */
mendm), /* ENDM */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 2 10/5/81 PAGE 10
/* LODS SI$ptr:Ew */
lods2 cmac7struc public data(
.lods1,1,
specE,modw,
msegfix,si$ptr, /* SEGFIX SI$ptr */
mdbn,0adh, /* DB 0AdH */
mendm), /* ENDM */
/* LODSB */
LODSB1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0ACH,
MENDM),
/* LODSW */
LODSW1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0ADH,
MENDM),
/* LOOP place:Cb */
loop1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,0e2h, /* DB 0E2H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* LOOPE place:Cb */
loope1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,0e1h, /* DB 0E1H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* LOOPNE place:Cb */
loopne1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,0e0h, /* DB 0E0H */
mrelb,place, /* RELB place */
mendm); /* ENDM */
19 1 end$module cmac2;
MODULE INFORMATION:
CODE AREA SIZE = 0000H 0D
CONSTANT AREA SIZE = 02CEH 718D
VARIABLE AREA SIZE = 0000H 0D
MAXIMUM STACK SIZE = 0000H 0D
852 LINES READ
0 PROGRAM ERROR(S)
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 2 10/5/81 PAGE 11
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,549 @@
$title ('CODEMACRO DEFINITIONS - PART 2')
cmac2:
do;
/*
modified 6/16/81 R. Silberstein
*/
$include (:f1:macro.lit)
$include (:f1:cmacd.lit)
$include (:f1:equals.lit)
$include (:f1:cmac.lit)
dcl
/* CMPS dst:Eb,src:Eb */
cmps1 cmac12struc data(
nil,2,
specE,modb,specE,modb,
mnosegfix,res,dst, /* NOSEGFIX ES,dst */
msegfix,src, /* SEGFIX src */
mdbn,0a6h, /* DB 0A6H */
mendm), /* ENDM */
/* CMPS dst:Ew,src:Ew */
cmps2 cmac12struc public data(
.cmps1,2,
specE,modw,specE,modw,
mnosegfix,res,dst, /* NOSEGFIX ES,dst */
msegfix,src, /* SEGFIX src */
mdbn,0a7h, /* DB 0A7H */
mendm), /* ENDM */
/* CMPSB */
CMPSB1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0A6H,
MENDM),
/* CMPSW */
CMPSW1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0A7H,
MENDM),
/* CWD */
cwd1 cmac3struc public data(
nil,0,
mdbn,99h, /* DB 99H */
mendm), /* ENDM */
/* DAA */
daa1 cmac3struc public data(
nil,0,
mdbn,27h, /* DB 27H */
mendm), /* ENDM */
/* DAS */
das1 cmac3struc public data(
nil,0,
mdbn,2fh, /* DB 2FH */
mendm), /* ENDM */
/* DEC dst:Eb */
dec1 cmac10struc data(
nil,1,
specE,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0feh, /* DB 0FEH */
mmodrm1,1,dst, /* MODRM 1,dst */
mendm), /* ENDM */
/* DEC dst:Ew */
dec2 cmac10struc data(
.dec1,1,
specE,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,0ffh, /* DB 0FFH */
mmodrm1,1,dst, /* MODRM 1,dst */
mendm), /* ENDM */
/* DEC dst:Rw */
dec3 cmac12struc public data(
.dec2,1,
specR,modw,
mdbit, /* DBIT 5(9H),3(dst) */
mnumberbits,5,9h,
mformalbits,3,dst,0,
mendbit,
mendm),
/* DIV divisor:Eb */
div1 cmac10struc data(
nil,1,
specE,modb,
msegfix,divisor, /* SEGFIX divisor */
mdbn,0f6h, /* DB 6FH */
mmodrm1,6,divisor, /* MODRM divisor */
mendm), /* ENDM */
/* DIV divisor:Ew */
div2 cmac10struc public data(
.div1,1,
specE,modw,
msegfix,divisor, /* SEGFIX divisor */
mdbn,0f7h, /* DB 0F7H */
mmodrm1,6,divisor, /* MODRM 6,divisor */
mendm), /* ENDM */
/* ESC opcode:Db(0,63),src:Eb */
esc1 cmac21struc data(
nil,2,
specD,modb+doublerange+numberrange,0,63,
specE,modb,
msegfix,src, /* SEGFIX src */
mdbit, /* DBIT 5(1BH),3(opcode(3)) */
mnumberbits,5,1bh,
mformalbits,3,opcode,3,
mendbit,
mmodrm2,opcode,src, /* MODRM opcode,src */
mendm), /* ENDM */
/* ESC opcode:Db(0,63),src:Ew */
esc2 cmac21struc data(
.esc1,2,
specD,modb+doublerange+numberrange,0,63,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbit, /* DBIT 5(1BH),3(opcode(3)) */
mnumberbits,5,1bh,
mformalbits,3,opcode,3,
mendbit,
mmodrm2,opcode,src, /* MODRM opcode,src */
mendm), /* ENDM */
/* ESC opcode:Db(0,63),src:Ed */
esc3 cmac21struc public data(
.esc2,2,
specD,modb+doublerange+numberrange,0,63,
specE,modd,
msegfix,src, /* SEGFIX src */
mdbit, /* DBIT 5(1BH),3(opcode(3)) */
mnumberbits,5,1bh,
mformalbits,3,opcode,3,
mendbit,
mmodrm2,opcode,src, /* MODRM opcode,src */
mendm), /* ENDM */
/* HLT */
hlt1 cmac3struc public data(
nil,0,
mdbn,0f4h, /* DB 0F4H */
mendm), /* ENDM */
/* IDIV divisor:Eb */
idiv1 cmac10struc data(
nil,1,
specE,modb,
msegfix,divisor, /* SEGFIX divisor */
mdbn,0f6h, /* DB 0F6H */
mmodrm1,7,divisor, /* MODRM 7,divisor */
mendm), /* ENDM */
/* IDIV divisor:Ew */
idiv2 cmac10struc public data(
.idiv1,1,
specE,modw,
msegfix,divisor, /* SEGFIX divisor */
mdbn,0f7h, /* DB 0F7H */
mmodrm1,7,divisor, /* MODRM 7,divisor */
mendm),
/* IMUL mplier:Eb */
imul1 cmac10struc data(
nil,1,
specE,modb,
msegfix,mplier, /* SEGFIX mplier */
mdbn,0f6h, /* DB 0F6H */
mmodrm1,5,mplier, /* MODRM 5,mplier */
mendm), /* ENDM */
/* IMUL mplier:Ew */
imul2 cmac10struc public data(
.imul1,1,
specE,modw,
msegfix,mplier, /* SEGFIX mplier */
mdbn,0f7h, /* DB 0F7H */
mmodrm1,5,mplier, /* MODRM 5,mplier */
mendm), /* ENDM */
/* IN dst:Ab,port:Db */
in1 cmac9struc data(
nil,2,
specA,modb,specD,modb,
mdbn,0e4h, /* DB 0E4H */
mdbf,port, /* DB port */
mendm), /* ENDM */
/* IN dst:Aw,port:Db */
in2 cmac9struc data(
.in1,2,
specA,modw,specD,modb,
mdbn,0e5h, /* DB 0E5H */
mdbf,port, /* DB port */
mendm), /* ENDM */
/* IN dst:Ab,port:Rw(DX) */
in3 cmac8struc data(
.in2,2,
specA,modb,
specR,modw+singlerange+register$range,rdx,
mdbn,0ech, /* DB 0ECH */
mendm),
/* IN dst:Aw,port:Rw(DX) */
in4 cmac8struc public data(
.in3,2,
specA,modw,
specR,modw+singlerange+register$range,rdx,
mdbn,0edh, /* DB 0EDH */
mendm), /* ENDM */
/* INC dst:Eb */
inc1 cmac10struc data(
nil,1,
specE,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0feh, /* DB 0FEH */
mmodrm1,0,dst, /* MODRM 0,dst */
mendm), /* ENDM */
/* INC dst:Ew */
inc2 cmac10struc data(
.inc1,1,
specE,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,0ffh, /* DB 0FFH */
mmodrm1,0,dst, /* MODRM 0,dst */
mendm), /* ENDM */
/* INC dst:Rw */
inc3 cmac12struc public data(
.inc2,1,
specR,modw,
mdbit, /* DBIT 5(08H),3(dst(0)) */
mnumberbits,5,08h,
mformalbits,3,dst,0,
mendbit,
mendm), /* ENDM */
/* INT itype:Db */
int1 cmac7struc data(
nil,1,
specD,modb,
mdbn,0cdh, /* DB 0CDH */
mdbf,itype, /* DB itype */
mendm), /* ENDM */
/* INT itype:Db(3) */
int2 cmac6struc public data(
.int1,1,
specD,modb+singlerange,3,
mdbn,0cch, /* DB 0CCH */
mendm), /* ENDM */
/* INTO */
into1 cmac3struc public data(
nil,0,
mdbn,0ceh, /* DB 0CEH */
mendm), /* ENDM */
/* IRET */
iret1 cmac3struc public data(
nil,0,
mdbn,0cfh, /* DB 0CFH */
mendm), /* ENDM */
/* JA place:Cb */
ja1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,77h, /* DB 77H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JAE place:Cb */
jae1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,73h, /* DB 73H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JB place:Cb */
jb1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,72h, /* DB 72H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JBE place:Cb */
jbe1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,76h, /* DB 76H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JCXZ place:Cb */
jcxz1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,0e3h, /* DB 0E3H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JE place:Cb */
je1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,74h, /* DB 74H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JG place:Cb */
jg1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,7fh, /* DB 7FH */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JGE place:Cb */
jge1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,7dh, /* DB 7DH */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JL place:Cb */
jl1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,7ch, /* DB 7CH */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JLE place:Cb */
jle1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,7eh, /* DB 7EH */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JMP place:Ew */
jmp1 cmac10struc data(
nil,1,
specE,modw,
msegfix,place, /* SEGFIX place */
mdbn,0ffh, /* DB 0FFH */
mmodrm1,4,place, /* MODRM 4,place */
mendm), /* ENDM */
/* JMP place:Cw */
jmp2 cmac7struc public data(
.jmp1,1,
specC,modw,
mdbn,0e9h, /* DB 0E9H */
mrelw,place, /* RELW place */
mendm), /* ENDM */
/* JMPF place:Md */
jmpf1 cmac10struc data(
nil,1,
specM,modd,
msegfix,place, /* SEGFIX place */
mdbn,0ffh, /* DB 0FFH */
mmodrm1,5,place, /* MODRM 5,place */
mendm), /* ENDM */
/* JMPF place:Cd */
jmpf2 cmac7struc public data(
.jmpf1,1,
specC,modd,
mdbn,0eah, /* DB 0EAH */
mddf,place, /* DD place */
mendm), /* ENDM */
/* JMPS place:Cb */
jmps1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,0ebh, /* DB 0EBH */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JNE place:Cb */
jne1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,75h, /* DB 75H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JNO place:Cb */
jno1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,71h, /* DB 71H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JNP place:Cb */
jnp1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,7bh, /* DB 7BH */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JNS place:Cb */
jns1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,79h, /* DB 79H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JO place:Cb */
jo1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,70h, /* DB 70H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JP place:Cb */
jp1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,7ah, /* DB 7AH */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* JS place:Cb */
js1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,78h, /* DB 78H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* LAHF */
lahf1 cmac3struc public data(
nil,0,
mdbn,9fh, /* DB 9FH */
mendm), /* ENDM */
/* LDS dst:Rw,src:Ed */
lds1 cmac12struc public data(
nil,2,
specR,modw,specE,modd,
msegfix,src, /* SEGFIX src */
mdbn,0c5h, /* DB 0C5H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* LES dst:Rw,src:Ed */
les1 cmac12struc public data(
nil,2,
specR,modw,specE,modd,
msegfix,src, /* SEGFIX src */
mdbn,0c4h, /* DB 0C4H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* LEA dst:Rw,src:M */
lea1 cmac10struc public data(
nil,2,
specR,modw,specM,nomod,
mdbn,8dh, /* DB 8DH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* LOCK prefx */
lock1 cmac3struc public data(
nil,0+prefix$on,
mdbn,0f0h, /* DB 0F0H */
mendm), /* ENDM */
/* LODS SI$ptr:Eb */
lods1 cmac7struc data(
nil,1,
specE,modb,
msegfix,si$ptr, /* SEGFIX SI$ptr */
mdbn,0ach, /* DB 0ACH */
mendm), /* ENDM */
/* LODS SI$ptr:Ew */
lods2 cmac7struc public data(
.lods1,1,
specE,modw,
msegfix,si$ptr, /* SEGFIX SI$ptr */
mdbn,0adh, /* DB 0AdH */
mendm), /* ENDM */
/* LODSB */
LODSB1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0ACH,
MENDM),
/* LODSW */
LODSW1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0ADH,
MENDM),
/* LOOP place:Cb */
loop1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,0e2h, /* DB 0E2H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* LOOPE place:Cb */
loope1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,0e1h, /* DB 0E1H */
mrelb,place, /* RELB place */
mendm), /* ENDM */
/* LOOPNE place:Cb */
loopne1 cmac7struc public data(
nil,1,
specC,modb,
mdbn,0e0h, /* DB 0E0H */
mrelb,place, /* RELB place */
mendm); /* ENDM */
end$module cmac2;

View File

@@ -0,0 +1,527 @@
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 3 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE CMAC3
OBJECT MODULE PLACED IN CMAC3.OBJ
COMPILER INVOKED BY: :F0: CMAC3.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100)
$title ('CODEMACRO DEFINITIONS - PART 3')
1 cmac3:
do;
/*
modified 6/16/81 R. Silberstein
*/
$include (:f1:macro.lit)
= $nolist
$include (:f1:cmacd.lit)
= $nolist
$include (:f1:equals.lit)
= $nolist
$include (:f1:cmac.lit)
= $nolist
18 1 dcl
/* MOV dst:Eb,src:Db */
mov1 cmac14struc data(
nil,2,
specE,modb,specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0c6h, /* DB 0C6h */
mmodrm1,0,dst, /* MODRM 0,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* MOV dst:Ew,src:Db */
mov2 cmac14struc data(
.mov1,2,
specE,modw,specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0c7h, /* DB 0C7h */
mmodrm1,0,dst, /* MODRM 0,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* MOV dst:Ew,src:Dw */
mov3 cmac14struc data(
.mov2,2,
specE,modw,specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,0c7h, /* DB 0C7h */
mmodrm1,0,dst, /* MODRM 0,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 3 10/5/81 PAGE 2
/* MOV dst:Rb,src:Db */
mov4 cmac16struc data(
.mov3,2,
specR,modb,specD,modb,
mdbit, /* DBIT 5(10110B),3(dst(0)) */
mnumberbits,5,16h,
mformalbits,3,dst,0,
mendbit,
mdbf,src, /* DB src */
mendm), /* ENDM */
/* MOV dst:Rw,src:Db */
mov5 cmac16struc data(
.mov4,2,
specR,modw,specD,modb,
mdbit, /* DBIT 5(10111B),3(dst(0)) */
mnumberbits,5,17h,
mformalbits,3,dst,0,
mendbit,
mdwf,src, /* DW src */
mendm), /* ENDM */
/* MOV dst:Rw,src:Dw */
mov6 cmac16struc data(
.mov5,2,
specR,modw,specD,modw,
mdbit, /* DBIT 5(10111B),3(dst(0)) */
mnumberbits,5,17h,
mformalbits,3,dst,0,
mendbit,
mdwf,src, /* DW src */
mendm), /* ENDM */
/* MOV dst:Eb,src:Rb */
mov7 cmac12struc data(
.mov6,2,
specE,modb,specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,88h, /* DB 88H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* MOV dst:Ew,src:Rw */
mov8 cmac12struc data(
.mov7,2,
specE,modw,specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,89h, /* DB 89H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* MOV dst:Rb,src:Eb */
mov9 cmac12struc data(
.mov8,2,
specR,modb,specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,8ah, /* DB 8AH */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 3 10/5/81 PAGE 3
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* MOV dst:Rw,src:Ew */
mov10 cmac12struc data(
.mov9,2,
specR,modw,specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,8bh, /* DB 8BH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* MOV dst:Ew,src:S */
mov11 cmac12struc data(
.mov10,2,
specE,modw,specS,nomod,
msegfix,dst, /* SEGFIX dst */
mdbn,8ch, /* DB 8CH */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* MOV dst:Sd(ES),src:Ew */
mov12 cmac13struc data(
.mov11,2,
specS,modd+singlerange+registerrange,res,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,8eh, /* DB 8EH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* MOV dst:Sd(SS,DS),src:Ew */
mov13 cmac14struc data(
.mov12,2,
specS,modd+doublerange+registerrange,rss,rds,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,8eh, /* DB 8EH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* MOV dst:Ab,src:Xb */
mov14 cmac11struc data(
.mov13,2,
specA,modb,specX,modb,
msegfix,src, /* SEGFIX src */
mdbn,0a0h, /* DB 0A0H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* MOV dst:Aw,src:Xw */
mov15 cmac11struc data(
.mov14,2,
specA,modw,specX,modw,
msegfix,src, /* SEGFIX src */
mdbn,0a1h, /* DB 0A1H */
mdwf,src, /* DW src */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 3 10/5/81 PAGE 4
mendm), /* ENDM */
/* MOV dst:Xb,src:Ab */
mov16 cmac11struc data(
.mov15,2,
specX,modb,specA,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0a2h, /* DB 0A2H */
mdwf,dst, /* DW dst */
mendm), /* ENDM */
/* MOV dst:Xw,src:Aw */
mov17 cmac11struc public data(
.mov16,2,
specX,modw,specA,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,0a3h, /* DB 0A3H */
mdwf,dst, /* DW dst */
mendm), /* ENDM */
/* MOVS SI$ptr:Eb,DI$ptr:Eb */
movs1 cmac12struc data(
nil,2,
specE,modb,specE,modb,
mnosegfix,res,si$ptr, /* NOSEGFIX ES,SI$ptr */
msegfix,di$ptr, /* SEGFIX DI$ptr */
mdbn,0a4h, /* DB 0A4H */
mendm), /* ENDM */
/* MOVS SI$ptr:Ew,DI$ptr:Ew */
movs2 cmac12struc public data(
.movs1,2,
specE,modw,specE,modw,
mnosegfix,res,si$ptr, /* NOSEGFIX ES,SI$ptr */
msegfix,di$ptr, /* SEGFIX DI$ptr */
mdbn,0a5h, /* DB 0A5H */
mendm), /* ENDM */
/* MOVSB */
MOVSB1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0A4H,
MENDM),
/* MOVSW */
MOVSW1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0A5H,
MENDM),
/* MUL mplier:Eb */
mul1 cmac10struc data(
nil,1,
specE,modb,
msegfix,mplier, /* SEGFIX mplier */
mdbn,0f6h, /* DB 0F6H */
mmodrm1,4,mplier, /* MODRM 4,mplier */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 3 10/5/81 PAGE 5
mendm), /* ENDM */
/* MUL mplier:Ew */
mul2 cmac10struc public data(
.mul1,1,
specE,modw,
msegfix,mplier, /* SEGFIX mplier */
mdbn,0f7h, /* DB 0F7H */
mmodrm1,4,mplier, /* MODRM 4,mplier */
mendm), /* ENDM */
/* NEG dst:Eb */
neg1 cmac10struc data(
nil,1,
specE,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0f6h, /* DB 0F6H */
mmodrm1,3,dst, /* MODRM 3,dst */
mendm), /* ENDM */
/* NEG dst:Ew */
neg2 cmac10struc public data(
.neg1,1,
specE,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,0f7h, /* DB 0F7H */
mmodrm1,3,dst, /* MODRM 3,dst */
mendm), /* ENDM */
/* NOP */
nop1 cmac3struc public data(
nil,0,
mdbn,90h, /* DB 90H */
mendm), /* ENDM */
/* NOT dst:Eb */
not1 cmac10struc data(
nil,1,
specE,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0f6h, /* DB 0F6H */
mmodrm1,2,dst, /* MODRM 2,dst */
mendm), /* ENDM */
/* NOT dst:Ew */
not2 cmac10struc public data(
.not1,1,
specE,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,0f7h, /* DB 0F7H */
mmodrm1,2,dst, /* MODRM 2,dst */
mendm), /* ENDM */
/* OR dst:Eb,src:Db */
or1 cmac14struc data(
nil,2,
specE,modb,specD,modb,
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 3 10/5/81 PAGE 6
msegfix,dst, /* SEGFIX dst */
mdbn,80h, /* DB 80h */
mmodrm1,1,dst, /* MODRM 1,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* OR dst:Ew,src:Dw */
or2 cmac14struc data(
.or1,2,
specE,modw,specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,1,dst, /* MODRM 1,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* OR dst:Ew,src:Db */
or3 cmac14struc data(
.or2,2,
specE,modw,specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,1,dst, /* MODRM 1,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* OR dst:Ab,src:Db */
or4 cmac9struc data(
.or3,2,
specA,modb,specD,modb,
mdbn,0ch, /* DB 0CH */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* OR dst:Aw,src:Db */
or5 cmac9struc data(
.or4,2,
specA,modw,specD,modb,
mdbn,0dh, /* DB 0DH */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* OR dst:Aw,src:Dw */
or6 cmac9struc data(
.or5,2,
specA,modw,specD,modw,
mdbn,0dh, /* DB 0DH */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* OR dst:Eb,src:Rb */
or7 cmac12struc data(
.or6,2,
specE,modb,specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,08h, /* DB 08h */
mmodrm2,src,dst, /* MODRM src,dst */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 3 10/5/81 PAGE 7
mendm), /* ENDM */
/* OR dst:Ew,src:Rw */
or8 cmac12struc data(
.or7,2,
specE,modw,specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,09h, /* DB 09h */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* OR dst:Rb,src:Eb */
or9 cmac12struc data(
.or8,2,
specR,modb,specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,0ah, /* DB 0Ah */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* OR dst:Rw,src:Ew */
or10 cmac12struc public data(
.or9,2,
specR,modw,specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,0bh, /* DB 0Bh */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* OUT dst:Db,src:Ab */
out1 cmac9struc data(
nil,2,
specD,modb,specA,modb,
mdbn,0e6h, /* DB 0E6H */
mdbf,dst, /* DB dst */
mendm), /* ENDM */
/* OUT dst:Db,src:Aw */
out2 cmac9struc data(
.out1,2,
specD,modb,specA,modw,
mdbn,0e7h, /* DB 0E7H */
mdbf,dst, /* DB dst */
mendm), /* ENDM */
/* OUT dst:Rw(DX),src:Ab */
out3 cmac8struc data(
.out2,2,
specR,modw+singlerange+registerrange,rdx,
specA,modb,
mdbn,0eeh, /* DB 0EEH */
mendm), /* ENDM */
/* OUT dst:Rw(DX),src:Aw */
out4 cmac8struc public data(
.out3,2,
specR,modw+singlerange+registerrange,rdx,
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 3 10/5/81 PAGE 8
specA,modw,
mdbn,0efh, /* DB 0EFH */
mendm), /* ENDM */
/* POP dst:Ew */
pop1 cmac10struc data(
nil,1,
specE,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,8fh, /* DB 8FH */
mmodrm1,0,dst, /* MODRM 0,dst */
mendm), /* ENDM */
/* POP dst:Sd(ES) */
pop2 cmac16struc data(
.pop1,1,
specS,modd+singlerange+registerrange,res,
mdbit, /* DBIT 3(0),2(dst(0)),3(7) */
mnumberbits,3,0,
mformalbits,2,dst,0,
mnumberbits,3,7,
mendbit,
mendm), /* ENDM */
/* POP dst:Sd(SS,DS) */
pop3 cmac17struc data(
.pop2,1,
specS,modd+doublerange+registerrange,rss,rds,
mdbit, /* DBIT 3(0),2(dst(0)),3(7) */
mnumberbits,3,0,
mformalbits,2,dst,0,
mnumberbits,3,7,
mendbit,
mendm), /* ENDM */
/* POP dst:Rw */
pop4 cmac12struc public data(
.pop3,1,
specR,modw,
mdbit, /* DBIT 5(01011B),3(dst(0)) */
mnumberbits,5,0bh,
mformalbits,3,dst,0,
mendbit,
mendm), /* ENDM */
/* POPF */
popf1 cmac3struc public data(
nil,0,
mdbn,9dh, /* DB 9DH */
mendm), /* ENDM */
/* PUSH dst:Ew */
push1 cmac10struc data(
nil,1,
specE,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,0ffh, /* DB 0FFH */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 3 10/5/81 PAGE 9
mmodrm1,6,dst, /* MODRM 6,dst */
mendm), /* ENDM */
/* PUSH dst:Sd */
push2 cmac15struc data(
.push1,1,
specS,modd,
mdbit, /* DBIT 3(0),2(dst(0)),3(6) */
mnumberbits,3,0,
mformalbits,2,dst,0,
mnumberbits,3,6,
mendbit,
mendm), /* ENDM */
/* PUSH dst:Rw */
push3 cmac12struc public data(
.push2,1,
specR,modw,
mdbit, /* DBIT 5(01010B),3(dst(0)) */
mnumberbits,5,0ah,
mformalbits,3,dst,0,
mendbit,
mendm), /* ENDM */
/* PUSHF */
pushf1 cmac3struc public data(
nil,0,
mdbn,9ch, /* DB 9CH */
mendm); /* ENDM */
19 1 end$module cmac3;
MODULE INFORMATION:
CODE AREA SIZE = 0000H 0D
CONSTANT AREA SIZE = 02CCH 716D
VARIABLE AREA SIZE = 0000H 0D
MAXIMUM STACK SIZE = 0000H 0D
780 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,477 @@
$title ('CODEMACRO DEFINITIONS - PART 3')
cmac3:
do;
/*
modified 6/16/81 R. Silberstein
*/
$include (:f1:macro.lit)
$include (:f1:cmacd.lit)
$include (:f1:equals.lit)
$include (:f1:cmac.lit)
dcl
/* MOV dst:Eb,src:Db */
mov1 cmac14struc data(
nil,2,
specE,modb,specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0c6h, /* DB 0C6h */
mmodrm1,0,dst, /* MODRM 0,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* MOV dst:Ew,src:Db */
mov2 cmac14struc data(
.mov1,2,
specE,modw,specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0c7h, /* DB 0C7h */
mmodrm1,0,dst, /* MODRM 0,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* MOV dst:Ew,src:Dw */
mov3 cmac14struc data(
.mov2,2,
specE,modw,specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,0c7h, /* DB 0C7h */
mmodrm1,0,dst, /* MODRM 0,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* MOV dst:Rb,src:Db */
mov4 cmac16struc data(
.mov3,2,
specR,modb,specD,modb,
mdbit, /* DBIT 5(10110B),3(dst(0)) */
mnumberbits,5,16h,
mformalbits,3,dst,0,
mendbit,
mdbf,src, /* DB src */
mendm), /* ENDM */
/* MOV dst:Rw,src:Db */
mov5 cmac16struc data(
.mov4,2,
specR,modw,specD,modb,
mdbit, /* DBIT 5(10111B),3(dst(0)) */
mnumberbits,5,17h,
mformalbits,3,dst,0,
mendbit,
mdwf,src, /* DW src */
mendm), /* ENDM */
/* MOV dst:Rw,src:Dw */
mov6 cmac16struc data(
.mov5,2,
specR,modw,specD,modw,
mdbit, /* DBIT 5(10111B),3(dst(0)) */
mnumberbits,5,17h,
mformalbits,3,dst,0,
mendbit,
mdwf,src, /* DW src */
mendm), /* ENDM */
/* MOV dst:Eb,src:Rb */
mov7 cmac12struc data(
.mov6,2,
specE,modb,specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,88h, /* DB 88H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* MOV dst:Ew,src:Rw */
mov8 cmac12struc data(
.mov7,2,
specE,modw,specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,89h, /* DB 89H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* MOV dst:Rb,src:Eb */
mov9 cmac12struc data(
.mov8,2,
specR,modb,specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,8ah, /* DB 8AH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* MOV dst:Rw,src:Ew */
mov10 cmac12struc data(
.mov9,2,
specR,modw,specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,8bh, /* DB 8BH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* MOV dst:Ew,src:S */
mov11 cmac12struc data(
.mov10,2,
specE,modw,specS,nomod,
msegfix,dst, /* SEGFIX dst */
mdbn,8ch, /* DB 8CH */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* MOV dst:Sd(ES),src:Ew */
mov12 cmac13struc data(
.mov11,2,
specS,modd+singlerange+registerrange,res,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,8eh, /* DB 8EH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* MOV dst:Sd(SS,DS),src:Ew */
mov13 cmac14struc data(
.mov12,2,
specS,modd+doublerange+registerrange,rss,rds,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,8eh, /* DB 8EH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* MOV dst:Ab,src:Xb */
mov14 cmac11struc data(
.mov13,2,
specA,modb,specX,modb,
msegfix,src, /* SEGFIX src */
mdbn,0a0h, /* DB 0A0H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* MOV dst:Aw,src:Xw */
mov15 cmac11struc data(
.mov14,2,
specA,modw,specX,modw,
msegfix,src, /* SEGFIX src */
mdbn,0a1h, /* DB 0A1H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* MOV dst:Xb,src:Ab */
mov16 cmac11struc data(
.mov15,2,
specX,modb,specA,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0a2h, /* DB 0A2H */
mdwf,dst, /* DW dst */
mendm), /* ENDM */
/* MOV dst:Xw,src:Aw */
mov17 cmac11struc public data(
.mov16,2,
specX,modw,specA,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,0a3h, /* DB 0A3H */
mdwf,dst, /* DW dst */
mendm), /* ENDM */
/* MOVS SI$ptr:Eb,DI$ptr:Eb */
movs1 cmac12struc data(
nil,2,
specE,modb,specE,modb,
mnosegfix,res,si$ptr, /* NOSEGFIX ES,SI$ptr */
msegfix,di$ptr, /* SEGFIX DI$ptr */
mdbn,0a4h, /* DB 0A4H */
mendm), /* ENDM */
/* MOVS SI$ptr:Ew,DI$ptr:Ew */
movs2 cmac12struc public data(
.movs1,2,
specE,modw,specE,modw,
mnosegfix,res,si$ptr, /* NOSEGFIX ES,SI$ptr */
msegfix,di$ptr, /* SEGFIX DI$ptr */
mdbn,0a5h, /* DB 0A5H */
mendm), /* ENDM */
/* MOVSB */
MOVSB1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0A4H,
MENDM),
/* MOVSW */
MOVSW1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0A5H,
MENDM),
/* MUL mplier:Eb */
mul1 cmac10struc data(
nil,1,
specE,modb,
msegfix,mplier, /* SEGFIX mplier */
mdbn,0f6h, /* DB 0F6H */
mmodrm1,4,mplier, /* MODRM 4,mplier */
mendm), /* ENDM */
/* MUL mplier:Ew */
mul2 cmac10struc public data(
.mul1,1,
specE,modw,
msegfix,mplier, /* SEGFIX mplier */
mdbn,0f7h, /* DB 0F7H */
mmodrm1,4,mplier, /* MODRM 4,mplier */
mendm), /* ENDM */
/* NEG dst:Eb */
neg1 cmac10struc data(
nil,1,
specE,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0f6h, /* DB 0F6H */
mmodrm1,3,dst, /* MODRM 3,dst */
mendm), /* ENDM */
/* NEG dst:Ew */
neg2 cmac10struc public data(
.neg1,1,
specE,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,0f7h, /* DB 0F7H */
mmodrm1,3,dst, /* MODRM 3,dst */
mendm), /* ENDM */
/* NOP */
nop1 cmac3struc public data(
nil,0,
mdbn,90h, /* DB 90H */
mendm), /* ENDM */
/* NOT dst:Eb */
not1 cmac10struc data(
nil,1,
specE,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0f6h, /* DB 0F6H */
mmodrm1,2,dst, /* MODRM 2,dst */
mendm), /* ENDM */
/* NOT dst:Ew */
not2 cmac10struc public data(
.not1,1,
specE,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,0f7h, /* DB 0F7H */
mmodrm1,2,dst, /* MODRM 2,dst */
mendm), /* ENDM */
/* OR dst:Eb,src:Db */
or1 cmac14struc data(
nil,2,
specE,modb,specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,80h, /* DB 80h */
mmodrm1,1,dst, /* MODRM 1,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* OR dst:Ew,src:Dw */
or2 cmac14struc data(
.or1,2,
specE,modw,specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,1,dst, /* MODRM 1,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* OR dst:Ew,src:Db */
or3 cmac14struc data(
.or2,2,
specE,modw,specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,1,dst, /* MODRM 1,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* OR dst:Ab,src:Db */
or4 cmac9struc data(
.or3,2,
specA,modb,specD,modb,
mdbn,0ch, /* DB 0CH */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* OR dst:Aw,src:Db */
or5 cmac9struc data(
.or4,2,
specA,modw,specD,modb,
mdbn,0dh, /* DB 0DH */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* OR dst:Aw,src:Dw */
or6 cmac9struc data(
.or5,2,
specA,modw,specD,modw,
mdbn,0dh, /* DB 0DH */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* OR dst:Eb,src:Rb */
or7 cmac12struc data(
.or6,2,
specE,modb,specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,08h, /* DB 08h */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* OR dst:Ew,src:Rw */
or8 cmac12struc data(
.or7,2,
specE,modw,specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,09h, /* DB 09h */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* OR dst:Rb,src:Eb */
or9 cmac12struc data(
.or8,2,
specR,modb,specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,0ah, /* DB 0Ah */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* OR dst:Rw,src:Ew */
or10 cmac12struc public data(
.or9,2,
specR,modw,specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,0bh, /* DB 0Bh */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* OUT dst:Db,src:Ab */
out1 cmac9struc data(
nil,2,
specD,modb,specA,modb,
mdbn,0e6h, /* DB 0E6H */
mdbf,dst, /* DB dst */
mendm), /* ENDM */
/* OUT dst:Db,src:Aw */
out2 cmac9struc data(
.out1,2,
specD,modb,specA,modw,
mdbn,0e7h, /* DB 0E7H */
mdbf,dst, /* DB dst */
mendm), /* ENDM */
/* OUT dst:Rw(DX),src:Ab */
out3 cmac8struc data(
.out2,2,
specR,modw+singlerange+registerrange,rdx,
specA,modb,
mdbn,0eeh, /* DB 0EEH */
mendm), /* ENDM */
/* OUT dst:Rw(DX),src:Aw */
out4 cmac8struc public data(
.out3,2,
specR,modw+singlerange+registerrange,rdx,
specA,modw,
mdbn,0efh, /* DB 0EFH */
mendm), /* ENDM */
/* POP dst:Ew */
pop1 cmac10struc data(
nil,1,
specE,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,8fh, /* DB 8FH */
mmodrm1,0,dst, /* MODRM 0,dst */
mendm), /* ENDM */
/* POP dst:Sd(ES) */
pop2 cmac16struc data(
.pop1,1,
specS,modd+singlerange+registerrange,res,
mdbit, /* DBIT 3(0),2(dst(0)),3(7) */
mnumberbits,3,0,
mformalbits,2,dst,0,
mnumberbits,3,7,
mendbit,
mendm), /* ENDM */
/* POP dst:Sd(SS,DS) */
pop3 cmac17struc data(
.pop2,1,
specS,modd+doublerange+registerrange,rss,rds,
mdbit, /* DBIT 3(0),2(dst(0)),3(7) */
mnumberbits,3,0,
mformalbits,2,dst,0,
mnumberbits,3,7,
mendbit,
mendm), /* ENDM */
/* POP dst:Rw */
pop4 cmac12struc public data(
.pop3,1,
specR,modw,
mdbit, /* DBIT 5(01011B),3(dst(0)) */
mnumberbits,5,0bh,
mformalbits,3,dst,0,
mendbit,
mendm), /* ENDM */
/* POPF */
popf1 cmac3struc public data(
nil,0,
mdbn,9dh, /* DB 9DH */
mendm), /* ENDM */
/* PUSH dst:Ew */
push1 cmac10struc data(
nil,1,
specE,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,0ffh, /* DB 0FFH */
mmodrm1,6,dst, /* MODRM 6,dst */
mendm), /* ENDM */
/* PUSH dst:Sd */
push2 cmac15struc data(
.push1,1,
specS,modd,
mdbit, /* DBIT 3(0),2(dst(0)),3(6) */
mnumberbits,3,0,
mformalbits,2,dst,0,
mnumberbits,3,6,
mendbit,
mendm), /* ENDM */
/* PUSH dst:Rw */
push3 cmac12struc public data(
.push2,1,
specR,modw,
mdbit, /* DBIT 5(01010B),3(dst(0)) */
mnumberbits,5,0ah,
mformalbits,3,dst,0,
mendbit,
mendm), /* ENDM */
/* PUSHF */
pushf1 cmac3struc public data(
nil,0,
mdbn,9ch, /* DB 9CH */
mendm); /* ENDM */
end$module cmac3;

View File

@@ -0,0 +1,558 @@
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 4 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE CMAC4
OBJECT MODULE PLACED IN CMAC4.OBJ
COMPILER INVOKED BY: :F0: CMAC4.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100)
$title ('CODEMACRO DEFINITIONS - PART 4')
1 cmac4:
do;
/*
modified 6/16/81 R. Silberstein
*/
$include (:f1:macro.lit)
= $nolist
$include (:f1:cmacd.lit)
= $nolist
$include (:f1:equals.lit)
= $nolist
$include (:f1:cmac.lit)
= $nolist
18 1 dcl
/* RCL dst:Eb,count:Db(1) */
rcl1 cmac13struc data(
nil,2,
specE,modb,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d0h, /* DB 0D0H */
mmodrm1,2,dst, /* MODRM 2,dst */
mendm), /* ENDM */
/* RCL dst:Ew,count:Db(1) */
rcl2 cmac13struc data(
.rcl1,2,
specE,modw,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d1h, /* DB 0D1H */
mmodrm1,2,dst, /* MODRM 2,dst */
mendm), /* ENDM */
/* RCL dst:Eb,count:Rb(CL) */
rcl3 cmac13struc data(
.rcl2,2,
specE,modb,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d2h, /* DB 0D2H */
mmodrm1,2,dst, /* MODRM 2,dst */
mendm), /* ENDM */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 4 10/5/81 PAGE 2
/* RCL dst:Ew,count:Rb(CL) */
rcl4 cmac13struc public data(
.rcl3,2,
specE,modw,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d3h, /* DB 0D3H */
mmodrm1,2,dst, /* MODRM 2,dst */
mendm), /* ENDM */
/* RCR dst:Eb,count:Db(1) */
rcr1 cmac13struc data(
nil,2,
specE,modb,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d0h, /* DB 0D0H */
mmodrm1,3,dst, /* MODRM 3,dst */
mendm), /* ENDM */
/* RCR dst:Ew,count:Db(1) */
rcr2 cmac13struc data(
.rcr1,2,
specE,modw,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d1h, /* DB 0D1H */
mmodrm1,3,dst, /* MODRM 3,dst */
mendm), /* ENDM */
/* RCR dst:Eb,count:Rb(CL) */
rcr3 cmac13struc data(
.rcr2,2,
specE,modb,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d2h, /* DB 0D2H */
mmodrm1,3,dst, /* MODRM 3,dst */
mendm), /* ENDM */
/* RCR dst:Ew,count:Rb(CL) */
rcr4 cmac13struc public data(
.rcr3,2,
specE,modw,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d3h, /* DB 0D3H */
mmodrm1,3,dst, /* MODRM 3,dst */
mendm), /* ENDM */
/* REP PREFX */
rep1 cmac3struc public data(
nil,0+prefix$on,
mdbn,0f3h, /* DB 0F3H */
mendm), /* ENDM */
/* REPE PREFX */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 4 10/5/81 PAGE 3
repe1 cmac3struc public data(
nil,0+prefix$on,
mdbn,0f3h, /* DB 0F3H */
mendm), /* ENDM */
/* REPNE PREFX */
repne1 cmac3struc public data(
nil,0+prefix$on,
mdbn,0f2h, /* DB 0F2H */
mendm), /* ENDM */
/* RET dst:Db */
ret1 cmac7struc data(
nil,1,
specD,modb,
mdbn,0c2h, /* DB 0C2H */
mdwf,dst, /* DW dst */
mendm), /* ENDM */
/* RET dst:Dw */
ret2 cmac7struc data(
.ret1,1,
specD,modw,
mdbn,0c2h, /* DB 0C2H */
mdwf,dst, /* DW dst */
mendm), /* ENDM */
/* RET */
ret3 cmac3struc public data(
.ret2,0,
mdbn,0c3h, /* DB 0C3H */
mendm), /* ENDM */
/* RETF dst:Db */
retf1 cmac7struc data(
nil,1,
specD,modb,
mdbn,0cah, /* DB 0CAH */
mdwf,dst, /* DW dst */
mendm), /* ENDM */
/* RETF dst:Dw */
retf2 cmac7struc data(
.retf1,1,
specD,modw,
mdbn,0cah, /* DB 0CAH */
mdwf,dst, /* DW dst */
mendm), /* ENDM */
/* RETF */
retf3 cmac3struc public data(
.retf2,0,
mdbn,0cbh, /* DB 0C3H */
mendm), /* ENDM */
/* ROL dst:Eb,count:Db(1) */
rol1 cmac13struc data(
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 4 10/5/81 PAGE 4
nil,2,
specE,modb,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d0h, /* DB 0D0H */
mmodrm1,0,dst, /* MODRM 0,dst */
mendm), /* ENDM */
/* ROL dst:Ew,count:Db(1) */
rol2 cmac13struc data(
.rol1,2,
specE,modw,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d1h, /* DB 0D1H */
mmodrm1,0,dst, /* MODRM 0,dst */
mendm), /* ENDM */
/* ROL dst:Eb,count:Rb(CL) */
rol3 cmac13struc data(
.rol2,2,
specE,modb,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d2h, /* DB 0D2H */
mmodrm1,0,dst, /* MODRM 0,dst */
mendm), /* ENDM */
/* ROL dst:Ew,count:Rb(CL) */
rol4 cmac13struc public data(
.rol3,2,
specE,modw,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d3h, /* DB 0D3H */
mmodrm1,0,dst, /* MODRM 0,dst */
mendm), /* ENDM */
/* ROR dst:Eb,count:Db(1) */
ror1 cmac13struc data(
nil,2,
specE,modb,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d0h, /* DB 0D0H */
mmodrm1,1,dst, /* MODRM 1,dst */
mendm), /* ENDM */
/* ROR dst:Ew,count:Db(1) */
ror2 cmac13struc data(
.ror1,2,
specE,modw,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d1h, /* DB 0D1H */
mmodrm1,1,dst, /* MODRM 1,dst */
mendm), /* ENDM */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 4 10/5/81 PAGE 5
/* ROR dst:Eb,count:Rb(CL) */
ror3 cmac13struc data(
.ror2,2,
specE,modb,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d2h, /* DB 0D2H */
mmodrm1,1,dst, /* MODRM 1,dst */
mendm), /* ENDM */
/* ROR dst:Ew,count:Rb(CL) */
ror4 cmac13struc public data(
.ror3,2,
specE,modw,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d3h, /* DB 0D3H */
mmodrm1,1,dst, /* MODRM 1,dst */
mendm), /* ENDM */
/* SAHF */
sahf1 cmac3struc public data(
nil,0,
mdbn,9eh, /* DB 9EH */
mendm), /* ENDM */
/* SAL dst:Eb,count:Db(1) */
sal1 cmac13struc data(
nil,2,
specE,modb,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d0h, /* DB 0D0H */
mmodrm1,4,dst, /* MODRM 4,dst */
mendm), /* ENDM */
/* SAL dst:Ew,count:Db(1) */
sal2 cmac13struc data(
.sal1,2,
specE,modw,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d1h, /* DB 0D1H */
mmodrm1,4,dst, /* MODRM 4,dst */
mendm), /* ENDM */
/* SAL dst:Eb,count:Rb(CL) */
sal3 cmac13struc data(
.sal2,2,
specE,modb,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d2h, /* DB 0D2H */
mmodrm1,4,dst, /* MODRM 4,dst */
mendm), /* ENDM */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 4 10/5/81 PAGE 6
/* SAL dst:Ew,count:Rb(CL) */
sal4 cmac13struc public data(
.sal3,2,
specE,modw,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d3h, /* DB 0D3H */
mmodrm1,4,dst, /* MODRM 4,dst */
mendm), /* ENDM */
/* SAR dst:Eb,count:Db(1) */
sar1 cmac13struc data(
nil,2,
specE,modb,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d0h, /* DB 0D0H */
mmodrm1,7,dst, /* MODRM 7,dst */
mendm), /* ENDM */
/* SAR dst:Ew,count:Db(1) */
sar2 cmac13struc data(
.sar1,2,
specE,modw,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d1h, /* DB 0D1H */
mmodrm1,7,dst, /* MODRM 7,dst */
mendm), /* ENDM */
/* SAR dst:Eb,count:Rb(CL) */
sar3 cmac13struc data(
.sar2,2,
specE,modb,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d2h, /* DB 0D2H */
mmodrm1,7,dst, /* MODRM 7,dst */
mendm), /* ENDM */
/* SAR dst:Ew,count:Rb(CL) */
sar4 cmac13struc public data(
.sar3,2,
specE,modw,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d3h, /* DB 0D3H */
mmodrm1,7,dst, /* MODRM 7,dst */
mendm), /* ENDM */
/* SBB dst:Eb,src:Db */
sbb1 cmac14struc data(
nil,2,
specE,modb,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,80h, /* DB 80H */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 4 10/5/81 PAGE 7
mmodrm1,3,dst, /* MODRM 3,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* SBB dst:Ew,src:Db */
sbb2 cmac14struc data(
.sbb1,2,
specE,modw,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,3,dst, /* MODRM 3,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* SBB dst:Ew,src:Dsb */
sbb3 cmac14struc data(
.sbb2,2,
specE,modw,
specD,modsb,
msegfix,dst, /* SEGFIX dst */
mdbn,83h, /* DB 83H */
mmodrm1,3,dst, /* MODRM 3,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* SBB dst:Ew,src:Dw */
sbb4 cmac14struc data(
.sbb3,2,
specE,modw,
specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,3,dst, /* MODRM 3,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* SBB dst:Ab,src:Db */
sbb5 cmac9struc data(
.sbb4,2,
specA,modb,
specD,modb,
mdbn,1ch, /* DB 1CH */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* SBB dst:Aw,src:Db */
sbb6 cmac9struc data(
.sbb5,2,
specA,modw,
specD,modb,
mdbn,1dh, /* DB 1DH */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* SBB dst:Aw,src:Dw */
sbb7 cmac9struc data(
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 4 10/5/81 PAGE 8
.sbb6,2,
specA,modw,
specD,modw,
mdbn,1dh, /* DB 1DH */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* SBB dst:Eb,src:Rb */
sbb8 cmac12struc data(
.sbb7,2,
specE,modb,
specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,18h, /* DB 18H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* SBB dst:Ew,src:Rw */
sbb9 cmac12struc data(
.sbb8,2,
specE,modw,
specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,19h, /* DB 19H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* SBB dst:Rb,src:Eb */
sbb10 cmac12struc data(
.sbb9,2,
specR,modb,
specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,1ah, /* DB 1AH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* SBB dst:Rw,src:Ew */
sbb11 cmac12struc public data(
.sbb10,2,
specR,modw,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,1bh, /* DB 1BH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* SCAS dst:Eb */
scas1 cmac8struc data(
nil,1,
specE,modb,
mnosegfix,res,dst, /* NOSEGFIX ES,dst */
mdbn,0aeh, /* DB 0AEH */
mendm), /* ENDM */
/* SCAS dst:Ew */
scas2 cmac8struc public data(
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 4 10/5/81 PAGE 9
.scas1,1,
specE,modw,
mnosegfix,res,dst, /* NOSEGFIX ES,dst */
mdbn,0afh, /* DB 0AFH */
mendm), /* ENDM */
/* SCASB */
SCASB1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0AEH,
MENDM),
/* SCASW */
SCASW1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0AFH,
MENDM),
/* SHR dst:Eb,count:Db(1) */
shr1 cmac13struc data(
nil,2,
specE,modb,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d0h, /* DB 0D0H */
mmodrm1,5,dst, /* MODRM 5,dst */
mendm), /* ENDM */
/* SHR dst:Ew,count:Db(1) */
shr2 cmac13struc data(
.shr1,2,
specE,modw,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d1h, /* DB 0D1H */
mmodrm1,5,dst, /* MODRM 5,dst */
mendm), /* ENDM */
/* SHR dst:Eb,count:Rb(CL) */
shr3 cmac13struc data(
.shr2,2,
specE,modb,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d2h, /* DB 0D2H */
mmodrm1,5,dst, /* MODRM 5,dst */
mendm), /* ENDM */
/* SHR dst:Ew,count:Rb(CL) */
shr4 cmac13struc public data(
.shr3,2,
specE,modw,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d3h, /* DB 0D3H */
mmodrm1,5,dst, /* MODRM 5,dst */
mendm); /* ENDM */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 4 10/5/81 PAGE 10
19 1 end$module cmac4;
MODULE INFORMATION:
CODE AREA SIZE = 0000H 0D
CONSTANT AREA SIZE = 02D2H 722D
VARIABLE AREA SIZE = 0000H 0D
MAXIMUM STACK SIZE = 0000H 0D
808 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,505 @@
$title ('CODEMACRO DEFINITIONS - PART 4')
cmac4:
do;
/*
modified 6/16/81 R. Silberstein
*/
$include (:f1:macro.lit)
$include (:f1:cmacd.lit)
$include (:f1:equals.lit)
$include (:f1:cmac.lit)
dcl
/* RCL dst:Eb,count:Db(1) */
rcl1 cmac13struc data(
nil,2,
specE,modb,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d0h, /* DB 0D0H */
mmodrm1,2,dst, /* MODRM 2,dst */
mendm), /* ENDM */
/* RCL dst:Ew,count:Db(1) */
rcl2 cmac13struc data(
.rcl1,2,
specE,modw,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d1h, /* DB 0D1H */
mmodrm1,2,dst, /* MODRM 2,dst */
mendm), /* ENDM */
/* RCL dst:Eb,count:Rb(CL) */
rcl3 cmac13struc data(
.rcl2,2,
specE,modb,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d2h, /* DB 0D2H */
mmodrm1,2,dst, /* MODRM 2,dst */
mendm), /* ENDM */
/* RCL dst:Ew,count:Rb(CL) */
rcl4 cmac13struc public data(
.rcl3,2,
specE,modw,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d3h, /* DB 0D3H */
mmodrm1,2,dst, /* MODRM 2,dst */
mendm), /* ENDM */
/* RCR dst:Eb,count:Db(1) */
rcr1 cmac13struc data(
nil,2,
specE,modb,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d0h, /* DB 0D0H */
mmodrm1,3,dst, /* MODRM 3,dst */
mendm), /* ENDM */
/* RCR dst:Ew,count:Db(1) */
rcr2 cmac13struc data(
.rcr1,2,
specE,modw,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d1h, /* DB 0D1H */
mmodrm1,3,dst, /* MODRM 3,dst */
mendm), /* ENDM */
/* RCR dst:Eb,count:Rb(CL) */
rcr3 cmac13struc data(
.rcr2,2,
specE,modb,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d2h, /* DB 0D2H */
mmodrm1,3,dst, /* MODRM 3,dst */
mendm), /* ENDM */
/* RCR dst:Ew,count:Rb(CL) */
rcr4 cmac13struc public data(
.rcr3,2,
specE,modw,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d3h, /* DB 0D3H */
mmodrm1,3,dst, /* MODRM 3,dst */
mendm), /* ENDM */
/* REP PREFX */
rep1 cmac3struc public data(
nil,0+prefix$on,
mdbn,0f3h, /* DB 0F3H */
mendm), /* ENDM */
/* REPE PREFX */
repe1 cmac3struc public data(
nil,0+prefix$on,
mdbn,0f3h, /* DB 0F3H */
mendm), /* ENDM */
/* REPNE PREFX */
repne1 cmac3struc public data(
nil,0+prefix$on,
mdbn,0f2h, /* DB 0F2H */
mendm), /* ENDM */
/* RET dst:Db */
ret1 cmac7struc data(
nil,1,
specD,modb,
mdbn,0c2h, /* DB 0C2H */
mdwf,dst, /* DW dst */
mendm), /* ENDM */
/* RET dst:Dw */
ret2 cmac7struc data(
.ret1,1,
specD,modw,
mdbn,0c2h, /* DB 0C2H */
mdwf,dst, /* DW dst */
mendm), /* ENDM */
/* RET */
ret3 cmac3struc public data(
.ret2,0,
mdbn,0c3h, /* DB 0C3H */
mendm), /* ENDM */
/* RETF dst:Db */
retf1 cmac7struc data(
nil,1,
specD,modb,
mdbn,0cah, /* DB 0CAH */
mdwf,dst, /* DW dst */
mendm), /* ENDM */
/* RETF dst:Dw */
retf2 cmac7struc data(
.retf1,1,
specD,modw,
mdbn,0cah, /* DB 0CAH */
mdwf,dst, /* DW dst */
mendm), /* ENDM */
/* RETF */
retf3 cmac3struc public data(
.retf2,0,
mdbn,0cbh, /* DB 0C3H */
mendm), /* ENDM */
/* ROL dst:Eb,count:Db(1) */
rol1 cmac13struc data(
nil,2,
specE,modb,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d0h, /* DB 0D0H */
mmodrm1,0,dst, /* MODRM 0,dst */
mendm), /* ENDM */
/* ROL dst:Ew,count:Db(1) */
rol2 cmac13struc data(
.rol1,2,
specE,modw,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d1h, /* DB 0D1H */
mmodrm1,0,dst, /* MODRM 0,dst */
mendm), /* ENDM */
/* ROL dst:Eb,count:Rb(CL) */
rol3 cmac13struc data(
.rol2,2,
specE,modb,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d2h, /* DB 0D2H */
mmodrm1,0,dst, /* MODRM 0,dst */
mendm), /* ENDM */
/* ROL dst:Ew,count:Rb(CL) */
rol4 cmac13struc public data(
.rol3,2,
specE,modw,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d3h, /* DB 0D3H */
mmodrm1,0,dst, /* MODRM 0,dst */
mendm), /* ENDM */
/* ROR dst:Eb,count:Db(1) */
ror1 cmac13struc data(
nil,2,
specE,modb,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d0h, /* DB 0D0H */
mmodrm1,1,dst, /* MODRM 1,dst */
mendm), /* ENDM */
/* ROR dst:Ew,count:Db(1) */
ror2 cmac13struc data(
.ror1,2,
specE,modw,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d1h, /* DB 0D1H */
mmodrm1,1,dst, /* MODRM 1,dst */
mendm), /* ENDM */
/* ROR dst:Eb,count:Rb(CL) */
ror3 cmac13struc data(
.ror2,2,
specE,modb,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d2h, /* DB 0D2H */
mmodrm1,1,dst, /* MODRM 1,dst */
mendm), /* ENDM */
/* ROR dst:Ew,count:Rb(CL) */
ror4 cmac13struc public data(
.ror3,2,
specE,modw,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d3h, /* DB 0D3H */
mmodrm1,1,dst, /* MODRM 1,dst */
mendm), /* ENDM */
/* SAHF */
sahf1 cmac3struc public data(
nil,0,
mdbn,9eh, /* DB 9EH */
mendm), /* ENDM */
/* SAL dst:Eb,count:Db(1) */
sal1 cmac13struc data(
nil,2,
specE,modb,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d0h, /* DB 0D0H */
mmodrm1,4,dst, /* MODRM 4,dst */
mendm), /* ENDM */
/* SAL dst:Ew,count:Db(1) */
sal2 cmac13struc data(
.sal1,2,
specE,modw,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d1h, /* DB 0D1H */
mmodrm1,4,dst, /* MODRM 4,dst */
mendm), /* ENDM */
/* SAL dst:Eb,count:Rb(CL) */
sal3 cmac13struc data(
.sal2,2,
specE,modb,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d2h, /* DB 0D2H */
mmodrm1,4,dst, /* MODRM 4,dst */
mendm), /* ENDM */
/* SAL dst:Ew,count:Rb(CL) */
sal4 cmac13struc public data(
.sal3,2,
specE,modw,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d3h, /* DB 0D3H */
mmodrm1,4,dst, /* MODRM 4,dst */
mendm), /* ENDM */
/* SAR dst:Eb,count:Db(1) */
sar1 cmac13struc data(
nil,2,
specE,modb,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d0h, /* DB 0D0H */
mmodrm1,7,dst, /* MODRM 7,dst */
mendm), /* ENDM */
/* SAR dst:Ew,count:Db(1) */
sar2 cmac13struc data(
.sar1,2,
specE,modw,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d1h, /* DB 0D1H */
mmodrm1,7,dst, /* MODRM 7,dst */
mendm), /* ENDM */
/* SAR dst:Eb,count:Rb(CL) */
sar3 cmac13struc data(
.sar2,2,
specE,modb,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d2h, /* DB 0D2H */
mmodrm1,7,dst, /* MODRM 7,dst */
mendm), /* ENDM */
/* SAR dst:Ew,count:Rb(CL) */
sar4 cmac13struc public data(
.sar3,2,
specE,modw,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d3h, /* DB 0D3H */
mmodrm1,7,dst, /* MODRM 7,dst */
mendm), /* ENDM */
/* SBB dst:Eb,src:Db */
sbb1 cmac14struc data(
nil,2,
specE,modb,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,80h, /* DB 80H */
mmodrm1,3,dst, /* MODRM 3,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* SBB dst:Ew,src:Db */
sbb2 cmac14struc data(
.sbb1,2,
specE,modw,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,3,dst, /* MODRM 3,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* SBB dst:Ew,src:Dsb */
sbb3 cmac14struc data(
.sbb2,2,
specE,modw,
specD,modsb,
msegfix,dst, /* SEGFIX dst */
mdbn,83h, /* DB 83H */
mmodrm1,3,dst, /* MODRM 3,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* SBB dst:Ew,src:Dw */
sbb4 cmac14struc data(
.sbb3,2,
specE,modw,
specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,3,dst, /* MODRM 3,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* SBB dst:Ab,src:Db */
sbb5 cmac9struc data(
.sbb4,2,
specA,modb,
specD,modb,
mdbn,1ch, /* DB 1CH */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* SBB dst:Aw,src:Db */
sbb6 cmac9struc data(
.sbb5,2,
specA,modw,
specD,modb,
mdbn,1dh, /* DB 1DH */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* SBB dst:Aw,src:Dw */
sbb7 cmac9struc data(
.sbb6,2,
specA,modw,
specD,modw,
mdbn,1dh, /* DB 1DH */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* SBB dst:Eb,src:Rb */
sbb8 cmac12struc data(
.sbb7,2,
specE,modb,
specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,18h, /* DB 18H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* SBB dst:Ew,src:Rw */
sbb9 cmac12struc data(
.sbb8,2,
specE,modw,
specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,19h, /* DB 19H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* SBB dst:Rb,src:Eb */
sbb10 cmac12struc data(
.sbb9,2,
specR,modb,
specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,1ah, /* DB 1AH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* SBB dst:Rw,src:Ew */
sbb11 cmac12struc public data(
.sbb10,2,
specR,modw,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,1bh, /* DB 1BH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* SCAS dst:Eb */
scas1 cmac8struc data(
nil,1,
specE,modb,
mnosegfix,res,dst, /* NOSEGFIX ES,dst */
mdbn,0aeh, /* DB 0AEH */
mendm), /* ENDM */
/* SCAS dst:Ew */
scas2 cmac8struc public data(
.scas1,1,
specE,modw,
mnosegfix,res,dst, /* NOSEGFIX ES,dst */
mdbn,0afh, /* DB 0AFH */
mendm), /* ENDM */
/* SCASB */
SCASB1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0AEH,
MENDM),
/* SCASW */
SCASW1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0AFH,
MENDM),
/* SHR dst:Eb,count:Db(1) */
shr1 cmac13struc data(
nil,2,
specE,modb,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d0h, /* DB 0D0H */
mmodrm1,5,dst, /* MODRM 5,dst */
mendm), /* ENDM */
/* SHR dst:Ew,count:Db(1) */
shr2 cmac13struc data(
.shr1,2,
specE,modw,
specD,modb+singlerange+number$range,1,
msegfix,dst, /* SEGFIX dst */
mdbn,0d1h, /* DB 0D1H */
mmodrm1,5,dst, /* MODRM 5,dst */
mendm), /* ENDM */
/* SHR dst:Eb,count:Rb(CL) */
shr3 cmac13struc data(
.shr2,2,
specE,modb,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d2h, /* DB 0D2H */
mmodrm1,5,dst, /* MODRM 5,dst */
mendm), /* ENDM */
/* SHR dst:Ew,count:Rb(CL) */
shr4 cmac13struc public data(
.shr3,2,
specE,modw,
specR,modb+singlerange+register$range,rcl,
msegfix,dst, /* SEGFIX dst */
mdbn,0d3h, /* DB 0D3H */
mmodrm1,5,dst, /* MODRM 5,dst */
mendm); /* ENDM */
end$module cmac4;

View File

@@ -0,0 +1,490 @@
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 5 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE CMAC5
OBJECT MODULE PLACED IN CMAC5.OBJ
COMPILER INVOKED BY: :F0: CMAC5.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100)
$title ('CODEMACRO DEFINITIONS - PART 5')
1 cmac5:
do;
/*
modified 6/16/81 R. Silberstein
*/
$include (:f1:macro.lit)
= $nolist
$include (:f1:cmacd.lit)
= $nolist
$include (:f1:equals.lit)
= $nolist
$include (:f1:cmac.lit)
= $nolist
18 1 dcl
/* STC */
stc1 cmac3struc public data(
nil,0,
mdbn,0f9h, /* DB 0F9H */
mendm), /* ENDM */
/* STD */
std1 cmac3struc public data(
nil,0,
mdbn,0fdh, /* DB 0FDH */
mendm), /* ENDM */
/* STI */
sti1 cmac3struc public data(
nil,0,
mdbn,0fbh, /* DB 0FBH */
mendm), /* ENDM */
/* STOS dst:Eb */
stos1 cmac8struc data(
nil,1,
specE,modb,
mnosegfix,res,dst, /* NOSEGFIX ES,dst */
mdbn,0aah, /* DB 0AAH */
mendm), /* ENDM */
/* STOS dst:Ew */
stos2 cmac8struc public data(
.stos1,1,
specE,modw,
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 5 10/5/81 PAGE 2
mnosegfix,res,dst, /* NOSEGFIX ES,dst */
mdbn,0abh, /* DB 0ABH */
mendm), /* ENDM */
/* STOSB */
STOSB1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0AAH,
MENDM),
/* STOSW */
STOSW1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0ABH,
MENDM),
/* SUB dst:Eb,src:Db */
sub1 cmac14struc data(
nil,2,
specE,modb,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,80h, /* DB 80H */
mmodrm1,5,dst, /* MODRM 5,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* SUB dst:Ew,src:Db */
sub2 cmac14struc data(
.sub1,2,
specE,modw,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,5,dst, /* MODRM 5,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* SUB dst:Ew,src:Dsb */
sub3 cmac14struc data(
.sub2,2,
specE,modw,
specD,modsb,
msegfix,dst, /* SEGFIX dst */
mdbn,83h, /* DB 83H */
mmodrm1,5,dst, /* MODRM 5,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* SUB dst:Ew,src:Dw */
sub4 cmac14struc data(
.sub3,2,
specE,modw,
specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,5,dst, /* MODRM 5,dst */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 5 10/5/81 PAGE 3
mdwf,src, /* DW src */
mendm), /* ENDM */
/* SUB dst:Ab,src:Db */
sub5 cmac9struc data(
.sub4,2,
specA,modb,
specD,modb,
mdbn,2ch, /* DB 2CH */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* SUB dst:Aw,src:Db */
sub6 cmac9struc data(
.sub5,2,
specA,modw,
specD,modb,
mdbn,2dh, /* DB 2DH */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* SUB dst:Aw,src:Dw */
sub7 cmac9struc data(
.sub6,2,
specA,modw,
specD,modw,
mdbn,2dh, /* DB 2DH */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* SUB dst:Eb,src:Rb */
sub8 cmac12struc data(
.sub7,2,
specE,modb,
specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,28h, /* DB 28H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* SUB dst:Ew,src:Rw */
sub9 cmac12struc data(
.sub8,2,
specE,modw,
specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,29h, /* DB 29H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* SUB dst:Rb,src:Eb */
sub10 cmac12struc data(
.sub9,2,
specR,modb,
specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,2ah, /* DB 2AH */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 5 10/5/81 PAGE 4
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* SUB dst:Rw,src:Ew */
sub11 cmac12struc public data(
.sub10,2,
specR,modw,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,2bh, /* DB 2BH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* TEST dst:Eb,src:Db */
test1 cmac14struc data(
nil,2,
specE,modb,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0f6h, /* DB 0F6H */
mmodrm1,0,dst, /* MODRM 0,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* TEST dst:Ew,src:Db */
test2 cmac14struc data(
.test1,2,
specE,modw,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0f7h, /* DB 0F7H */
mmodrm1,0,dst, /* MODRM 0,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* TEST dst:Ew,src:Dw */
test3 cmac14struc data(
.test2,2,
specE,modw,
specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,0f7h, /* DB 0F7H */
mmodrm1,0,dst, /* MODRM 0,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* TEST dst:Ab,src:Db */
test4 cmac9struc data(
.test3,2,
specA,modb,
specD,modb,
mdbn,0a8h, /* DB 0A8H */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* TEST dst:Aw,src:Db */
test5 cmac9struc data(
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 5 10/5/81 PAGE 5
.test4,2,
specA,modw,
specD,modb,
mdbn,0a9h, /* DB 0A9H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* TEST dst:Aw,src:Dw */
test6 cmac9struc data(
.test5,2,
specA,modw,
specD,modw,
mdbn,0a9h, /* DB 0A9H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* TEST dst:Eb,src:Rb */
test7 cmac12struc data(
.test6,2,
specE,modb,
specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,84h, /* DB 84H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* TEST dst:Ew,src:Rw */
test8 cmac12struc data(
.test7,2,
specE,modw,
specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,85h, /* DB 85H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* TEST dst:Rb,src:Eb */
test9 cmac12struc data(
.test8,2,
specR,modb,
specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,84h, /* DB 84H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* TEST dst:Rw,src:Ew */
test10 cmac12struc public data(
.test9,2,
specR,modw,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,85h, /* DB 85H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* WAIT */
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 5 10/5/81 PAGE 6
wait1 cmac3struc public data(
nil,0,
mdbn,9bh, /* DB 9BH */
mendm), /* ENDM */
/* XCHG dst:Eb,src:Rb */
xchg1 cmac12struc data(
nil,2,
specE,modb,
specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,86h, /* DB 86H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* XCHG dst:Ew,src:Rw */
xchg2 cmac12struc data(
.xchg1,2,
specE,modw,
specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,87h, /* DB 87H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* XCHG dst:Rb,src:Eb */
xchg3 cmac12struc data(
.xchg2,2,
specR,modb,
specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,86h, /* DB 86H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* XCHG dst:Rw,src:Ew */
xchg4 cmac12struc data(
.xchg3,2,
specR,modw,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,87h, /* DB 87H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* XCHG dst:Rw,src:Aw */
xchg5 cmac14struc data(
.xchg4,2,
specR,modw,specA,modw,
mdbit, /* DBIT 5(10010B),3(dst(0)) */
mnumberbits,5,12h,
mformalbits,3,dst,0,
mendbit,
mendm), /* ENDM */
/* XCHG dst:Aw,src:Rw */
xchg6 cmac14struc public data(
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 5 10/5/81 PAGE 7
.xchg5,2,
specA,modw,specR,modw,
mdbit, /* DBIT 5(10010B),3(dst(0)) */
mnumberbits,5,12h,
mformalbits,3,src,0,
mendbit,
mendm), /* ENDM */
/* XLAT dst:E */
xlat1 cmac7struc public data(
nil,1,
specE,nomod,
msegfix,dst, /* SEGFIX dst */
mdbn,0d7h, /* DB 0D7H */
mendm), /* ENDM */
/* XOR dst:Eb,src:Db */
xor1 cmac14struc data(
nil,2,
specE,modb,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,80h, /* DB 80H */
mmodrm1,6,dst, /* MODRM 6,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* XOR dst:Ew,src:Db */
xor2 cmac14struc data(
.xor1,2,
specE,modw,specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,6,dst, /* MODRM 6,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* XOR dst:Ew,src:Dw */
xor3 cmac14struc data(
.xor2,2,
specE,modw,specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,6,dst, /* MODRM 6,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* XOR dst:Ab,src:Db */
xor4 cmac9struc data(
.xor3,2,
specA,modb,specD,modb,
mdbn,34h, /* DB 34H */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* XOR dst:Aw,src:Db */
xor5 cmac9struc data(
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 5 10/5/81 PAGE 8
.xor4,2,
specA,modw,specD,modb,
mdbn,35h, /* DB 35H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* XOR dst:Aw,src:Dw */
xor6 cmac9struc data(
.xor5,2,
specA,modw,specD,modw,
mdbn,35h, /* DB 35H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* XOR dst:Eb,src:Rb */
xor7 cmac12struc data(
.xor6,2,
specE,modb,specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,30h, /* DB 30H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* XOR dst:Ew,src:Rw */
xor8 cmac12struc data(
.xor7,2,
specE,modw,specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,31h, /* DB 31H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm),
/* XOR dst:Rb,src:Eb */
xor9 cmac12struc data(
.xor8,2,
specR,modb,specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,32h, /* DB 32H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* XOR dst:Rw,src:Ew */
xor10 cmac12struc public data(
.xor9,2,
specR,modw,specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,33h, /* DB 33H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm); /* ENDM */
19 1 end$module cmac5;
MODULE INFORMATION:
CODE AREA SIZE = 0000H 0D
PL/M-86 COMPILER CODEMACRO DEFINITIONS - PART 5 10/5/81 PAGE 9
CONSTANT AREA SIZE = 026CH 620D
VARIABLE AREA SIZE = 0000H 0D
MAXIMUM STACK SIZE = 0000H 0D
743 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,440 @@
$title ('CODEMACRO DEFINITIONS - PART 5')
cmac5:
do;
/*
modified 6/16/81 R. Silberstein
*/
$include (:f1:macro.lit)
$include (:f1:cmacd.lit)
$include (:f1:equals.lit)
$include (:f1:cmac.lit)
dcl
/* STC */
stc1 cmac3struc public data(
nil,0,
mdbn,0f9h, /* DB 0F9H */
mendm), /* ENDM */
/* STD */
std1 cmac3struc public data(
nil,0,
mdbn,0fdh, /* DB 0FDH */
mendm), /* ENDM */
/* STI */
sti1 cmac3struc public data(
nil,0,
mdbn,0fbh, /* DB 0FBH */
mendm), /* ENDM */
/* STOS dst:Eb */
stos1 cmac8struc data(
nil,1,
specE,modb,
mnosegfix,res,dst, /* NOSEGFIX ES,dst */
mdbn,0aah, /* DB 0AAH */
mendm), /* ENDM */
/* STOS dst:Ew */
stos2 cmac8struc public data(
.stos1,1,
specE,modw,
mnosegfix,res,dst, /* NOSEGFIX ES,dst */
mdbn,0abh, /* DB 0ABH */
mendm), /* ENDM */
/* STOSB */
STOSB1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0AAH,
MENDM),
/* STOSW */
STOSW1 CMAC3STRUC PUBLIC DATA(
NIL,0,
MDBN,0ABH,
MENDM),
/* SUB dst:Eb,src:Db */
sub1 cmac14struc data(
nil,2,
specE,modb,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,80h, /* DB 80H */
mmodrm1,5,dst, /* MODRM 5,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* SUB dst:Ew,src:Db */
sub2 cmac14struc data(
.sub1,2,
specE,modw,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,5,dst, /* MODRM 5,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* SUB dst:Ew,src:Dsb */
sub3 cmac14struc data(
.sub2,2,
specE,modw,
specD,modsb,
msegfix,dst, /* SEGFIX dst */
mdbn,83h, /* DB 83H */
mmodrm1,5,dst, /* MODRM 5,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* SUB dst:Ew,src:Dw */
sub4 cmac14struc data(
.sub3,2,
specE,modw,
specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,5,dst, /* MODRM 5,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* SUB dst:Ab,src:Db */
sub5 cmac9struc data(
.sub4,2,
specA,modb,
specD,modb,
mdbn,2ch, /* DB 2CH */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* SUB dst:Aw,src:Db */
sub6 cmac9struc data(
.sub5,2,
specA,modw,
specD,modb,
mdbn,2dh, /* DB 2DH */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* SUB dst:Aw,src:Dw */
sub7 cmac9struc data(
.sub6,2,
specA,modw,
specD,modw,
mdbn,2dh, /* DB 2DH */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* SUB dst:Eb,src:Rb */
sub8 cmac12struc data(
.sub7,2,
specE,modb,
specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,28h, /* DB 28H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* SUB dst:Ew,src:Rw */
sub9 cmac12struc data(
.sub8,2,
specE,modw,
specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,29h, /* DB 29H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* SUB dst:Rb,src:Eb */
sub10 cmac12struc data(
.sub9,2,
specR,modb,
specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,2ah, /* DB 2AH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* SUB dst:Rw,src:Ew */
sub11 cmac12struc public data(
.sub10,2,
specR,modw,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,2bh, /* DB 2BH */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* TEST dst:Eb,src:Db */
test1 cmac14struc data(
nil,2,
specE,modb,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0f6h, /* DB 0F6H */
mmodrm1,0,dst, /* MODRM 0,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* TEST dst:Ew,src:Db */
test2 cmac14struc data(
.test1,2,
specE,modw,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,0f7h, /* DB 0F7H */
mmodrm1,0,dst, /* MODRM 0,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* TEST dst:Ew,src:Dw */
test3 cmac14struc data(
.test2,2,
specE,modw,
specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,0f7h, /* DB 0F7H */
mmodrm1,0,dst, /* MODRM 0,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* TEST dst:Ab,src:Db */
test4 cmac9struc data(
.test3,2,
specA,modb,
specD,modb,
mdbn,0a8h, /* DB 0A8H */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* TEST dst:Aw,src:Db */
test5 cmac9struc data(
.test4,2,
specA,modw,
specD,modb,
mdbn,0a9h, /* DB 0A9H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* TEST dst:Aw,src:Dw */
test6 cmac9struc data(
.test5,2,
specA,modw,
specD,modw,
mdbn,0a9h, /* DB 0A9H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* TEST dst:Eb,src:Rb */
test7 cmac12struc data(
.test6,2,
specE,modb,
specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,84h, /* DB 84H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* TEST dst:Ew,src:Rw */
test8 cmac12struc data(
.test7,2,
specE,modw,
specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,85h, /* DB 85H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* TEST dst:Rb,src:Eb */
test9 cmac12struc data(
.test8,2,
specR,modb,
specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,84h, /* DB 84H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* TEST dst:Rw,src:Ew */
test10 cmac12struc public data(
.test9,2,
specR,modw,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,85h, /* DB 85H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* WAIT */
wait1 cmac3struc public data(
nil,0,
mdbn,9bh, /* DB 9BH */
mendm), /* ENDM */
/* XCHG dst:Eb,src:Rb */
xchg1 cmac12struc data(
nil,2,
specE,modb,
specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,86h, /* DB 86H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* XCHG dst:Ew,src:Rw */
xchg2 cmac12struc data(
.xchg1,2,
specE,modw,
specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,87h, /* DB 87H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* XCHG dst:Rb,src:Eb */
xchg3 cmac12struc data(
.xchg2,2,
specR,modb,
specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,86h, /* DB 86H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* XCHG dst:Rw,src:Ew */
xchg4 cmac12struc data(
.xchg3,2,
specR,modw,
specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,87h, /* DB 87H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* XCHG dst:Rw,src:Aw */
xchg5 cmac14struc data(
.xchg4,2,
specR,modw,specA,modw,
mdbit, /* DBIT 5(10010B),3(dst(0)) */
mnumberbits,5,12h,
mformalbits,3,dst,0,
mendbit,
mendm), /* ENDM */
/* XCHG dst:Aw,src:Rw */
xchg6 cmac14struc public data(
.xchg5,2,
specA,modw,specR,modw,
mdbit, /* DBIT 5(10010B),3(dst(0)) */
mnumberbits,5,12h,
mformalbits,3,src,0,
mendbit,
mendm), /* ENDM */
/* XLAT dst:E */
xlat1 cmac7struc public data(
nil,1,
specE,nomod,
msegfix,dst, /* SEGFIX dst */
mdbn,0d7h, /* DB 0D7H */
mendm), /* ENDM */
/* XOR dst:Eb,src:Db */
xor1 cmac14struc data(
nil,2,
specE,modb,
specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,80h, /* DB 80H */
mmodrm1,6,dst, /* MODRM 6,dst */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* XOR dst:Ew,src:Db */
xor2 cmac14struc data(
.xor1,2,
specE,modw,specD,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,6,dst, /* MODRM 6,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* XOR dst:Ew,src:Dw */
xor3 cmac14struc data(
.xor2,2,
specE,modw,specD,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,81h, /* DB 81H */
mmodrm1,6,dst, /* MODRM 6,dst */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* XOR dst:Ab,src:Db */
xor4 cmac9struc data(
.xor3,2,
specA,modb,specD,modb,
mdbn,34h, /* DB 34H */
mdbf,src, /* DB src */
mendm), /* ENDM */
/* XOR dst:Aw,src:Db */
xor5 cmac9struc data(
.xor4,2,
specA,modw,specD,modb,
mdbn,35h, /* DB 35H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* XOR dst:Aw,src:Dw */
xor6 cmac9struc data(
.xor5,2,
specA,modw,specD,modw,
mdbn,35h, /* DB 35H */
mdwf,src, /* DW src */
mendm), /* ENDM */
/* XOR dst:Eb,src:Rb */
xor7 cmac12struc data(
.xor6,2,
specE,modb,specR,modb,
msegfix,dst, /* SEGFIX dst */
mdbn,30h, /* DB 30H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm), /* ENDM */
/* XOR dst:Ew,src:Rw */
xor8 cmac12struc data(
.xor7,2,
specE,modw,specR,modw,
msegfix,dst, /* SEGFIX dst */
mdbn,31h, /* DB 31H */
mmodrm2,src,dst, /* MODRM src,dst */
mendm),
/* XOR dst:Rb,src:Eb */
xor9 cmac12struc data(
.xor8,2,
specR,modb,specE,modb,
msegfix,src, /* SEGFIX src */
mdbn,32h, /* DB 32H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm), /* ENDM */
/* XOR dst:Rw,src:Ew */
xor10 cmac12struc public data(
.xor9,2,
specR,modw,specE,modw,
msegfix,src, /* SEGFIX src */
mdbn,33h, /* DB 33H */
mmodrm2,dst,src, /* MODRM dst,src */
mendm); /* ENDM */
end$module cmac5;

View File

@@ -0,0 +1,95 @@
$nolist
$eject
/* Here are the definitions for the */
/* codemacro instructions of the */
/* ASM86 assembler */
/* Commands within codemacros: */
declare
mdbn lit '0', /* DB with number */
mdbf lit '1', /* DB with formal parameter */
mdwn lit '2', /* DW with numbers */
mdwf lit '3', /* DW with formal parameter */
mddf lit '4', /* DD with formal parameter */
mdbit lit '5', /* DBIT */
mendm lit '6', /* ENDM */
mrelb lit '7', /* RELB */
mrelw lit '8', /* RELW */
mendbit lit '9', /* ENDBIT */
mmodrm1 lit '10', /* MODRM with 1 formal parameter */
mmodrm2 lit '11', /* MODRM with 2 formal parmeters */
msegfix lit '12', /* SEGFIX */
mnosegfix lit '13', /* NOSEGFIX */
mformalbits lit '14', /* define bits from formal par. */
mnumberbits lit '15'; /* define bits from number */
/* Specifier letters: */
declare
specA lit '0', /* accumulator, AX or AL */
specC lit '1', /* code, address expression */
specD lit '2', /* data, number used as immediate data */
specE lit '3', /* effective address, either a memory
address (specM) or register (specR) */
specM lit '4', /* memory address, variable (with or without
indexing) or [register expression] */
specR lit '5', /* general register only (not segment) */
specS lit '6', /* segment register */
specX lit '7'; /* simple variable name without indexing */
/* Modifier letters: */
declare
nomod lit '0',
modb lit '1', /* byte expression */
modw lit '2', /* word expression */
modsb lit '3', /* byte in range (-128,127) */
modd lit '4'; /* 2-word expression */
/* Segment override bytes: */
dcl
ESover lit '26h',
CSover lit '2eh',
SSover lit '36h',
DSover lit '3eh';
/* "AND"-masks for codemaco head flag */
declare
nopar$and lit '0fh', /* no of parameters, bit 0-3 */
prefix$and lit '10h'; /* prefix flag, bit 4 */
/* "OR"-masks for codemacro head flag */
declare
prefix$on lit '10h'; /* PREFIX on flag */
/* "AND"-masks for modifier-letter/range spec. byte */
declare
modletter$bit lit '07h', /* bits 0-2 */
range$spec$bit lit '0f8h', /* bits 3-7 */
modlettercount lit '0', /* bit position counters */
rangespeccount lit '3';
/* "OR"-masks for range-specifier bits */
declare
norange lit '0', /* no range specfier (bits 3-4) */
singlerange lit '08h', /* single range */
doublerange lit '10h', /* double range */
rangeand lit '18h',
number$range lit '0', /* bit 5 */
register$range lit '20h',
rangetypeand lit '20h';
$list

View File

@@ -0,0 +1,117 @@
$nolist
/*
modified 6/16/81 R. Silberstein
*/
declare
aaa1 byte external,
aad1 byte external,
aam1 byte external,
aas1 byte external,
adc11 byte external,
add11 byte external,
and10 byte external,
call3 byte external,
callf2 byte external,
cbw1 byte external,
clc1 byte external,
cld1 byte external,
cli1 byte external,
cmc1 byte external,
cmp11 byte external,
cmps2 byte external,
CMPSB1 BYTE EXTERNAL,
CMPSW1 BYTE EXTERNAL,
cwd1 byte external,
daa1 byte external,
das1 byte external,
dec3 byte external,
div2 byte external,
esc3 byte external,
hlt1 byte external,
idiv2 byte external,
imul2 byte external,
in4 byte external,
inc3 byte external,
int2 byte external,
into1 byte external,
iret1 byte external,
ja1 byte external,
jae1 byte external,
jb1 byte external,
jbe1 byte external,
jcxz1 byte external,
je1 byte external,
jg1 byte external,
jge1 byte external,
jl1 byte external,
jle1 byte external,
jmp2 byte external,
jmpf2 byte external,
jmps1 byte external,
jne1 byte external,
jno1 byte external,
jnp1 byte external,
jns1 byte external,
jo1 byte external,
jp1 byte external,
js1 byte external,
lahf1 byte external,
lds1 byte external,
les1 byte external,
lea1 byte external,
lock1 byte external,
lods2 byte external,
LODSB1 BYTE EXTERNAL,
LODSW1 BYTE EXTERNAL,
loop1 byte external,
loope1 byte external,
loopne1 byte external,
mov17 byte external,
movs2 byte external,
MOVSB1 BYTE EXTERNAL,
MOVSW1 BYTE EXTERNAL,
mul2 byte external,
neg2 byte external,
nop1 byte external,
not2 byte external,
or10 byte external,
out4 byte external,
pop4 byte external,
popf1 byte external,
push3 byte external,
pushf1 byte external,
rcl4 byte external,
rcr4 byte external,
rep1 byte external,
repe1 byte external,
repne1 byte external,
ret3 byte external,
retf3 byte external,
rol4 byte external,
ror4 byte external,
sahf1 byte external,
sal4 byte external,
sar4 byte external,
sbb11 byte external,
scas2 byte external,
SCASB1 BYTE EXTERNAL,
SCASW1 BYTE EXTERNAL,
shr4 byte external,
stc1 byte external,
std1 byte external,
sti1 byte external,
stos2 byte external,
STOSB1 BYTE EXTERNAL,
STOSW1 BYTE EXTERNAL,
sub11 byte external,
test10 byte external,
wait1 byte external,
xchg6 byte external,
xlat1 byte external,
xor10 byte external;
$list

View File

@@ -0,0 +1,56 @@
$nolist
clearcmindex: proc external;
end clearcmindex;
emit: proc external; /* emit codebytes for an instruction */
end emit;
emitdummies: proc external; /* emit dummy (NO-OPs) bytes if error */
end emitdummies;
commandtype: proc(comno,lg,pt) byte external;
dcl (comno,lg) byte,pt address;
end commandtype;
mDBNrout: proc external;
end mDBNrout;
mDBFrout: proc external;
end mDBFrout;
mDWNrout: proc external;
end mDWNrout;
mDWFrout: proc external;
end mDWFrout;
mDDFrout: proc external;
end mDDFrout;
mRELBrout: proc external;
end mRELBrout;
mRELWrout: proc external;
end mRELWrout;
mNOSEGFIXrout: proc external;
end mNOSEGFIXrout;
mSEGFIXrout: proc external;
end mSEGFIXrout;
mMODRM1rout: proc external;
end mMODRM1rout;
mMODRM2rout: proc external;
end mMODRM2rout;
mDBITrout: proc external;
end mDBITrout;
/* test if operands match instruction */
searchformatch: proc byte external;
end searchformatch;
$list

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,452 @@
$title ('CODEMACRO SUBROUTINE MODULE')
cmsubr:
do;
/*
modified 4/7/81 R. Silberstein
modified 4/13/81 R. Silberstein
modified 5/5/81 R. Silberstein
modified 9/2/81 R. Silberstein
*/
/*
This is the module to
1) test if a set of operands matches a given instruction
and
2) produce output code for matched instruction
The module interfaces the CODEOUTPUT module to
physically send code bytes to the HEX output file.
*/
$include (:f1:macro.lit)
$include (:f1:equals.lit)
$include (:f1:cmacd.lit)
$include (:f1:outp.lit)
$include (:f1:scan.ext)
$include (:f1:subr1.ext)
$INCLUDE (:F1:SUBR2.EXT)
$include (:f1:outp.ext)
$include (:f1:ermod.ext)
$include (:f1:cmsubr.x86)
$eject
dcl /* global variables */
bytevar based macroptr byte, /* variables within codemacros */
addrvar based macroptr addr,
emitbyte(80) byte, /* buffer of output codebytes */
emitindex byte, /* index of "emitbyte" */
bitcomtab(2) byte data /* legal commands within "DBIT" */
(mnumberbits,mformalbits);
$eject
/********** MICHELLANEOUS SUBROUTINES: **********/
clearcmindex: proc public;
emitindex=0;
end clearcmindex;
emit: proc public; /* emit codebytes for an instruction */
dcl i byte;
i=0ffh;
do while (i:=i+1) < emitindex;
call emitcodebyte(emitbyte(i),CSdata);
end$while;
end emit;
emitdummies: proc public; /* emit dummy (NO-OP-) bytes if error */
dcl (i,j) byte,nodum(4) byte data(2,5,6,8);
j=nooper;
if j>3 then j=3;
i=0ffh;
do while (i:=i+1) < nodum(j);
call emitcodebyte(90h,CSdata); /* 90H = NOP */
end$while;
end emitdummies;
emitsinglebyte: proc(ch); /* fill local emitbuffer with a new byte */
dcl ch byte;
if noerror then$do
emitbyte(emitindex)=ch;
emitindex=emitindex+1;
end$if;
end emitsinglebyte;
emitsingleword: proc (var); /* fill 2 new bytes into emitbuffer */
dcl var addr, byt1 byte at(.var), byt2 byte at(.var+1);
call emitsinglebyte(byt1);
call emitsinglebyte(byt2);
end emitsingleword;
incrmacroptr: proc;
macroptr=macroptr+1;
end incrmacroptr;
getoperadr: proc address;
dcl pt address;
pt=.operands(bytevar);
call incrmacroptr;
return pt;
end getoperadr;
/* recognize codemacro command type */
commandtype: proc(comno,lg,pt) byte public;
dcl (comno,lg,i) byte,pt address,ch based pt(1) byte;
i=0ffh;
do while (i:=i+1) < lg;
if comno=ch(i) then$do call incrmacroptr; return i; end$if;
end$while;
return lg;
end commandtype;
$eject
/******* CODEMACRO COMMAND SUBROUTINES: ********/
mDBNrout: proc public;
call emitsinglebyte(bytevar);
call incrmacroptr;
end mDBNrout;
mDBFrout: proc public;
dcl pt address,opr based pt operandstruc;
pt=getoperadr;
call emitsinglebyte(opr.offset);
end mDBFrout;
mDWNrout: proc public;
call emitsingleword(addrvar);
call incrmacroptr;
call incrmacroptr;
end mDWNrout;
mDWFrout: proc public;
dcl pt address,opr based pt operandstruc;
pt=getoperadr;
call emitsingleword(opr.offset);
end mDWFrout;
mDDFrout: proc public;
dcl pt address,opr based pt operandstruc;
pt=getoperadr;
if (opr.sflag and segmbit) = 0 then call errmsg(misssegminfo);
call emitsingleword(opr.offset);
call emitsingleword(opr.segment);
end mDDFrout;
mRELBrout: proc public;
dcl pt address,opr based pt operandstruc,displ addr;
pt=getoperadr;
displ=opr.offset-cip-2;
if (opr.segment <> csegvalue) or (typecalc(displ)=wrd) then$do
call errmsg(laboutofrange);
end$if;
call emitsinglebyte(displ);
IF ABSADDR (0) = SPACE THEN$DO
CALL HEX2OUT (OPR.OFFSET, .ABSADDR);
END$IF;
end mRELBrout;
mRELWrout: proc public;
dcl pt address,opr based pt operandstruc;
pt=getoperadr;
if opr.segment <> csegvalue then call errmsg(laboutofrange);
call emitsingleword(opr.offset-cip-3);
IF ABSADDR (0) = SPACE THEN$DO
CALL HEX2OUT (OPR.OFFSET, .ABSADDR);
END$IF;
end mRELWrout;
mNOSEGFIXrout: proc public;
dcl (segr,flag,segt) byte,pt address,opr based pt operandstruc;
segr=bytevar;
call incrmacroptr;
pt=getoperadr;
if (opr.baseindex and nooverridebit) = 0 then$do
flag=opr.sflag;
segt=shr(flag,segtypecount) and 3;
noerror=(segt=segr);
end$if;
end mNOSEGFIXrout;
mSEGFIXrout: proc public;
dcl pt address,opr based pt operandstruc,(segr,override,sflag) byte;
DSovertest: proc byte;
segr=shr(opr.baseindex,baseregcount) and 1;
return (((sflag and bregbit) <> 0) and (segr=1)); /* 1 = BP */
end DSovertest;
pt=getoperadr;
sflag=opr.sflag;
if (opr.baseindex and nooverridebit) = 0 then$do
segr=shr(sflag,segtypecount) and 3;
do case segr;
do; override=true; segr=ESover; end; /* ES */
do; override=true; segr=CSover; end; /* CS */
do; override=not DSovertest; segr=SSover; end; /* SS */
do; override=DSovertest; segr=DSover; end; /* DS */
end$case;
if override then call emitsinglebyte(segr);
end$if;
end mSEGFIXrout;
MODRM: proc (regfield,pt);
dcl pt address,opr based pt operandstruc,
(regfield,modfield,rmfield,dispflag,stype,sflag,segr) byte,
BASEIND BYTE,
offset addr,
displow byte at(.offset),disphigh byte at (.offset+1);
disptype: proc byte;
if segr=rcs then return 2; /* disp always 2 for variable in CS */
if offset = 0 then return 0;
return typecalc(offset);
end disptype;
indextype: proc byte;
if (sflag and iregbit) <> 0 then$do
if (sflag and bregbit) <> 0 then return 0;
return 1;
end$if;
return 2;
end indextype;
offset=opr.offset; /* pick up operand attributes */
stype=opr.stype;
sflag=opr.sflag;
segr=shr(sflag,segtypecount) and 3;
BASEIND = OPR.BASEINDEX AND (BASEREGBIT OR INDEXREGBIT);
if stype=reg then$do
rmfield=offset;
modfield=11b;
dispflag=0;
else$do
if (sflag and (iregbit or bregbit)) = 0 then$do
rmfield=110b;
modfield=0;
dispflag=2;
else$do
dispflag=disptype; /* get no of DISP bytes */
modfield=dispflag;
do case indextype;
/* both base- and index-reg */
RMFIELD = BASEIND AND (INDEXREGBIT OR BASEREGBIT);
/* index reg only */
RMFIELD = 100B OR (BASEIND AND INDEXREGBIT);
do; /* base reg only */
IF (BASEIND AND BASEREGBIT) > 0 THEN$DO
rmfield=110b;
/* mod=00 and r/m=110B is a special case */
if dispflag=0 then$do
dispflag,modfield=1;
end$if;
else$do
rmfield=111b;
end$if;
end;
end$case;
end$if;
end$if;
regfield=shl(regfield,3) and 38h;
modfield=shl(modfield,6) and 0c0h;
call emitsinglebyte(regfield or modfield or rmfield);
if dispflag > 0 then$do
call emitsinglebyte(displow);
if dispflag=2 then call emitsinglebyte(disphigh);
end$if;
end MODRM;
mMODRM1rout: proc public;
dcl regfield byte;
regfield=bytevar;
call incrmacroptr;
call MODRM(regfield,getoperadr);
end mMODRM1rout;
mMODRM2rout: proc public;
dcl regfield byte,pt address,opr based pt operandstruc;
pt=getoperadr;
regfield=opr.offset;
call MODRM(regfield,getoperadr);
end mMODRM2rout;
mDBITrout: proc public;
dcl (result,crbit) byte,bittab(8) byte data(1,2,4,8,16,32,64,128);
join: proc(numb,nobit,noshift);
dcl (numb,nobit,noshift) byte;
if noshift > 0 then numb=shr(numb,noshift);
if nobit < 8 then numb=shl(numb,8-nobit);
do while (crbit <> 0ffh) and (nobit > 0);
if (numb and 80h) <> 0 then result=result or bittab(crbit);
crbit=crbit-1;
nobit=nobit-1;
numb=shl(numb,1);
end$while;
end join;
NUMBERBITSrout: proc;
dcl nobit byte;
nobit=bytevar;
call incrmacroptr;
call join(bytevar,nobit,0);
call incrmacroptr;
end NUMBERBITSrout;
FORMBITSrout: proc;
dcl (nobit,numb) byte,pt address,opr based pt operandstruc;
nobit=bytevar;
call incrmacroptr;
pt=getoperadr;
numb=opr.offset;
call join(numb,nobit,bytevar);
call incrmacroptr;
end FORMBITSrout;
result=0;
crbit=7; /* current bit position */
do while bytevar <> mendbit; /* do until ENDBIT command */
do case commandtype(bytevar,length(bitcomtab),.bitcomtab);
call NUMBERBITSrout;
call FORMBITSrout;
do; end;
end$case;
end$while;
call incrmacroptr; /* skip ENDBIT command */
call emitsinglebyte(result);
end mDBITrout;
$eject
/********* ROUTINES TO MATCH OPERANDS TO INSTRUCTION ********/
/* test user operand against codemacro parameter */
matchsingleop: proc(opno) byte;
dcl (match,specletter,modletter,range,rangetype) byte,
(rangev1,rangev2,opno) byte,
pt address, oper based pt operandstruc;
rangetest: proc byte; /* perform rangetest */
dcl opervalue byte;
rangev1=bytevar;
call incrmacroptr;
if range=doublerange then$do
rangev2=bytevar;
call incrmacroptr;
end$if;
opervalue=oper.offset;
if range=doublerange then$do
return ((opervalue>=rangev1) and (opervalue<=rangev2));
else$do
return (opervalue=rangev1);
end$if;
end rangetest;
modlettertest: proc byte;
dcl numb addr,(styp,modbyt) byte;
styp=oper.stype;
if styp=lab then return true;
modbyt=oper.sflag and typebit;
if styp = reg then return (modbyt=modletter);
if styp = variable then
return ((modbyt=nomod) or (modbyt=modletter));
if styp=number then$do
numb=oper.offset;
do case modletter-1;
return not wrdtest(numb); /* BYTE */
return wrdtest(numb); /* WORD */
return (typecalc(numb)=byt); /* signed BYTE */
return false; /* DWORD */
end$case;
end$if;
return false;
end modlettertest;
speclettertest: proc byte;
dcl (opertype,locvalue,loctype) byte;
memtest: proc byte;
return (opertype=variable);
end memtest;
opertype=oper.stype;
locvalue=oper.offset;
loctype=oper.sflag and typebit;
do case specletter;
/* A - accumulator (AX or AL) */
return ((opertype=reg) and (locvalue=rax));
/* C - code reference,i.e. label */
return (opertype=lab);
/* D - immediate data */
return (opertype=number);
/* E - effective address, i.e. memory address or register */
return (memtest or (opertype=reg));
/* M - memory address */
return memtest;
/* R - register except segment register */
return ((opertype=reg) and (loctype <> dwrd));
/* S - segment register */
return ((opertype=reg) and (loctype = dwrd));
/* X - memory address without indexing */
return ((opertype=variable) and
((oper.sflag and (iregbit or bregbit))=0));
end$case;
end speclettertest;
specletter=bytevar; /* pick up codemacro attributes */
call incrmacroptr;
modletter=bytevar and modletter$bit;
range=bytevar and range$and;
rangetype=bytevar and rangetype$and;
call incrmacroptr;
pt=.operands(opno); /* address of current user operand */
match=true;
if range <> norange then match=rangetest;
if modletter <> 0 then match=match and modlettertest;
if match then match=speclettertest;
return match;
end matchsingleop;
/* test if operands match a specific codemacro */
matchingops: proc byte;
dcl savept address,(nopara,match,parno) byte;
savept=macroptr;
call incrmacroptr; /* macroptr=macroptr+2 */
call incrmacroptr;
nopara=bytevar; /* pick up no of parameters */
call incrmacroptr; /* advance to first formal */
if (nopara and prefix$on) <> 0 then return true; /* PREFIX */
if nopara <> nooper then$do
match=false;
else$do
match=true;
parno=0ffh;
do while (parno:=parno+1) < nopara;
match=match and matchsingleop(parno);
end$while;
end$if;
if not match then macroptr=savept;
return match;
end matchingops;
/* test if operands match instruction */
searchformatch: proc byte public;
dcl next based macroptr address;
macroptr=firstmacroptr;
do forever;
if matchingops then return true;
if next=0 then return false;
macroptr=next;
end$forever;
end searchformatch;
end$module cmsubr;

View File

@@ -0,0 +1,73 @@
$nolist
/*
modified 4/13/81 R. Silberstein
modified 9/2/81 R. Silberstein
*/
/* Error numbers: */
dcl
laboutofrange lit '22', /* label out of range */
misssegminfo lit '23'; /* missing segment info in operand */
/* Structures: */
dcl
symbolstruc lit 'struc(
length addr,
stype byte,
sflag byte,
segment addr,
offset addr,
baseindex byte)',
operandstruc lit 'symbolstruc';
/* define bits of SFLAG of structures above */
dcl
type$bit lit '7h', /* bit 0-2 */
segtypebit lit '18h', /* bit 3-4 */
segmbit lit '20h', /* bit 5 */
iregbit lit '40h', /* bit 6 */
bregbit lit '80h', /* bit 7 */
/* left-shift counters */
typecount lit '0',
segtypecount lit '3',
segmcount lit '5',
iregcount lit '6',
bregcount lit '7',
/* define bits of BASEINDEX byte of structures above */
indexregbit lit '01h', /* bit 0 */
baseregbit lit '02h', /* bit 1 */
nooverridebit lit '40h', /* bit 6 */
/* left shift counters */
indexregcount lit '0',
baseregcount lit '1',
noovercount lit '6';
/* Mischellaneous global variables: */
dcl
ABSADDR (4) BYTE EXTERNAL, /* ABSOLUTE ADDRESS FIELD */
cip addr external, /* current instruction pointer */
csegvalue addr external, /* current segment value */
noerror byte external, /* errorflag in codemacro decoding */
firstmacroptr address external, /* pointer at first codemacro */
macroptr address external, /* current pointer within macros */
fullsymbtab byte external, /* full if symboltable is full */
nooper byte external, /* no of instruction operands */
operands(4) operandstruc /* instruction operands,max 4 */
external;
$list

View File

@@ -0,0 +1,11 @@
$nolist
/* Special file devices if not diskfile : */
dcl
null lit '''Z''-''A''', /* file devices */
printer lit '''Y''-''A''',
console lit '''X''-''A''',
validdisk lit '''P''-''A''';
$list

View File

@@ -0,0 +1,6 @@
$nolist
decodeline: proc external;
end decodeline;
$list

View File

@@ -0,0 +1,855 @@
PL/M-86 COMPILER DECODE LINE MODULE 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE DECODEL
OBJECT MODULE PLACED IN DLINE.OBJ
COMPILER INVOKED BY: :F0: DLINE.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100) XREF
$title ('DECODE LINE MODULE')
1 decodel:
do;
/*
modified 3/26/81 R. Silberstein
modified 3/30/81 R. Silberstein
modified 4/9/81 R. Silberstein
modified 4/10/81 R. Silberstein
modified 7/24/81 R. Silberstein
*/
/*
This is the module to decode each logical sourceline.
The module takes care of all symbol definitions, and
activates the PSEUDO-module and the INSTRUCTION-module
to perform the assembly of the current non-empty source-
line.
*/
$include (:f1:macro.lit)
= $nolist
$include (:f1:struc.lit)
= $nolist
$include (:f1:equals.lit)
= $nolist
$include (:f1:ermod.lit)
= $nolist
$include (:f1:subr1.ext)
= $nolist
$include (:f1:subr2.ext)
= $nolist
$include (:f1:scan.ext)
= $nolist
$include (:f1:print.ext)
= $nolist
$include (:f1:instr.ext)
= $nolist
$include (:f1:pseud1.ext)
= $nolist
$include (:f1:pseud2.ext)
= $nolist
$include (:f1:ermod.ext)
= $nolist
$include (:f1:symb.ext)
= $nolist
$include (:f1:exglob.ext)
= $nolist
PL/M-86 COMPILER DECODE LINE MODULE 10/5/81 PAGE 2
$include (:f1:dline.x86)
= $nolist
$include (:f1:cm.ext)
= $nolist
193 1 saveaccum: proc;
194 2 acclensave=acclen;
195 2 call copy(acclen,.accum(0),.accumsave(0));
196 2 end saveaccum;
197 1 exchangeaccum: proc;
198 2 dcl locacclen byte,locaccum(80) byte;
199 2 locacclen=acclensave;
200 2 call copy(acclensave,.accumsave(0),.locaccum(0));
201 2 call saveaccum;
202 2 acclen=locacclen;
203 2 call copy(locacclen,.locaccum(0),.accum(0));
204 2 end exchangeaccum;
205 1 clearsymbol: proc;
206 2 CALL FILL (0, .CURRENTSYMBOL.BASEINDEX-.CURRENTSYMBOL+1, .CURRENTSYMBOL);
207 2 end clearsymbol;
208 1 pseudotype: proc(lg,ptr) byte;
209 2 dcl (lg,i,lvalue) byte,ptr address,pstable based ptr (1) byte;
210 2 if token.type <> pseudo then return lg+1;
212 2 i=0ffh;
213 2 do while (i:=i+1) < lg;
214 3 lvalue=token.value;
215 3 if lvalue=pstable(i) then$do
217 4 call scan; /* skip found pseudo */
218 4 return i;
219 4 end$if;
end$while;
221 2 return i;
222 2 end pseudotype;
/* test if symbol if double defined or "neglected" symbol */
223 1 not$doub$negl: proc(errno) byte;
224 2 dcl (errno,errfl) byte;
225 2 if pass = 0 then$do
227 3 if findsymbol(acclensave,.accumsave,.symbtabadr) then$do
229 4 call getattributes(symbtabadr,.currentsymbol);
230 4 if currentsymbol.stype <> neglected then$do
232 5 currentsymbol.stype=doubledefined;
233 5 call enterattributes(symbtabadr,.currentsymbol);
234 5 end$if;
235 4 return false;
236 4 end$if;
PL/M-86 COMPILER DECODE LINE MODULE 10/5/81 PAGE 3
else$do
/* pass 1 and pass 2 */
239 3 if not findsymbol(acclensave,.accumsave,.symbtabadr) then
240 3 return false;
241 3 call getattributes(symbtabadr,.currentsymbol);
242 3 errfl=true;
243 3 if currentsymbol.stype=neglected then$do
245 4 errno=neglecterr;
246 4 else$do
248 4 if currentsymbol.stype<>doubledefined then errfl=false;
end$if;
251 3 if errfl then$do
253 4 call exchangeaccum;
254 4 call errmsg(errno);
255 4 call exchangeaccum;
256 4 return false;
257 4 end$if;
end$if;
259 2 return true;
260 2 end not$doub$negl;
261 1 newsym: proc byte; /* enter new symbol into table */
262 2 if pass=0 then$do
264 3 if not newsymbol(acclensave,.accumsave,.symbtabadr) then$do
266 4 fullsymbtab=true;
267 4 return false;
268 4 end$if;
end$if;
270 2 return true;
271 2 end newsym;
/* set up symbol attributes for label,DB,DW,DD,RS */
272 1 setupattr: proc (styp,sfla);
273 2 dcl (styp,sfla,segtyp) byte;
274 2 segtyp=shl(csegtype,segtypecount) and segtypebit;
275 2 currentsymbol.stype=styp;
276 2 if csegspec then sfla=sfla or segmbit;
278 2 currentsymbol.sflag=sfla or segtyp;
279 2 currentsymbol.segment=csegvalue;
280 2 currentsymbol.offset=cip;
281 2 end setupattr;
282 1 entatr: proc; /* enter attributes of current symbol into table */
283 2 if pass <> 2 then$do
285 3 call enter$attributes(symbtabadr,.currentsymbol);
286 3 end$if;
287 2 end entatr;
/* decode instruction */
288 1 decodeinstr: proc;
289 2 if csegtype <> rcs then$do
291 3 call errmsg(instrerr);
292 3 call skip$rest$of$line;
293 3 else$do
295 3 CALL LISTCIP;
PL/M-86 COMPILER DECODE LINE MODULE 10/5/81 PAGE 4
296 3 call instruction; /* decode instruction */
297 3 end$if;
298 2 end decodeinstr;
299 1 labinstruction: proc; /* scan labelled instruction */
300 2 dcl symb based codemacroptr symbolstruc;
301 2 call saveaccum;
/* enter label into symbol table */
302 2 if not$doub$negl(doubledeflab) then$do
304 3 if newsym then$do
306 4 call setupattr(lab,wrd);
307 4 call entatr;
308 4 end$if;
end$if;
310 2 call scan; /* skip ":" */
311 2 call scan; /* allow empty instruction */
312 2 if emptyline then$do
314 3 call skip$rest$of$line;
315 3 else$do
317 3 if findcodemacro(acclen,.accum(0),.codemacroptr) then$do
319 4 call scan; /* skip codemacro */
320 4 call decode$instr;
321 4 else$do
323 4 call errmsg(illegalmacro);
324 4 end$if;
325 3 end$if;
326 2 end labinstruction;
327 1 no$ident$pseudo: proc; /* branch to correct pseudo routine */
328 2 dcl ptable(*) byte data( /* define legal unnamed pseudos */
pif,pendif,pinclude,pcseg,pdseg,psseg,peseg,porg,pdb,
pdw,pdd,prb,prs,prw,pend,ppagesize,ppagewidth,
ptitle,peject,psimform,pcodemacro,plist,pnolist,PIFLIST,PNOIFLIST,
psegfix,pnosegfix,pmodrm,prelb,prelw,pdbit,pendm);
329 2 do case pseudotype(length(ptable),.ptable); /* branch */
330 3 call IFrout;
331 3 call ENDIFrout;
332 3 call INCLUDErout;
333 3 call CSEGrout;
334 3 call DSEGrout;
335 3 call SSEGrout;
336 3 call ESEGrout;
337 3 call ORGrout;
338 3 if codemacro$flag then call db$cm$rout;
340 3 else call DBrout;
341 3 if codemacro$flag then call dw$cm$rout;
343 3 else call DWrout;
344 3 if codemacro$flag then call dd$cm$rout;
346 3 else call DDrout;
347 3 call RSrout(byt); /* RB */
348 3 call RSrout(byt); /* RS */
349 3 call RSrout(wrd); /* RW */
PL/M-86 COMPILER DECODE LINE MODULE 10/5/81 PAGE 5
350 3 call ENDrout;
351 3 call PAGESIZErout;
352 3 call PAGEWIDTHrout;
353 3 call TITLErout;
354 3 call EJECTrout;
355 3 call SIMFORMrout;
356 3 call CODEMACROrout;
357 3 call LISTrout;
358 3 call NOLISTrout;
359 3 CALL IFLISTROUT;
360 3 CALL NOIFLISTROUT;
361 3 call segfix$cm$rout; /* cm */
362 3 call nosegfix$cm$rout; /* cm */
363 3 call modrm$cm$rout; /* cm */
364 3 call relb$cm$rout; /* cm */
365 3 call relw$cm$rout; /* cm */
366 3 call dbit$cm$rout; /* cm */
367 3 call end$cm$rout; /* cm */
368 3 do; /* error, illegal pseudo */
369 4 call errmsg(illegalpseudo);
370 4 call skip$rest$of$line;
371 4 end;
372 3 end$case;
373 2 end no$ident$pseudo;
374 1 identpseudo: proc(normal); /* scan a named pseudo instruction */
375 2 dcl (noerr,normal) byte,symb based codemacroptr symbolstruc;
376 2 entervar: proc(typ);
377 3 dcl typ byte;
378 3 noerr=false;
379 3 if not$doub$negl(doubledefvar) then$do
381 4 if newsym then$do
383 5 call setupattr(variable,typ);
384 5 noerr=true;
385 5 end$if;
end$if;
387 3 end entervar;
388 2 enter: proc;
389 3 if noerr then call entatr;
391 3 end enter;
/* legal pseudos: DB,DW,DD,RB,RS,RW,EQU */
392 2 dcl pseudotable(7) byte data(pdb,pdw,pdd,prb,prs,prw,pequ);
393 2 call clearsymbol; /* clear attributes of current symbol */
394 2 if normal then$do /* unormal if EQU with instruction parameter */
396 3 call saveaccum;
397 3 call scan; /* scan actual pseudo */
398 3 end$if;
399 2 do case pseudotype(length(pseudotable),.pseudotable);
400 3 do; /* DB */
401 4 call entervar(byt);
402 4 call DBrout;
403 4 call enter;
PL/M-86 COMPILER DECODE LINE MODULE 10/5/81 PAGE 6
404 4 end;
405 3 do; /* DW */
406 4 call entervar(wrd);
407 4 call DWrout;
408 4 call enter;
409 4 end;
410 3 do; /* DD */
411 4 call entervar(dwrd);
412 4 call DDrout;
413 4 call enter;
414 4 end;
415 3 do; /* RB */
416 4 call entervar(byt);
417 4 call RSrout(byt);
418 4 call enter;
419 4 end;
420 3 do; /* RS */
421 4 call entervar(byt);
422 4 call RSrout(byt);
423 4 call enter;
424 4 end;
425 3 do; /* RW */
426 4 call entervar(wrd);
427 4 call RSrout(wrd);
428 4 call enter;
429 4 end;
430 3 do; /* EQU */
431 4 if not$doub$negl(doubledefsymb) then$do
433 5 if newsym then$do
435 6 call EQUrout;
436 6 else$do
438 6 call skip$rest$of$line;
439 6 end$if;
440 5 else$do
442 5 call skip$rest$of$line;
443 5 end$if;
444 4 end;
445 3 do; /* illegal pseudo instruction */
446 4 call errmsg(illegalpseudo);
447 4 call skip$rest$of$line;
448 4 end;
449 3 do; /* missing pseudo instruction */
450 4 call errmsg(missingpseudo);
451 4 call skip$rest$of$line;
452 4 end;
453 3 end$case;
454 2 end identpseudo;
455 1 decodeline: proc public;
PL/M-86 COMPILER DECODE LINE MODULE 10/5/81 PAGE 7
456 2 first$item$type: proc byte;
457 3 dcl typ byte;
458 3 typ=token.type;
459 3 if typ=pseudo then return 3;
461 3 if typ=ident and nextch=':' then return 2;
463 3 if (typ=ident) or (typ=operator) then$do
465 4 if findcodemacro(acclen,.accum(0),.codemacroptr) then$do
467 5 call saveaccum;
468 5 call scan; /* skip found codemacro */
469 5 typ=token.value;
470 5 if (token.type=pseudo) and (typ=pequ) then return 5;
472 5 return 4;
473 5 end$if;
end$if;
475 3 if typ <> ident then return 0; /* error */
477 3 return 1;
478 3 end first$item$type;
479 2 if accum(0) <> cr then$do /* skip blank lines */
481 3 do case first$item$type;
482 4 do; /* error,skip rest of line */
483 5 call errmsg(first$item); /* error handler */
484 5 call skip$rest$of$line;
485 5 end;
486 4 call ident$pseudo(true); /* named pseudo instruction */
487 4 call lab$instruction; /* label (followed by instruction) */
488 4 call no$ident$pseudo; /* pseudo instruction */
489 4 call decodeinstr; /* code instruction */
490 4 call identpseudo(false); /* EQU with instruction parameter */
491 4 end$case;
492 3 end$if;
493 2 end decodeline;
494 1 end$module decodel;
PL/M-86 COMPILER DECODE LINE MODULE 10/5/81 PAGE 8
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
169 0000H 1 ACCLEN . . . . . . BYTE EXTERNAL(74) 194 195 202 317 465
170 0000H 1 ACCLENSAVE . . . . BYTE EXTERNAL(82) 194 199 200 227 239
264
169 0000H 80 ACCUM. . . . . . . BYTE ARRAY(80) EXTERNAL(75) 195 203 317
465 479
170 0000H 80 ACCUMSAVE. . . . . BYTE ARRAY(80) EXTERNAL(81) 195 200 227
239 264
2 ADDR . . . . . . . LITERALLY 11 14 17 20 26 44 47
50 53 139 140 146 149 152 155 158 161
164 167 169 170 300 375
34 0000H ALPHANUMERIC . . . PROCEDURE BYTE EXTERNAL(8) STACK=0000H
37 0000H ASCIICHAR. . . . . PROCEDURE BYTE EXTERNAL(9) STACK=0000H
166 0000H 2 ASCIIPTR . . . . . WORD PARAMETER 167
300 0008H 1 BASEINDEX. . . . . BYTE MEMBER(SYMB)
170 0008H 1 BASEINDEX. . . . . BYTE MEMBER(CURRENTSYMBOL) 206
169 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPERANDS)
375 0008H 1 BASEINDEX. . . . . BYTE MEMBER(SYMB)
3 BASEREGBIT . . . . LITERALLY
3 BASEREGCOUNT . . . LITERALLY
3 BREGBIT. . . . . . LITERALLY
3 BREGCOUNT. . . . . LITERALLY
5 BYT. . . . . . . . LITERALLY 347 348 401 416 417 421 422
31 0000H 1 CH . . . . . . . . BYTE PARAMETER 32
28 0000H 1 CH . . . . . . . . BYTE PARAMETER 29
34 0000H 1 CH . . . . . . . . BYTE PARAMETER 35
37 0000H 1 CH . . . . . . . . BYTE PARAMETER 38
25 0000H 1 CH . . . . . . . . BYTE PARAMETER 26
69 0000H 1 CH . . . . . . . . BYTE PARAMETER 70
40 0000H 1 CH . . . . . . . . BYTE PARAMETER 41
169 0000H 2 CIP. . . . . . . . WORD EXTERNAL(66) 280
205 0043H 19 CLEARSYMBOL. . . . PROCEDURE STACK=000AH 393
4 CODE . . . . . . . LITERALLY
9 CODEMACROERR . . . LITERALLY
170 0000H 1 CODEMACROFLAG. . . BYTE EXTERNAL(87) 338 341 344
3 CODEMACROHEAD. . . LITERALLY
170 0000H 2 CODEMACROPTR . . . WORD EXTERNAL(86) 300 317 375 465
171 0000H CODEMACROROUT. . . PROCEDURE EXTERNAL(88) STACK=0000H 356
16 0000H COPY . . . . . . . PROCEDURE EXTERNAL(2) STACK=0000H 195 200
203
2 CR . . . . . . . . LITERALLY 479
98 0000H CSEGROUT . . . . . PROCEDURE EXTERNAL(34) STACK=0000H 333
169 0000H 1 CSEGSPEC . . . . . BYTE EXTERNAL(69) 276
169 0000H 1 CSEGTYPE . . . . . BYTE EXTERNAL(67) 274 289
169 0000H 2 CSEGVALUE. . . . . WORD EXTERNAL(68) 279
169 0000H 2 CURDSEG. . . . . . WORD EXTERNAL(71)
170 0000H 9 CURRENTSYMBOL. . . STRUCTURE EXTERNAL(84) 206 229 230 232
233 241 243 248 275 278 279 280 285
16 0000H 2 D. . . . . . . . . WORD PARAMETER 17
52 0000H 2 D. . . . . . . . . WORD PARAMETER 53
PL/M-86 COMPILER DECODE LINE MODULE 10/5/81 PAGE 9
49 0000H 2 D. . . . . . . . . WORD PARAMETER 50
46 0000H 2 D. . . . . . . . . WORD PARAMETER 47
43 0000H 2 D. . . . . . . . . WORD PARAMETER 44
173 0000H DBCMROUT . . . . . PROCEDURE EXTERNAL(89) STACK=0000H 339
189 0000H DBITCMROUT . . . . PROCEDURE EXTERNAL(97) STACK=0000H 366
89 0000H DBROUT . . . . . . PROCEDURE EXTERNAL(30) STACK=0000H 340 402
2 DCL. . . . . . . . LITERALLY
177 0000H DDCMROUT . . . . . PROCEDURE EXTERNAL(91) STACK=0000H 345
93 0000H DDROUT . . . . . . PROCEDURE EXTERNAL(32) STACK=0000H 346 412
288 01B2H 29 DECODEINSTR. . . . PROCEDURE STACK=0006H 320 489
1 0000H DECODEL. . . . . . PROCEDURE STACK=0000H
455 0432H 76 DECODELINE . . . . PROCEDURE PUBLIC STACK=0024H
52 0000H DECOUT . . . . . . PROCEDURE EXTERNAL(14) STACK=0000H
4 DELETEDSYMB. . . . LITERALLY
169 0001H 1 DESCR. . . . . . . BYTE MEMBER(TOKEN)
154 0000H 2 DEST . . . . . . . WORD PARAMETER 155
28 0000H DIGIT. . . . . . . PROCEDURE BYTE EXTERNAL(6) STACK=0000H
4 DOUBLEDEFINED. . . LITERALLY 232 248
9 DOUBLEDEFLAB . . . LITERALLY 302
9 DOUBLEDEFSYMB. . . LITERALLY 431
9 DOUBLEDEFVAR . . . LITERALLY 379
100 0000H DSEGROUT . . . . . PROCEDURE EXTERNAL(35) STACK=0000H 334
169 0000H 1 DSPEC. . . . . . . BYTE EXTERNAL(70)
175 0000H DWCMROUT . . . . . PROCEDURE EXTERNAL(90) STACK=0000H 342
5 DWRD . . . . . . . LITERALLY 411
91 0000H DWROUT . . . . . . PROCEDURE EXTERNAL(31) STACK=0000H 343 407
83 0000H EJECT. . . . . . . PROCEDURE EXTERNAL(27) STACK=0000H
124 0000H EJECTROUT. . . . . PROCEDURE EXTERNAL(47) STACK=0000H 354
2 ELSEDO . . . . . . LITERALLY 236
67 0000H EMPTYLINE. . . . . PROCEDURE BYTE EXTERNAL(20) STACK=0000H 312
2 ENDCASE. . . . . . LITERALLY
191 0000H ENDCMROUT. . . . . PROCEDURE EXTERNAL(98) STACK=0000H 367
2 ENDDO. . . . . . . LITERALLY
2 ENDFOREVER . . . . LITERALLY
2 ENDIF. . . . . . . LITERALLY 249 257 268 308 385 473
112 0000H ENDIFROUT. . . . . PROCEDURE EXTERNAL(41) STACK=0000H 331
2 ENDMODULE. . . . . LITERALLY
2 ENDOFFILE. . . . . LITERALLY
9 ENDOFLINEERR . . . LITERALLY
140 0000H 2 ENDOFSYMBTAB . . . WORD EXTERNAL(55)
2 ENDPROC. . . . . . LITERALLY
116 0000H ENDROUT. . . . . . PROCEDURE EXTERNAL(43) STACK=0000H 350
2 ENDWHILE . . . . . LITERALLY 219
282 019BH 23 ENTATR . . . . . . PROCEDURE STACK=0008H 307 390
388 0423H 15 ENTER. . . . . . . PROCEDURE STACK=000CH 403 408 413 418
423 428
157 0000H ENTERATTRIBUTES. . PROCEDURE EXTERNAL(62) STACK=0000H 233 285
376 03F8H 43 ENTERVAR . . . . . PROCEDURE STACK=001AH 401 406 411 416
421 426
43 0000H EQUAL. . . . . . . PROCEDURE BYTE EXTERNAL(11) STACK=0000H
108 0000H EQUROUT. . . . . . PROCEDURE EXTERNAL(39) STACK=0000H 435
224 0053H 1 ERRFL. . . . . . . BYTE 242 249 251
136 0000H ERRMSG . . . . . . PROCEDURE EXTERNAL(53) STACK=0000H 254 291
323 369 446 450 483
136 0000H 1 ERRNO. . . . . . . BYTE PARAMETER 137
223 0004H 1 ERRNO. . . . . . . BYTE PARAMETER AUTOMATIC 224 245 254
4 ERROR. . . . . . . LITERALLY
PL/M-86 COMPILER DECODE LINE MODULE 10/5/81 PAGE 10
104 0000H ESEGROUT . . . . . PROCEDURE EXTERNAL(37) STACK=0000H 336
197 0017H 44 EXCHANGEACCUM. . . PROCEDURE STACK=000EH 253 255
2 FALSE. . . . . . . LITERALLY 235 240 249 256 267 378 490
22 0000H 2 FCBADR . . . . . . WORD PARAMETER 23
22 0000H FILEABORT. . . . . PROCEDURE EXTERNAL(4) STACK=0000H
3 FILEISTRUCTURE . . LITERALLY
3 FILEOSTRUCTURE . . LITERALLY
9 FILESYNTERR. . . . LITERALLY
25 0000H FILL . . . . . . . PROCEDURE EXTERNAL(5) STACK=0000H 206
160 0000H FINDCODEMACRO. . . PROCEDURE BYTE EXTERNAL(63) STACK=0000H 317
465
151 0000H FINDSYMBOL . . . . PROCEDURE BYTE EXTERNAL(60) STACK=0000H 227
239
9 FIRSTITEM. . . . . LITERALLY 483
456 047EH 117 FIRSTITEMTYPE. . . PROCEDURE BYTE STACK=000EH 481
2 FOREVER. . . . . . LITERALLY
2 FORMFEED . . . . . LITERALLY
139 0000H 2 FREEPT . . . . . . WORD EXTERNAL(54)
170 0000H 1 FULLSYMBTAB. . . . BYTE EXTERNAL(83) 266
154 0000H GETATTRIBUTES. . . PROCEDURE EXTERNAL(61) STACK=0000H 229 241
46 0000H HEX1OUT. . . . . . PROCEDURE EXTERNAL(12) STACK=0000H
49 0000H HEX2OUT. . . . . . PROCEDURE EXTERNAL(13) STACK=0000H
209 0051H 1 I. . . . . . . . . BYTE 212 213 215 218 221
4 IDENT. . . . . . . LITERALLY 461 463 475
374 034DH 171 IDENTPSEUDO. . . . PROCEDURE STACK=0020H 486 490
132 0000H IFLISTROUT . . . . PROCEDURE EXTERNAL(51) STACK=0000H 359
9 IFPARERR . . . . . LITERALLY
110 0000H IFROUT . . . . . . PROCEDURE EXTERNAL(40) STACK=0000H 330
9 ILLEGALMACRO . . . LITERALLY 323
9 ILLEGALPSEUDO. . . LITERALLY 369 446
9 ILLEXPRELEM. . . . LITERALLY
9 ILLIOPER . . . . . LITERALLY
114 0000H INCLUDEROUT. . . . PROCEDURE EXTERNAL(42) STACK=0000H 332
3 INDEXREGBIT. . . . LITERALLY
3 INDEXREGCOUNT. . . LITERALLY
2 INIT . . . . . . . LITERALLY
9 INSTRERR . . . . . LITERALLY 291
85 0000H INSTRUCTION. . . . PROCEDURE EXTERNAL(28) STACK=0000H 296
3 IREGBIT. . . . . . LITERALLY
3 IREGCOUNT. . . . . LITERALLY
4 LAB. . . . . . . . LITERALLY 306
299 01CFH 88 LABINSTRUCTION . . PROCEDURE STACK=0018H 487
9 LABOUTOFRANGE. . . LITERALLY
8 LEFTBRACKET. . . . LITERALLY
LENGTH . . . . . . BUILTIN 329 399
169 0000H 2 LENGTH . . . . . . WORD MEMBER(OPERANDS)
300 0000H 2 LENGTH . . . . . . WORD MEMBER(SYMB)
170 0000H 2 LENGTH . . . . . . WORD MEMBER(CURRENTSYMBOL)
375 0000H 2 LENGTH . . . . . . WORD MEMBER(SYMB)
31 0000H LETTER . . . . . . PROCEDURE BYTE EXTERNAL(7) STACK=0000H
2 LF . . . . . . . . LITERALLY
208 0006H 1 LG . . . . . . . . BYTE PARAMETER AUTOMATIC 209 211 213
160 0000H 1 LG . . . . . . . . BYTE PARAMETER 161
151 0000H 1 LG . . . . . . . . BYTE PARAMETER 152
148 0000H 1 LG . . . . . . . . BYTE PARAMETER 149
163 0000H 1 LG . . . . . . . . BYTE PARAMETER 164
145 0000H 1 LG . . . . . . . . BYTE PARAMETER 146
PL/M-86 COMPILER DECODE LINE MODULE 10/5/81 PAGE 11
166 0000H 1 LG . . . . . . . . BYTE PARAMETER 167
87 0000H LISTCIP. . . . . . PROCEDURE EXTERNAL(29) STACK=0000H 295
128 0000H LISTROUT . . . . . PROCEDURE EXTERNAL(49) STACK=0000H 357
2 LIT. . . . . . . . LITERALLY 2 3 4 5 6 7 8
9
198 0000H 1 LOCACCLEN. . . . . BYTE 199 202 203
198 0001H 80 LOCACCUM . . . . . BYTE ARRAY(80) 200 203
209 0052H 1 LVALUE . . . . . . BYTE 214 215
148 0000H 2 MACDEFPT . . . . . WORD PARAMETER 149
9 MISSIFERR. . . . . LITERALLY
9 MISSINGPSEUDO. . . LITERALLY 450
9 MISSINSTR. . . . . LITERALLY
9 MISSSEGMINFO . . . LITERALLY
9 MISSTYPEINFO . . . LITERALLY
183 0000H MODRMCMROUT. . . . PROCEDURE EXTERNAL(94) STACK=0000H 363
25 0000H 1 N. . . . . . . . . BYTE PARAMETER 26
16 0000H 1 N. . . . . . . . . BYTE PARAMETER 17
13 0000H 2 N. . . . . . . . . WORD PARAMETER 14
52 0000H 2 N. . . . . . . . . WORD PARAMETER 53
49 0000H 2 N. . . . . . . . . WORD PARAMETER 50
46 0000H 1 N. . . . . . . . . BYTE PARAMETER 47
43 0000H 1 N. . . . . . . . . BYTE PARAMETER 44
4 NEGLECTED. . . . . LITERALLY 230 243
9 NEGLECTERR . . . . LITERALLY 245
9 NESTEDIFERR. . . . LITERALLY
9 NESTEDINCLUDEERR . LITERALLY
163 0000H NEWCMBODY. . . . . PROCEDURE BYTE EXTERNAL(64) STACK=0000H
166 0000H NEWCMNAME. . . . . PROCEDURE BYTE EXTERNAL(65) STACK=0000H
148 0000H NEWMACRO . . . . . PROCEDURE BYTE EXTERNAL(59) STACK=0000H
261 0136H 44 NEWSYM . . . . . . PROCEDURE BYTE STACK=000AH 304 381 433
145 0000H NEWSYMBOL. . . . . PROCEDURE BYTE EXTERNAL(58) STACK=0000H 264
169 0000H 1 NEXTCH . . . . . . BYTE EXTERNAL(73) 461
5 NIL. . . . . . . . LITERALLY
375 0055H 1 NOERR. . . . . . . BYTE 378 384 389
327 0227H 294 NOIDENTPSEUDO. . . PROCEDURE STACK=000CH 488
134 0000H NOIFLISTROUT . . . PROCEDURE EXTERNAL(52) STACK=0000H 360
130 0000H NOLISTROUT . . . . PROCEDURE EXTERNAL(50) STACK=0000H 358
169 0000H 1 NOOPER . . . . . . BYTE EXTERNAL(76)
3 NOOVERCOUNT. . . . LITERALLY
3 NOOVERRIDEBIT. . . LITERALLY
374 0004H 1 NORMAL . . . . . . BYTE PARAMETER AUTOMATIC 375 394
181 0000H NOSEGFIXCMROUT . . PROCEDURE EXTERNAL(93) STACK=0000H 362
223 009AH 156 NOTDOUBNEGL. . . . PROCEDURE BYTE STACK=0014H 302 379 431
4 NUMBER . . . . . . LITERALLY
8 OAND . . . . . . . LITERALLY
8 OEQ. . . . . . . . LITERALLY
375 0006H 2 OFFSET . . . . . . WORD MEMBER(SYMB)
170 0006H 2 OFFSET . . . . . . WORD MEMBER(CURRENTSYMBOL) 280
169 0006H 2 OFFSET . . . . . . WORD MEMBER(OPERANDS)
300 0006H 2 OFFSET . . . . . . WORD MEMBER(SYMB)
8 OGE. . . . . . . . LITERALLY
8 OGT. . . . . . . . LITERALLY
8 OLAST. . . . . . . LITERALLY
8 OLE. . . . . . . . LITERALLY
8 OLENGTH. . . . . . LITERALLY
8 OLT. . . . . . . . LITERALLY
8 OMOD . . . . . . . LITERALLY
PL/M-86 COMPILER DECODE LINE MODULE 10/5/81 PAGE 12
8 ONE. . . . . . . . LITERALLY
8 ONOT . . . . . . . LITERALLY
8 OOFFSET. . . . . . LITERALLY
8 OOR. . . . . . . . LITERALLY
169 0000H 36 OPERANDS . . . . . STRUCTURE ARRAY(4) EXTERNAL(77)
3 OPERANDSTRUC . . . LITERALLY 169
4 OPERATOR . . . . . LITERALLY 463
9 OPMISMATCH . . . . LITERALLY
8 OPTR . . . . . . . LITERALLY
106 0000H ORGROUT. . . . . . PROCEDURE EXTERNAL(38) STACK=0000H 337
8 OSEG . . . . . . . LITERALLY
8 OSHL . . . . . . . LITERALLY
8 OSHORT . . . . . . LITERALLY
8 OSHR . . . . . . . LITERALLY
8 OTYPE. . . . . . . LITERALLY
19 0000H OUTTEXT. . . . . . PROCEDURE EXTERNAL(3) STACK=0000H
8 OXOR . . . . . . . LITERALLY
118 0000H PAGESIZEROUT . . . PROCEDURE EXTERNAL(44) STACK=0000H 351
120 0000H PAGEWIDTHROUT. . . PROCEDURE EXTERNAL(45) STACK=0000H 352
170 0000H 1 PASS . . . . . . . BYTE EXTERNAL(78) 225 262 283
7 PCODEMACRO . . . . LITERALLY 328
7 PCSEG. . . . . . . LITERALLY 328
7 PDB. . . . . . . . LITERALLY 328 392
7 PDBIT. . . . . . . LITERALLY 328
7 PDD. . . . . . . . LITERALLY 328 392
7 PDSEG. . . . . . . LITERALLY 328
7 PDW. . . . . . . . LITERALLY 328 392
7 PEJECT . . . . . . LITERALLY 328
7 PEND . . . . . . . LITERALLY 328
7 PENDIF . . . . . . LITERALLY 328
7 PENDM. . . . . . . LITERALLY 328
7 PEQU . . . . . . . LITERALLY 392 470
7 PESEG. . . . . . . LITERALLY 328
7 PIF. . . . . . . . LITERALLY 328
7 PIFLIST. . . . . . LITERALLY 328
7 PINCLUDE . . . . . LITERALLY 328
7 PLIST. . . . . . . LITERALLY 328
7 PMODRM . . . . . . LITERALLY 328
7 PNOIFLIST. . . . . LITERALLY 328
7 PNOLIST. . . . . . LITERALLY 328
7 PNOSEGFIX. . . . . LITERALLY 328
7 PORG . . . . . . . LITERALLY 328
7 PPAGESIZE. . . . . LITERALLY 328
7 PPAGEWIDTH . . . . LITERALLY 328
7 PRB. . . . . . . . LITERALLY 328 392
170 0000H 240 PREFIX . . . . . . BYTE ARRAY(240) EXTERNAL(79)
170 0000H 1 PREFIXPTR. . . . . BYTE EXTERNAL(80)
7 PRELB. . . . . . . LITERALLY 328
7 PRELW. . . . . . . LITERALLY 328
72 0000H PRINTCRLF. . . . . PROCEDURE EXTERNAL(22) STACK=0000H
78 0000H PRINTINIT. . . . . PROCEDURE EXTERNAL(25) STACK=0000H
74 0000H PRINTNEWPAGE . . . PROCEDURE EXTERNAL(23) STACK=0000H
69 0000H PRINTSINGLEBYTE. . PROCEDURE EXTERNAL(21) STACK=0000H
76 0000H PRINTSOURCELINE. . PROCEDURE EXTERNAL(24) STACK=0000H
80 0000H PRINTTERMINATE . . PROCEDURE EXTERNAL(26) STACK=0000H
2 PROC . . . . . . . LITERALLY 10 13 34 37 46 49 52
55 57 59 61 64 67 69 72 74 76
PL/M-86 COMPILER DECODE LINE MODULE 10/5/81 PAGE 13
78 80 83 85 89 91 93 95 98 100
102 104 106 108 110 112 114 116 118 120
122 124 126 128 130 132 134 136 141 143
145 148 151 154 157 160 163 166 171 173
175 177 179 181 183 185 187 189 191 193
197 205 208 223 261 272 282 288 299 327
374 376 388 455 456
7 PRS. . . . . . . . LITERALLY 328 392
7 PRW. . . . . . . . LITERALLY 328 392
7 PSEGFIX. . . . . . LITERALLY 328
4 PSEUDO . . . . . . LITERALLY 210 459 470
9 PSEUDOOPERR. . . . LITERALLY
392 0020H 7 PSEUDOTABLE. . . . BYTE ARRAY(7) DATA 399
208 0056H 68 PSEUDOTYPE . . . . PROCEDURE BYTE STACK=0008H 329 399
7 PSIMFORM . . . . . LITERALLY 328
7 PSSEG. . . . . . . LITERALLY 328
209 0000H 1 PSTABLE. . . . . . BYTE BASED(PTR) ARRAY(1) 215
25 0000H 2 PT . . . . . . . . WORD PARAMETER 26
328 0000H 32 PTABLE . . . . . . BYTE ARRAY(32) DATA 329
7 PTITLE . . . . . . LITERALLY 328
208 0004H 2 PTR. . . . . . . . WORD PARAMETER AUTOMATIC 209 215
163 0000H 2 PTR. . . . . . . . WORD PARAMETER 164
6 RAH. . . . . . . . LITERALLY
6 RAL. . . . . . . . LITERALLY
6 RAX. . . . . . . . LITERALLY
6 RBH. . . . . . . . LITERALLY
6 RBL. . . . . . . . LITERALLY
6 RBP. . . . . . . . LITERALLY
6 RBX. . . . . . . . LITERALLY
6 RCH. . . . . . . . LITERALLY
6 RCL. . . . . . . . LITERALLY
6 RCS. . . . . . . . LITERALLY 289
6 RCX. . . . . . . . LITERALLY
6 RDH. . . . . . . . LITERALLY
6 RDI. . . . . . . . LITERALLY
6 RDL. . . . . . . . LITERALLY
6 RDS. . . . . . . . LITERALLY
6 RDX. . . . . . . . LITERALLY
2 REENT. . . . . . . LITERALLY
4 REG. . . . . . . . LITERALLY
185 0000H RELBCMROUT . . . . PROCEDURE EXTERNAL(95) STACK=0000H 364
187 0000H RELWCMROUT . . . . PROCEDURE EXTERNAL(96) STACK=0000H 365
6 RES. . . . . . . . LITERALLY
160 0000H 2 RESULT . . . . . . WORD PARAMETER 161
151 0000H 2 RESULT . . . . . . WORD PARAMETER 152
145 0000H 2 RESULT . . . . . . WORD PARAMETER 146
166 0000H 2 RETURNPTR. . . . . WORD PARAMETER 167
8 RIGHTBRACKET . . . LITERALLY
6 RSI. . . . . . . . LITERALLY
6 RSP. . . . . . . . LITERALLY
95 0000H RSROUT . . . . . . PROCEDURE EXTERNAL(33) STACK=0000H 347 348
349 417 422 427
6 RSS. . . . . . . . LITERALLY
16 0000H 2 S. . . . . . . . . WORD PARAMETER 17
43 0000H 2 S. . . . . . . . . WORD PARAMETER 44
193 0000H 23 SAVEACCUM. . . . . PROCEDURE STACK=000AH 201 301 396 467
57 0000H SCAN . . . . . . . PROCEDURE EXTERNAL(16) STACK=0000H 217 310
PL/M-86 COMPILER DECODE LINE MODULE 10/5/81 PAGE 14
311 319 397 468
55 0000H SCANINIT . . . . . PROCEDURE EXTERNAL(15) STACK=0000H
179 0000H SEGFIXCMROUT . . . PROCEDURE EXTERNAL(92) STACK=0000H 361
3 SEGMBIT. . . . . . LITERALLY 277
3 SEGMCOUNT. . . . . LITERALLY
375 0004H 2 SEGMENT. . . . . . WORD MEMBER(SYMB)
300 0004H 2 SEGMENT. . . . . . WORD MEMBER(SYMB)
170 0004H 2 SEGMENT. . . . . . WORD MEMBER(CURRENTSYMBOL) 279
169 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPERANDS)
273 0054H 1 SEGTYP . . . . . . BYTE 274 278
3 SEGTYPEBIT . . . . LITERALLY 274
3 SEGTYPECOUNT . . . LITERALLY 274
272 0162H 57 SETUPATTR. . . . . PROCEDURE STACK=0006H 306 383
272 0004H 1 SFLA . . . . . . . BYTE PARAMETER AUTOMATIC 273 277 278
375 0003H 1 SFLAG. . . . . . . BYTE MEMBER(SYMB)
300 0003H 1 SFLAG. . . . . . . BYTE MEMBER(SYMB)
170 0003H 1 SFLAG. . . . . . . BYTE MEMBER(CURRENTSYMBOL) 278
169 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPERANDS)
SHL. . . . . . . . BUILTIN 274
126 0000H SIMFORMROUT. . . . PROCEDURE EXTERNAL(48) STACK=0000H 355
59 0000H SKIPRESTOFLINE . . PROCEDURE EXTERNAL(17) STACK=0000H 292 314
370 438 442 447 451 484
64 0000H SKIPUNTIL. . . . . PROCEDURE BYTE EXTERNAL(19) STACK=0000H
157 0000H 2 SOURCE . . . . . . WORD PARAMETER 158
2 SPACE. . . . . . . LITERALLY
4 SPEC . . . . . . . LITERALLY
61 0000H SPECIALTOKEN . . . PROCEDURE BYTE EXTERNAL(18) STACK=0000H
102 0000H SSEGROUT . . . . . PROCEDURE EXTERNAL(36) STACK=0000H 335
160 0000H 2 STRADR . . . . . . WORD PARAMETER 161
151 0000H 2 STRADR . . . . . . WORD PARAMETER 152
148 0000H 2 STRADR . . . . . . WORD PARAMETER 149
145 0000H 2 STRADR . . . . . . WORD PARAMETER 146
4 STRING . . . . . . LITERALLY
2 STRUC. . . . . . . LITERALLY 169 170 300 375
272 0006H 1 STYP . . . . . . . BYTE PARAMETER AUTOMATIC 273 275
375 0002H 1 STYPE. . . . . . . BYTE MEMBER(SYMB)
300 0002H 1 STYPE. . . . . . . BYTE MEMBER(SYMB)
170 0002H 1 STYPE. . . . . . . BYTE MEMBER(CURRENTSYMBOL) 230 232 243
248 275
169 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPERANDS)
375 0000H 9 SYMB . . . . . . . STRUCTURE BASED(CODEMACROPTR)
300 0000H 9 SYMB . . . . . . . STRUCTURE BASED(CODEMACROPTR)
157 0000H 2 SYMBADR. . . . . . WORD PARAMETER 158
154 0000H 2 SYMBADR. . . . . . WORD PARAMETER 155
143 0000H SYMBINIT . . . . . PROCEDURE EXTERNAL(57) STACK=0000H
4 SYMBOL . . . . . . LITERALLY
3 SYMBOLHEAD . . . . LITERALLY
3 SYMBOLSTRUC. . . . LITERALLY 169 170 300 375
170 0000H 2 SYMBTABADR . . . . WORD EXTERNAL(85) 227 229 233 239 241
264 285
141 0000H SYMBTERMINATE. . . PROCEDURE EXTERNAL(56) STACK=0000H
19 0000H 2 T. . . . . . . . . WORD PARAMETER 20
2 TAB. . . . . . . . LITERALLY
22 0000H 2 TEXTADR. . . . . . WORD PARAMETER 23
2 THENDO . . . . . . LITERALLY 215 225 227 230 243 251 262
264 283 289 302 304 312 317 379 381 394
431 433 463 465 479
PL/M-86 COMPILER DECODE LINE MODULE 10/5/81 PAGE 15
122 0000H TITLEROUT. . . . . PROCEDURE EXTERNAL(46) STACK=0000H 353
64 0000H 1 TOK. . . . . . . . BYTE PARAMETER 65
61 0000H 1 TOK. . . . . . . . BYTE PARAMETER 62
169 0000H 4 TOKEN. . . . . . . STRUCTURE EXTERNAL(72) 210 214 458 469
470
2 TRUE . . . . . . . LITERALLY 242 259 266 270 384 486
457 0056H 1 TYP. . . . . . . . BYTE 458 459 461 463 469 470 475
376 0004H 1 TYP. . . . . . . . BYTE PARAMETER AUTOMATIC 377 383
95 0000H 1 TYP. . . . . . . . BYTE PARAMETER 96
169 0000H 1 TYPE . . . . . . . BYTE MEMBER(TOKEN) 210 458 470
3 TYPEBIT. . . . . . LITERALLY
10 0000H TYPECALC . . . . . PROCEDURE BYTE EXTERNAL(0) STACK=0000H
3 TYPECOUNT. . . . . LITERALLY
4 UDEFSYMB . . . . . LITERALLY
9 UDEFSYMBOL . . . . LITERALLY
40 0000H UPPER. . . . . . . PROCEDURE BYTE EXTERNAL(10) STACK=0000H
80 0000H 1 USEFACT. . . . . . BYTE PARAMETER 81
10 0000H 2 VAL. . . . . . . . WORD PARAMETER 11
169 0002H 2 VALUE. . . . . . . WORD MEMBER(TOKEN) 214 469
4 VARIABLE . . . . . LITERALLY 383
5 WRD. . . . . . . . LITERALLY 306 349 406 426 427
13 0000H WRDTEST. . . . . . PROCEDURE BYTE EXTERNAL(1) STACK=0000H
MODULE INFORMATION:
CODE AREA SIZE = 04F3H 1267D
CONSTANT AREA SIZE = 0027H 39D
VARIABLE AREA SIZE = 0057H 87D
MAXIMUM STACK SIZE = 0024H 36D
1005 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,354 @@
$title ('DECODE LINE MODULE')
decodel:
do;
/*
modified 3/26/81 R. Silberstein
modified 3/30/81 R. Silberstein
modified 4/9/81 R. Silberstein
modified 4/10/81 R. Silberstein
modified 7/24/81 R. Silberstein
*/
/*
This is the module to decode each logical sourceline.
The module takes care of all symbol definitions, and
activates the PSEUDO-module and the INSTRUCTION-module
to perform the assembly of the current non-empty source-
line.
*/
$include (:f1:macro.lit)
$include (:f1:struc.lit)
$include (:f1:equals.lit)
$include (:f1:ermod.lit)
$include (:f1:subr1.ext)
$include (:f1:subr2.ext)
$include (:f1:scan.ext)
$include (:f1:print.ext)
$include (:f1:instr.ext)
$include (:f1:pseud1.ext)
$include (:f1:pseud2.ext)
$include (:f1:ermod.ext)
$include (:f1:symb.ext)
$include (:f1:exglob.ext)
$include (:f1:dline.x86)
$include (:f1:cm.ext)
saveaccum: proc;
acclensave=acclen;
call copy(acclen,.accum(0),.accumsave(0));
end saveaccum;
exchangeaccum: proc;
dcl locacclen byte,locaccum(80) byte;
locacclen=acclensave;
call copy(acclensave,.accumsave(0),.locaccum(0));
call saveaccum;
acclen=locacclen;
call copy(locacclen,.locaccum(0),.accum(0));
end exchangeaccum;
clearsymbol: proc;
CALL FILL (0, .CURRENTSYMBOL.BASEINDEX-.CURRENTSYMBOL+1, .CURRENTSYMBOL);
end clearsymbol;
pseudotype: proc(lg,ptr) byte;
dcl (lg,i,lvalue) byte,ptr address,pstable based ptr (1) byte;
if token.type <> pseudo then return lg+1;
i=0ffh;
do while (i:=i+1) < lg;
lvalue=token.value;
if lvalue=pstable(i) then$do
call scan; /* skip found pseudo */
return i;
end$if;
end$while;
return i;
end pseudotype;
/* test if symbol if double defined or "neglected" symbol */
not$doub$negl: proc(errno) byte;
dcl (errno,errfl) byte;
if pass = 0 then$do
if findsymbol(acclensave,.accumsave,.symbtabadr) then$do
call getattributes(symbtabadr,.currentsymbol);
if currentsymbol.stype <> neglected then$do
currentsymbol.stype=doubledefined;
call enterattributes(symbtabadr,.currentsymbol);
end$if;
return false;
end$if;
else$do
/* pass 1 and pass 2 */
if not findsymbol(acclensave,.accumsave,.symbtabadr) then
return false;
call getattributes(symbtabadr,.currentsymbol);
errfl=true;
if currentsymbol.stype=neglected then$do
errno=neglecterr;
else$do
if currentsymbol.stype<>doubledefined then errfl=false;
end$if;
if errfl then$do
call exchangeaccum;
call errmsg(errno);
call exchangeaccum;
return false;
end$if;
end$if;
return true;
end not$doub$negl;
newsym: proc byte; /* enter new symbol into table */
if pass=0 then$do
if not newsymbol(acclensave,.accumsave,.symbtabadr) then$do
fullsymbtab=true;
return false;
end$if;
end$if;
return true;
end newsym;
/* set up symbol attributes for label,DB,DW,DD,RS */
setupattr: proc (styp,sfla);
dcl (styp,sfla,segtyp) byte;
segtyp=shl(csegtype,segtypecount) and segtypebit;
currentsymbol.stype=styp;
if csegspec then sfla=sfla or segmbit;
currentsymbol.sflag=sfla or segtyp;
currentsymbol.segment=csegvalue;
currentsymbol.offset=cip;
end setupattr;
entatr: proc; /* enter attributes of current symbol into table */
if pass <> 2 then$do
call enter$attributes(symbtabadr,.currentsymbol);
end$if;
end entatr;
/* decode instruction */
decodeinstr: proc;
if csegtype <> rcs then$do
call errmsg(instrerr);
call skip$rest$of$line;
else$do
CALL LISTCIP;
call instruction; /* decode instruction */
end$if;
end decodeinstr;
labinstruction: proc; /* scan labelled instruction */
dcl symb based codemacroptr symbolstruc;
call saveaccum;
/* enter label into symbol table */
if not$doub$negl(doubledeflab) then$do
if newsym then$do
call setupattr(lab,wrd);
call entatr;
end$if;
end$if;
call scan; /* skip ":" */
call scan; /* allow empty instruction */
if emptyline then$do
call skip$rest$of$line;
else$do
if findcodemacro(acclen,.accum(0),.codemacroptr) then$do
call scan; /* skip codemacro */
call decode$instr;
else$do
call errmsg(illegalmacro);
end$if;
end$if;
end labinstruction;
no$ident$pseudo: proc; /* branch to correct pseudo routine */
dcl ptable(*) byte data( /* define legal unnamed pseudos */
pif,pendif,pinclude,pcseg,pdseg,psseg,peseg,porg,pdb,
pdw,pdd,prb,prs,prw,pend,ppagesize,ppagewidth,
ptitle,peject,psimform,pcodemacro,plist,pnolist,PIFLIST,PNOIFLIST,
psegfix,pnosegfix,pmodrm,prelb,prelw,pdbit,pendm);
do case pseudotype(length(ptable),.ptable); /* branch */
call IFrout;
call ENDIFrout;
call INCLUDErout;
call CSEGrout;
call DSEGrout;
call SSEGrout;
call ESEGrout;
call ORGrout;
if codemacro$flag then call db$cm$rout;
else call DBrout;
if codemacro$flag then call dw$cm$rout;
else call DWrout;
if codemacro$flag then call dd$cm$rout;
else call DDrout;
call RSrout(byt); /* RB */
call RSrout(byt); /* RS */
call RSrout(wrd); /* RW */
call ENDrout;
call PAGESIZErout;
call PAGEWIDTHrout;
call TITLErout;
call EJECTrout;
call SIMFORMrout;
call CODEMACROrout;
call LISTrout;
call NOLISTrout;
CALL IFLISTROUT;
CALL NOIFLISTROUT;
call segfix$cm$rout; /* cm */
call nosegfix$cm$rout; /* cm */
call modrm$cm$rout; /* cm */
call relb$cm$rout; /* cm */
call relw$cm$rout; /* cm */
call dbit$cm$rout; /* cm */
call end$cm$rout; /* cm */
do; /* error, illegal pseudo */
call errmsg(illegalpseudo);
call skip$rest$of$line;
end;
end$case;
end no$ident$pseudo;
identpseudo: proc(normal); /* scan a named pseudo instruction */
dcl (noerr,normal) byte,symb based codemacroptr symbolstruc;
entervar: proc(typ);
dcl typ byte;
noerr=false;
if not$doub$negl(doubledefvar) then$do
if newsym then$do
call setupattr(variable,typ);
noerr=true;
end$if;
end$if;
end entervar;
enter: proc;
if noerr then call entatr;
end enter;
/* legal pseudos: DB,DW,DD,RB,RS,RW,EQU */
dcl pseudotable(7) byte data(pdb,pdw,pdd,prb,prs,prw,pequ);
call clearsymbol; /* clear attributes of current symbol */
if normal then$do /* unormal if EQU with instruction parameter */
call saveaccum;
call scan; /* scan actual pseudo */
end$if;
do case pseudotype(length(pseudotable),.pseudotable);
do; /* DB */
call entervar(byt);
call DBrout;
call enter;
end;
do; /* DW */
call entervar(wrd);
call DWrout;
call enter;
end;
do; /* DD */
call entervar(dwrd);
call DDrout;
call enter;
end;
do; /* RB */
call entervar(byt);
call RSrout(byt);
call enter;
end;
do; /* RS */
call entervar(byt);
call RSrout(byt);
call enter;
end;
do; /* RW */
call entervar(wrd);
call RSrout(wrd);
call enter;
end;
do; /* EQU */
if not$doub$negl(doubledefsymb) then$do
if newsym then$do
call EQUrout;
else$do
call skip$rest$of$line;
end$if;
else$do
call skip$rest$of$line;
end$if;
end;
do; /* illegal pseudo instruction */
call errmsg(illegalpseudo);
call skip$rest$of$line;
end;
do; /* missing pseudo instruction */
call errmsg(missingpseudo);
call skip$rest$of$line;
end;
end$case;
end identpseudo;
decodeline: proc public;
first$item$type: proc byte;
dcl typ byte;
typ=token.type;
if typ=pseudo then return 3;
if typ=ident and nextch=':' then return 2;
if (typ=ident) or (typ=operator) then$do
if findcodemacro(acclen,.accum(0),.codemacroptr) then$do
call saveaccum;
call scan; /* skip found codemacro */
typ=token.value;
if (token.type=pseudo) and (typ=pequ) then return 5;
return 4;
end$if;
end$if;
if typ <> ident then return 0; /* error */
return 1;
end first$item$type;
if accum(0) <> cr then$do /* skip blank lines */
do case first$item$type;
do; /* error,skip rest of line */
call errmsg(first$item); /* error handler */
call skip$rest$of$line;
end;
call ident$pseudo(true); /* named pseudo instruction */
call lab$instruction; /* label (followed by instruction) */
call no$ident$pseudo; /* pseudo instruction */
call decodeinstr; /* code instruction */
call identpseudo(false); /* EQU with instruction parameter */
end$case;
end$if;
end decodeline;
end$module decodel;

View File

@@ -0,0 +1,23 @@
$nolist
dcl
pass byte external, /* current pass no, 1,2,3 */
prefix (240) byte external, /* prefix to source line */
prefixptr byte external, /* pointer to prefix buffer */
accumsave(80) byte external,
acclensave byte external,
/* Mischellaneous variables: */
fullsymbtab byte external, /* full if symboltable is full */
currentsymbol symbolstruc /* current scanned symbol */
external,
symbtabadr address external, /* pointer at symbol in table */
codemacroptr address external, /* pointer to found codemacro */
codemacro$flag byte external; /* true if building a codemacro */
$list

View File

@@ -0,0 +1,131 @@
$nolist
/*
modified 7/24/81 R. Silberstein
*/
/* Symbol types : */
dcl
reg lit '0', /* register */
pseudo lit '1', /* pseudo instruction */
code lit '2', /* instruction */
string lit '3', /* character string */
spec lit '4', /* special character */
number lit '5', /* 8 or 16 bit number */
variable lit '6',
lab lit '7', /* label */
operator lit '8', /* operator in expressions */
doubledefined lit '0f9h', /* doubled defined symbol */
neglected lit '0fah', /* neglected symb., never to be def. */
ident lit '0fbh', /* identificator, scanner output */
error lit '0fch', /* error, scanner output */
udefsymb lit '0fdh', /* undefined symbol */
symbol lit '0feh', /* variable,label or undefined symb. */
deletedsymb lit '0ffh'; /* deleted symbol (not used */
/* Symbol description values */
dcl
nil lit '0', /* no specification */
byt lit '1', /* symbol is 8-bit type */
wrd lit '2', /* symbol is 16 bit type */
dwrd lit '4'; /* symbol is 2*16 bit type
or a segment register */
/* Register values : */
dcl
rax lit '0', /* 16 bit registers */
rcx lit '1',
rdx lit '2',
rbx lit '3',
rsp lit '4',
rbp lit '5',
rsi lit '6',
rdi lit '7',
ral lit '0', /* 8 bit registers */
rcl lit '1',
rdl lit '2',
rbl lit '3',
rah lit '4',
rch lit '5',
rdh lit '6',
rbh lit '7',
res lit '0', /* segment registers */
rcs lit '1',
rss lit '2',
rds lit '3';
/* Pseudo instructions: */
dcl
pdb lit '0',
pdd lit '1',
pdw lit '2',
pif lit '3',
prs lit '4',
pend lit '5',
pequ lit '6',
porg lit '7',
pcseg lit '8',
pdbit lit '9',
pdseg lit '10',
pendm lit '11',
peseg lit '12',
prelb lit '13',
prelw lit '14',
psseg lit '15',
pendif lit '16',
pmodrm lit '17',
ptitle lit '18',
psegfix lit '19',
pinclude lit '20',
peject lit '21',
psimform lit '22',
pnosegfix lit '23',
ppagesize lit '24',
pcodemacro lit '25',
ppagewidth lit '26',
plist lit '27',
pnolist lit '28',
prb lit '29', /* added in vers. 2.0 */
prw lit '30',
PIFLIST LIT '31',
PNOIFLIST LIT '32';
/* Symbolic operators */
dcl
oshort lit '0', /* 8-bit value of expression */
oor lit '1', /* logical OR */
oxor lit '2', /* logical XOR */
oand lit '3', /* logical AND */
onot lit '4', /* logical NOT */
oeq lit '5', /* equal */
ogt lit '6', /* greater */
oge lit '7', /* greater or equal */
olt lit '8', /* less */
ole lit '9', /* less or equal */
one lit '10', /* not equal */
omod lit '11', /* arithmetic MOD */
oshl lit '12', /* shift left */
oshr lit '13', /* shift rigth */
optr lit '14', /* take type of 1. op, value of 2. */
ooffset lit '15', /* offset value of operand */
oseg lit '16', /* segment value of operand */
otype lit '17', /* type value of operand */
olength lit '18', /* length attribute of variables */
olast lit '19', /* length - 1 */
leftbracket lit '''[''',
rightbracket lit ''']''';
$list

View File

@@ -0,0 +1,7 @@
$nolist
errmsg: proc(errno) external;
dcl errno byte;
end errmsg;
$list

View File

@@ -0,0 +1,43 @@
$nolist
/*
modified 4/24/81 R. Silberstein
*/
/*
This is all assembler error numbers.
For each error number there is a
corresponding error TEXT. The texts are
defined in the module ERMOD.PLM.
*/
dcl
firstitem lit '0', /* error in first item */
missingpseudo lit '1',
illegalpseudo lit '2',
doubledefvar lit '3', /* doubled defined errors: */
doubledeflab lit '4',
illegalmacro lit '5', /* illegal instruction name */
end$of$line$err lit '6', /* garabage at end of line */
opmismatch lit '7', /* operands mismatch instruction */
illioper lit '8', /* illegal instruction operand */
missinstr lit '9', /* missing instruction */
udefsymbol lit '10', /* undefined element of expression */
pseudooperr lit '11', /* illegal pseudo operand */
nestediferr lit '12', /* nested IF illegal - ignored */
ifparerr lit '13', /* illegal IF operand - IF ignored */
missiferr lit '14', /* no matching "IF" for "ENDIF" */
neglecterr lit '15', /* neglected symbol */
doubledefsymb lit '16', /* doubled defined symbol */
instrerr lit '17', /* instruction not in code segm. */
filesynterr lit '18', /* file name syntax error */
nestedincludeerr lit '19', /* nested INCLUDE not legal */
illexprelem lit '20', /* illegal expression element */
misstypeinfo lit '21', /* missing type info in operands */
laboutofrange lit '22', /* label out of range */
misssegminfo lit '23', /* missing segment info in operand */
codemacroerr lit '24'; /* error in codemacrobuilding */
$list

View File

@@ -0,0 +1,451 @@
PL/M-86 COMPILER ERROR MESSAGE MODULE 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE ERRORM
OBJECT MODULE PLACED IN ERMOD.OBJ
COMPILER INVOKED BY: :F0: ERMOD.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100) XREF
$title ('ERROR MESSAGE MODULE')
1 errorm:
do;
/*
modified 3/28/81 R. Silberstein
modified 3/30/81 R. Silberstein
modified 4/7/81 R. Silberstein
modified 4/24/81 R. Silberstein
*/
/*
This is the module to perform error message
printout to the print file. The interface from
other modules goes through the subroutine
ERRMSG ( errornumber )
This routine also increments the global variable
"ERRORS" which contains the accumulated number
of errors throughout the assembly.
*/
$include (:f1:macro.lit)
= $nolist
$include (:f1:struc.lit)
= $nolist
$include (:f1:ermod.lit)
= $nolist
$include (:f1:subr1.ext)
= $nolist
$include (:f1:subr2.ext)
= $nolist
$include (:f1:print.ext)
= $nolist
$include (:f1:global.ext)
= $nolist
/* Error messages : */
69 1 dcl
nulltext(1) byte data (0), /* dummy text */
tex00(*) byte data ('ILLEGAL FIRST ITEM',0),
tex01(*) byte data ('MISSING PSEUDO INSTRUCTION',0),
tex02(*) byte data ('ILLEGAL PSEUDO INSTRUCTION',0),
tex03(*) byte data ('DOUBLE DEFINED VARIABLE',0),
tex04(*) byte data ('DOUBLE DEFINED LABEL',0),
tex05(*) byte data ('UNDEFINED INSTRUCTION',0),
PL/M-86 COMPILER ERROR MESSAGE MODULE 10/5/81 PAGE 2
tex06(*) byte data ('GARBAGE AT END OF LINE - IGNORED',0),
tex07(*) byte data ('OPERAND(S) MISMATCH INSTRUCTION',0),
tex08(*) byte data ('ILLEGAL INSTRUCTION OPERANDS',0),
tex09(*) byte data ('MISSING INSTRUCTION',0),
tex10(*) byte data ('UNDEFINED ELEMENT OF EXPRESSION',0),
tex11(*) byte data ('ILLEGAL PSEUDO OPERAND',0),
tex12(*) byte data ('NESTED "IF" ILLEGAL - "IF" IGNORED',0),
tex13(*) byte data ('ILLEGAL "IF" OPERAND - "IF" IGNORED',0),
tex14(*) byte data ('NO MATCHING "IF" FOR "ENDIF"',0),
tex15(*) byte data ('SYMBOL ILLEGALLY FORWARD REFERENCED - ',
'NEGLECTED',0),
tex16(*) byte data ('DOUBLE DEFINED SYMBOL - ',
'TREATED AS UNDEFINED',0),
tex17(*) byte data ('INSTRUCTION NOT IN CODE SEGMENT',0),
tex18(*) byte data ('FILE NAME SYNTAX ERROR',0),
tex19(*) byte data ('NESTED INCLUDE NOT ALLOWED',0),
tex20(*) byte data ('ILLEGAL EXPRESSION ELEMENT',0),
tex21(*) byte data ('MISSING TYPE INFORMATION IN OPERAND(S)',0),
tex22(*) byte data ('LABEL OUT OF RANGE',0),
tex23(*) byte data ('MISSING SEGMENT INFORMATION IN OPERAND',0),
tex24(*) byte data ('ERROR IN CODEMACROBUILDING',0),
/* Error-message pointer table: */
texttab(*) address data (.tex00,.tex01,.tex02,.tex03,.tex04,
.tex05,.tex06,.tex07,.tex08,
.tex09,.tex10,.tex11,.tex12,.tex13,
.tex14,.tex15,.tex16,.tex17,.tex18,
.tex19,.tex20,.tex21,.tex22,.tex23,
.tex24,.nulltext);
/* Additional text strings: */
70 1 dcl
errnotext(*) byte data ('** ERROR NO:',0),
neartext(*) byte data (' ** NEAR: "',0),
spacetext(*) byte data (' ',0);
/* Table of defined error numbers: */
71 1 dcl
errtab (*) byte data (firstitem,missingpseudo,
illegalpseudo,doubledefvar,doubledeflab,
illegalmacro,end$of$line$err,opmismatch,
illioper,missinstr,udefsymbol,
pseudooperr,nestediferr,ifparerr,
missiferr,neglecterr,doubledefsymb,
instrerr,filesynterr,
nestedincludeerr,illexprelem,misstypeinfo,
laboutofrange,misssegminfo,codemacroerr);
/* Subroutines: */
72 1 printtext: proc(txt);
73 2 dcl txt address,ch based txt (1) byte,i byte;
74 2 i=0ffh;
75 2 do while ch(i:=i+1) <> 0;
PL/M-86 COMPILER ERROR MESSAGE MODULE 10/5/81 PAGE 3
76 3 call printsinglebyte(ch(i));
77 3 end$while;
78 2 end printtext;
79 1 locerrmsg: proc(erno);
80 2 dcl t address,help(5) byte,(helpstop,erno,i) byte;
81 2 errortype: proc byte;
82 3 i=0ffh;
83 3 do while (i:=i+1) < length(errtab);
84 4 if erno = errtab(i) then return i;
end$while;
87 3 return length(errtab);
88 3 end errortype;
89 2 helpstop,accum(acclen)=0;
90 2 call decout(erno,.help(0));
91 2 t=texttab(errortype); /* pick up correct error text */
92 2 call printtext(.errnotext); /* print error message line */
93 2 call printtext(.help(2));
94 2 if accum(0) <> cr then$do
96 3 call printtext(.neartext);
97 3 call printtext(.accum(0)); /* (print current token) */
98 3 CALL PRINTSINGLEBYTE ('"');
99 3 end$if;
100 2 call printtext(.spacetext);
101 2 call printtext(t);
102 2 call printcrlf;
103 2 end locerrmsg;
/* Public routine: */
104 1 errmsg: proc(erno) public;
105 2 dcl erno byte;
106 2 if print$on OR PRINTSWITCHOFF then$do
108 3 if not errorprinted then$do
110 4 errorprinted=true;
111 4 call locerrmsg(erno);
112 4 errors=errors+1;
113 4 end$if;
end$if;
115 2 end errmsg;
116 1 end$module errorm;
PL/M-86 COMPILER ERROR MESSAGE MODULE 10/5/81 PAGE 4
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
66 0000H 4 ABSADDR. . . . . . BYTE ARRAY(4) EXTERNAL(54)
66 0000H 1 ACCLEN . . . . . . BYTE EXTERNAL(58) 89
66 0000H 1 ACCLENSAVE . . . . BYTE EXTERNAL(61)
66 0000H 80 ACCUM. . . . . . . BYTE ARRAY(80) EXTERNAL(59) 89 94 97
66 0000H 80 ACCUMSAVE. . . . . BYTE ARRAY(80) EXTERNAL(60)
2 ADDR . . . . . . . LITERALLY 6 9 12 15 21 39 42
45 48 66
29 0000H ALPHANUMERIC . . . PROCEDURE BYTE EXTERNAL(8) STACK=0000H
32 0000H ASCIICHAR. . . . . PROCEDURE BYTE EXTERNAL(9) STACK=0000H
66 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPERANDS)
66 0008H 1 BASEINDEX. . . . . BYTE MEMBER(CURRENTSYMBOL)
3 BASEREGBIT . . . . LITERALLY
3 BASEREGCOUNT . . . LITERALLY
3 BREGBIT. . . . . . LITERALLY
3 BREGCOUNT. . . . . LITERALLY
23 0000H 1 CH . . . . . . . . BYTE PARAMETER 24
32 0000H 1 CH . . . . . . . . BYTE PARAMETER 33
26 0000H 1 CH . . . . . . . . BYTE PARAMETER 27
35 0000H 1 CH . . . . . . . . BYTE PARAMETER 36
20 0000H 1 CH . . . . . . . . BYTE PARAMETER 21
73 0000H 1 CH . . . . . . . . BYTE BASED(TXT) ARRAY(1) 75 76
50 0000H 1 CH . . . . . . . . BYTE PARAMETER 51
29 0000H 1 CH . . . . . . . . BYTE PARAMETER 30
66 0000H 2 CIP. . . . . . . . WORD EXTERNAL(23)
4 CODEMACROERR . . . LITERALLY 71
66 0000H 1 CODEMACROFLAG. . . BYTE EXTERNAL(80)
3 CODEMACROHEAD. . . LITERALLY
66 0000H 2 CODEMACROPTR . . . WORD EXTERNAL(75)
11 0000H COPY . . . . . . . PROCEDURE EXTERNAL(2) STACK=0000H
2 CR . . . . . . . . LITERALLY 94
66 0000H 2 CSCIP. . . . . . . WORD EXTERNAL(28)
66 0000H 1 CSEGSPEC . . . . . BYTE EXTERNAL(26)
66 0000H 1 CSEGTYPE . . . . . BYTE EXTERNAL(24)
66 0000H 2 CSEGVALUE. . . . . WORD EXTERNAL(25)
66 0000H 1 CSPEC. . . . . . . BYTE EXTERNAL(35)
66 0000H 2 CURCSEG. . . . . . WORD EXTERNAL(31)
66 0000H 2 CURDSEG. . . . . . WORD EXTERNAL(32)
66 0000H 2 CURESEG. . . . . . WORD EXTERNAL(34)
66 0000H 9 CURRENTSYMBOL. . . STRUCTURE EXTERNAL(71)
66 0000H 2 CURSSEG. . . . . . WORD EXTERNAL(33)
47 0000H 2 D. . . . . . . . . WORD PARAMETER 48
38 0000H 2 D. . . . . . . . . WORD PARAMETER 39
41 0000H 2 D. . . . . . . . . WORD PARAMETER 42
11 0000H 2 D. . . . . . . . . WORD PARAMETER 12
44 0000H 2 D. . . . . . . . . WORD PARAMETER 45
2 DCL. . . . . . . . LITERALLY
47 0000H DECOUT . . . . . . PROCEDURE EXTERNAL(14) STACK=0000H 90
66 0000H 1 DEFAULTDRIVE . . . BYTE EXTERNAL(78)
66 0001H 1 DESCR. . . . . . . BYTE MEMBER(TOKEN)
PL/M-86 COMPILER ERROR MESSAGE MODULE 10/5/81 PAGE 5
23 0000H DIGIT. . . . . . . PROCEDURE BYTE EXTERNAL(6) STACK=0000H
4 DOUBLEDEFLAB . . . LITERALLY 71
4 DOUBLEDEFSYMB. . . LITERALLY 71
4 DOUBLEDEFVAR . . . LITERALLY 71
66 0000H 2 DSCIP. . . . . . . WORD EXTERNAL(30)
66 0000H 1 DSPEC. . . . . . . BYTE EXTERNAL(36)
64 0000H EJECT. . . . . . . PROCEDURE EXTERNAL(21) STACK=0000H
2 ELSEDO . . . . . . LITERALLY
2 ENDCASE. . . . . . LITERALLY
2 ENDDO. . . . . . . LITERALLY
2 ENDFOREVER . . . . LITERALLY
2 ENDIF. . . . . . . LITERALLY 113
2 ENDMODULE. . . . . LITERALLY
2 ENDOFFILE. . . . . LITERALLY
4 ENDOFLINEERR . . . LITERALLY 71
2 ENDPROC. . . . . . LITERALLY
2 ENDWHILE . . . . . LITERALLY 85
66 0000H 1 EOFSET . . . . . . BYTE EXTERNAL(62)
38 0000H EQUAL. . . . . . . PROCEDURE BYTE EXTERNAL(11) STACK=0000H
79 0000H 1 ERNO . . . . . . . BYTE PARAMETER 80 84 90
104 0004H 1 ERNO . . . . . . . BYTE PARAMETER AUTOMATIC 105 111
104 00C1H 42 ERRMSG . . . . . . PROCEDURE PUBLIC STACK=0012H
70 0314H 13 ERRNOTEXT. . . . . BYTE ARRAY(13) DATA 92
1 0000H ERRORM . . . . . . PROCEDURE STACK=0000H
66 0000H 1 ERRORPRINTED . . . BYTE EXTERNAL(65) 108 110
66 0000H 2 ERRORS . . . . . . WORD EXTERNAL(55) 112
81 0099H 40 ERRORTYPE. . . . . PROCEDURE BYTE STACK=0002H 91
71 0332H 25 ERRTAB . . . . . . BYTE ARRAY(25) DATA 83 84 87
66 0000H 2 ESCIP. . . . . . . WORD EXTERNAL(27)
66 0000H 1 ESPEC. . . . . . . BYTE EXTERNAL(38)
2 FALSE. . . . . . . LITERALLY
17 0000H 2 FCBADR . . . . . . WORD PARAMETER 18
17 0000H FILEABORT. . . . . PROCEDURE EXTERNAL(4) STACK=0000H
3 FILEISTRUCTURE . . LITERALLY
3 FILEOSTRUCTURE . . LITERALLY
4 FILESYNTERR. . . . LITERALLY 71
20 0000H FILL . . . . . . . PROCEDURE EXTERNAL(5) STACK=0000H
4 FIRSTITEM. . . . . LITERALLY 71
66 0000H 2 FIRSTMACROPTR. . . WORD EXTERNAL(66)
2 FOREVER. . . . . . LITERALLY
2 FORMFEED . . . . . LITERALLY
66 0000H 1 FULLSYMBTAB. . . . BYTE EXTERNAL(68)
67 0000H GLOBALINIT . . . . PROCEDURE EXTERNAL(81) STACK=0000H
66 0000H 5 HELP . . . . . . . BYTE ARRAY(5) EXTERNAL(76)
80 0005H 5 HELP . . . . . . . BYTE ARRAY(5) 90 93
80 000AH 1 HELPSTOP . . . . . BYTE 89
41 0000H HEX1OUT. . . . . . PROCEDURE EXTERNAL(12) STACK=0000H
44 0000H HEX2OUT. . . . . . PROCEDURE EXTERNAL(13) STACK=0000H
66 0000H 1 I. . . . . . . . . BYTE EXTERNAL(77)
80 000BH 1 I. . . . . . . . . BYTE 82 83 84 85
73 0004H 1 I. . . . . . . . . BYTE 74 75 76
66 0000H 1 IFLEVEL. . . . . . BYTE EXTERNAL(70)
66 0000H 1 IFLIST . . . . . . BYTE EXTERNAL(41)
4 IFPARERR . . . . . LITERALLY 71
4 ILLEGALMACRO . . . LITERALLY 71
4 ILLEGALPSEUDO. . . LITERALLY 71
4 ILLEXPRELEM. . . . LITERALLY 71
PL/M-86 COMPILER ERROR MESSAGE MODULE 10/5/81 PAGE 6
4 ILLIOPER . . . . . LITERALLY 71
66 0000H 1 INCLUDEDEFAULT . . BYTE EXTERNAL(79)
66 0000H 1 INCLUDEON. . . . . BYTE EXTERNAL(69)
3 INDEXREGBIT. . . . LITERALLY
3 INDEXREGCOUNT. . . LITERALLY
2 INIT . . . . . . . LITERALLY
4 INSTRERR . . . . . LITERALLY 71
66 0000H 1 INTELHEXON . . . . BYTE EXTERNAL(63)
3 IREGBIT. . . . . . LITERALLY
3 IREGCOUNT. . . . . LITERALLY
4 LABOUTOFRANGE. . . LITERALLY 71
66 0000H 2 LENGTH . . . . . . WORD MEMBER(OPERANDS)
66 0000H 2 LENGTH . . . . . . WORD MEMBER(CURRENTSYMBOL)
LENGTH . . . . . . BUILTIN 83 87
26 0000H LETTER . . . . . . PROCEDURE BYTE EXTERNAL(7) STACK=0000H
2 LF . . . . . . . . LITERALLY
2 LIT. . . . . . . . LITERALLY 2 3 4
79 0027H 114 LOCERRMSG. . . . . PROCEDURE STACK=000CH 111
66 0000H 2 MACROPTR . . . . . WORD EXTERNAL(67)
66 0000H 1 MAXCOL . . . . . . BYTE EXTERNAL(42)
4 MISSIFERR. . . . . LITERALLY 71
4 MISSINGPSEUDO. . . LITERALLY 71
4 MISSINSTR. . . . . LITERALLY 71
4 MISSSEGMINFO . . . LITERALLY 71
4 MISSTYPEINFO . . . LITERALLY 71
47 0000H 2 N. . . . . . . . . WORD PARAMETER 48
44 0000H 2 N. . . . . . . . . WORD PARAMETER 45
41 0000H 1 N. . . . . . . . . BYTE PARAMETER 42
38 0000H 1 N. . . . . . . . . BYTE PARAMETER 39
20 0000H 1 N. . . . . . . . . BYTE PARAMETER 21
11 0000H 1 N. . . . . . . . . BYTE PARAMETER 12
8 0000H 2 N. . . . . . . . . WORD PARAMETER 9
70 0321H 13 NEARTEXT . . . . . BYTE ARRAY(13) DATA 96
4 NEGLECTERR . . . . LITERALLY 71
4 NESTEDIFERR. . . . LITERALLY 71
4 NESTEDINCLUDEERR . LITERALLY 71
66 0000H 1 NEXTCH . . . . . . BYTE EXTERNAL(57)
66 0000H 1 NOERROR. . . . . . BYTE EXTERNAL(64)
66 0000H 1 NOOPER . . . . . . BYTE EXTERNAL(73)
3 NOOVERCOUNT. . . . LITERALLY
3 NOOVERRIDEBIT. . . LITERALLY
69 0034H 1 NULLTEXT . . . . . BYTE ARRAY(1) DATA 69
66 0006H 2 OFFSET . . . . . . WORD MEMBER(OPERANDS)
66 0006H 2 OFFSET . . . . . . WORD MEMBER(CURRENTSYMBOL)
66 0000H 36 OPERANDS . . . . . STRUCTURE ARRAY(4) EXTERNAL(74)
3 OPERANDSTRUC . . . LITERALLY 66
4 OPMISMATCH . . . . LITERALLY 71
14 0000H OUTTEXT. . . . . . PROCEDURE EXTERNAL(3) STACK=0000H
66 0000H 1 PAGESIZE . . . . . BYTE EXTERNAL(48)
66 0000H 1 PASS . . . . . . . BYTE EXTERNAL(22)
66 0000H 240 PREFIX . . . . . . BYTE ARRAY(240) EXTERNAL(52)
66 0000H 1 PREFIXPTR. . . . . BYTE EXTERNAL(53)
53 0000H PRINTCRLF. . . . . PROCEDURE EXTERNAL(16) STACK=0000H 102
66 0000H 1 PRINTDEVICE. . . . BYTE EXTERNAL(45)
59 0000H PRINTINIT. . . . . PROCEDURE EXTERNAL(19) STACK=0000H
55 0000H PRINTNEWPAGE . . . PROCEDURE EXTERNAL(17) STACK=0000H
66 0000H 1 PRINTON. . . . . . BYTE EXTERNAL(39) 106
PL/M-86 COMPILER ERROR MESSAGE MODULE 10/5/81 PAGE 7
50 0000H PRINTSINGLEBYTE. . PROCEDURE EXTERNAL(15) STACK=0000H 76 98
57 0000H PRINTSOURCELINE. . PROCEDURE EXTERNAL(18) STACK=0000H
66 0000H 1 PRINTSWITCHOFF . . BYTE EXTERNAL(40) 106
61 0000H PRINTTERMINATE . . PROCEDURE EXTERNAL(20) STACK=0000H
72 0000H 39 PRINTTEXT. . . . . PROCEDURE STACK=0008H 92 93 96 97
100 101
2 PROC . . . . . . . LITERALLY 5 8 29 32 41 44 47
50 53 55 57 59 61 64 72 79 81
104
4 PSEUDOOPERR. . . . LITERALLY 71
20 0000H 2 PT . . . . . . . . WORD PARAMETER 21
2 REENT. . . . . . . LITERALLY
38 0000H 2 S. . . . . . . . . WORD PARAMETER 39
11 0000H 2 S. . . . . . . . . WORD PARAMETER 12
66 0000H 12 SAVESOURCE . . . . BYTE ARRAY(12) EXTERNAL(44)
3 SEGMBIT. . . . . . LITERALLY
3 SEGMCOUNT. . . . . LITERALLY
66 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPERANDS)
66 0004H 2 SEGMENT. . . . . . WORD MEMBER(CURRENTSYMBOL)
3 SEGTYPEBIT . . . . LITERALLY
3 SEGTYPECOUNT . . . LITERALLY
66 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPERANDS)
66 0003H 1 SFLAG. . . . . . . BYTE MEMBER(CURRENTSYMBOL)
66 0000H 1 SIMFORM. . . . . . BYTE EXTERNAL(49)
66 0000H 80 SOURCEBUF. . . . . BYTE ARRAY(80) EXTERNAL(50)
66 0000H 12 SOURCENAME . . . . BYTE ARRAY(12) EXTERNAL(43)
66 0000H 1 SOURCEPTR. . . . . BYTE EXTERNAL(51)
2 SPACE. . . . . . . LITERALLY
70 032EH 4 SPACETEXT. . . . . BYTE ARRAY(4) DATA 100
66 0000H 2 SSCIP. . . . . . . WORD EXTERNAL(29)
66 0000H 1 SSPEC. . . . . . . BYTE EXTERNAL(37)
2 STRUC. . . . . . . LITERALLY 66
66 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPERANDS)
66 0002H 1 STYPE. . . . . . . BYTE MEMBER(CURRENTSYMBOL)
66 0000H 1 SYMBOLDEVICE . . . BYTE EXTERNAL(46)
3 SYMBOLHEAD . . . . LITERALLY
3 SYMBOLSTRUC. . . . LITERALLY 66
66 0000H 2 SYMBTABADR . . . . WORD EXTERNAL(72)
80 0002H 2 T. . . . . . . . . WORD 91 101
14 0000H 2 T. . . . . . . . . WORD PARAMETER 15
2 TAB. . . . . . . . LITERALLY
69 0035H 19 TEX00. . . . . . . BYTE ARRAY(19) DATA 69
69 0048H 27 TEX01. . . . . . . BYTE ARRAY(27) DATA 69
69 0063H 27 TEX02. . . . . . . BYTE ARRAY(27) DATA 69
69 007EH 24 TEX03. . . . . . . BYTE ARRAY(24) DATA 69
69 0096H 21 TEX04. . . . . . . BYTE ARRAY(21) DATA 69
69 00ABH 22 TEX05. . . . . . . BYTE ARRAY(22) DATA 69
69 00C1H 33 TEX06. . . . . . . BYTE ARRAY(33) DATA 69
69 00E2H 32 TEX07. . . . . . . BYTE ARRAY(32) DATA 69
69 0102H 29 TEX08. . . . . . . BYTE ARRAY(29) DATA 69
69 011FH 20 TEX09. . . . . . . BYTE ARRAY(20) DATA 69
69 0133H 32 TEX10. . . . . . . BYTE ARRAY(32) DATA 69
69 0153H 23 TEX11. . . . . . . BYTE ARRAY(23) DATA 69
69 016AH 35 TEX12. . . . . . . BYTE ARRAY(35) DATA 69
69 018DH 36 TEX13. . . . . . . BYTE ARRAY(36) DATA 69
69 01B1H 29 TEX14. . . . . . . BYTE ARRAY(29) DATA 69
69 01CEH 48 TEX15. . . . . . . BYTE ARRAY(48) DATA 69
PL/M-86 COMPILER ERROR MESSAGE MODULE 10/5/81 PAGE 8
69 01FEH 45 TEX16. . . . . . . BYTE ARRAY(45) DATA 69
69 022BH 32 TEX17. . . . . . . BYTE ARRAY(32) DATA 69
69 024BH 23 TEX18. . . . . . . BYTE ARRAY(23) DATA 69
69 0262H 27 TEX19. . . . . . . BYTE ARRAY(27) DATA 69
69 027DH 27 TEX20. . . . . . . BYTE ARRAY(27) DATA 69
69 0298H 39 TEX21. . . . . . . BYTE ARRAY(39) DATA 69
69 02BFH 19 TEX22. . . . . . . BYTE ARRAY(19) DATA 69
69 02D2H 39 TEX23. . . . . . . BYTE ARRAY(39) DATA 69
69 02F9H 27 TEX24. . . . . . . BYTE ARRAY(27) DATA 69
17 0000H 2 TEXTADR. . . . . . WORD PARAMETER 18
69 0000H 52 TEXTTAB. . . . . . WORD ARRAY(26) DATA 91
2 THENDO . . . . . . LITERALLY 94 106 108
66 0000H 30 TITLE. . . . . . . BYTE ARRAY(30) EXTERNAL(47)
66 0000H 4 TOKEN. . . . . . . STRUCTURE EXTERNAL(56)
2 TRUE . . . . . . . LITERALLY 110
72 0004H 2 TXT. . . . . . . . WORD PARAMETER AUTOMATIC 73 75 76
66 0000H 1 TYPE . . . . . . . BYTE MEMBER(TOKEN)
3 TYPEBIT. . . . . . LITERALLY
5 0000H TYPECALC . . . . . PROCEDURE BYTE EXTERNAL(0) STACK=0000H
3 TYPECOUNT. . . . . LITERALLY
4 UDEFSYMBOL . . . . LITERALLY 71
35 0000H UPPER. . . . . . . PROCEDURE BYTE EXTERNAL(10) STACK=0000H
61 0000H 1 USEFACT. . . . . . BYTE PARAMETER 62
5 0000H 2 VAL. . . . . . . . WORD PARAMETER 6
66 0002H 2 VALUE. . . . . . . WORD MEMBER(TOKEN)
8 0000H WRDTEST. . . . . . PROCEDURE BYTE EXTERNAL(1) STACK=0000H
MODULE INFORMATION:
CODE AREA SIZE = 00EBH 235D
CONSTANT AREA SIZE = 034BH 843D
VARIABLE AREA SIZE = 000CH 12D
MAXIMUM STACK SIZE = 0012H 18D
523 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,147 @@
$title ('ERROR MESSAGE MODULE')
errorm:
do;
/*
modified 3/28/81 R. Silberstein
modified 3/30/81 R. Silberstein
modified 4/7/81 R. Silberstein
modified 4/24/81 R. Silberstein
*/
/*
This is the module to perform error message
printout to the print file. The interface from
other modules goes through the subroutine
ERRMSG ( errornumber )
This routine also increments the global variable
"ERRORS" which contains the accumulated number
of errors throughout the assembly.
*/
$include (:f1:macro.lit)
$include (:f1:struc.lit)
$include (:f1:ermod.lit)
$include (:f1:subr1.ext)
$include (:f1:subr2.ext)
$include (:f1:print.ext)
$include (:f1:global.ext)
/* Error messages : */
dcl
nulltext(1) byte data (0), /* dummy text */
tex00(*) byte data ('ILLEGAL FIRST ITEM',0),
tex01(*) byte data ('MISSING PSEUDO INSTRUCTION',0),
tex02(*) byte data ('ILLEGAL PSEUDO INSTRUCTION',0),
tex03(*) byte data ('DOUBLE DEFINED VARIABLE',0),
tex04(*) byte data ('DOUBLE DEFINED LABEL',0),
tex05(*) byte data ('UNDEFINED INSTRUCTION',0),
tex06(*) byte data ('GARBAGE AT END OF LINE - IGNORED',0),
tex07(*) byte data ('OPERAND(S) MISMATCH INSTRUCTION',0),
tex08(*) byte data ('ILLEGAL INSTRUCTION OPERANDS',0),
tex09(*) byte data ('MISSING INSTRUCTION',0),
tex10(*) byte data ('UNDEFINED ELEMENT OF EXPRESSION',0),
tex11(*) byte data ('ILLEGAL PSEUDO OPERAND',0),
tex12(*) byte data ('NESTED "IF" ILLEGAL - "IF" IGNORED',0),
tex13(*) byte data ('ILLEGAL "IF" OPERAND - "IF" IGNORED',0),
tex14(*) byte data ('NO MATCHING "IF" FOR "ENDIF"',0),
tex15(*) byte data ('SYMBOL ILLEGALLY FORWARD REFERENCED - ',
'NEGLECTED',0),
tex16(*) byte data ('DOUBLE DEFINED SYMBOL - ',
'TREATED AS UNDEFINED',0),
tex17(*) byte data ('INSTRUCTION NOT IN CODE SEGMENT',0),
tex18(*) byte data ('FILE NAME SYNTAX ERROR',0),
tex19(*) byte data ('NESTED INCLUDE NOT ALLOWED',0),
tex20(*) byte data ('ILLEGAL EXPRESSION ELEMENT',0),
tex21(*) byte data ('MISSING TYPE INFORMATION IN OPERAND(S)',0),
tex22(*) byte data ('LABEL OUT OF RANGE',0),
tex23(*) byte data ('MISSING SEGMENT INFORMATION IN OPERAND',0),
tex24(*) byte data ('ERROR IN CODEMACROBUILDING',0),
/* Error-message pointer table: */
texttab(*) address data (.tex00,.tex01,.tex02,.tex03,.tex04,
.tex05,.tex06,.tex07,.tex08,
.tex09,.tex10,.tex11,.tex12,.tex13,
.tex14,.tex15,.tex16,.tex17,.tex18,
.tex19,.tex20,.tex21,.tex22,.tex23,
.tex24,.nulltext);
/* Additional text strings: */
dcl
errnotext(*) byte data ('** ERROR NO:',0),
neartext(*) byte data (' ** NEAR: "',0),
spacetext(*) byte data (' ',0);
/* Table of defined error numbers: */
dcl
errtab (*) byte data (firstitem,missingpseudo,
illegalpseudo,doubledefvar,doubledeflab,
illegalmacro,end$of$line$err,opmismatch,
illioper,missinstr,udefsymbol,
pseudooperr,nestediferr,ifparerr,
missiferr,neglecterr,doubledefsymb,
instrerr,filesynterr,
nestedincludeerr,illexprelem,misstypeinfo,
laboutofrange,misssegminfo,codemacroerr);
/* Subroutines: */
printtext: proc(txt);
dcl txt address,ch based txt (1) byte,i byte;
i=0ffh;
do while ch(i:=i+1) <> 0;
call printsinglebyte(ch(i));
end$while;
end printtext;
locerrmsg: proc(erno);
dcl t address,help(5) byte,(helpstop,erno,i) byte;
errortype: proc byte;
i=0ffh;
do while (i:=i+1) < length(errtab);
if erno = errtab(i) then return i;
end$while;
return length(errtab);
end errortype;
helpstop,accum(acclen)=0;
call decout(erno,.help(0));
t=texttab(errortype); /* pick up correct error text */
call printtext(.errnotext); /* print error message line */
call printtext(.help(2));
if accum(0) <> cr then$do
call printtext(.neartext);
call printtext(.accum(0)); /* (print current token) */
CALL PRINTSINGLEBYTE ('"');
end$if;
call printtext(.spacetext);
call printtext(t);
call printcrlf;
end locerrmsg;
/* Public routine: */
errmsg: proc(erno) public;
dcl erno byte;
if print$on OR PRINTSWITCHOFF then$do
if not errorprinted then$do
errorprinted=true;
call locerrmsg(erno);
errors=errors+1;
end$if;
end$if;
end errmsg;
end$module errorm;

View File

@@ -0,0 +1,21 @@
$nolist
dcl
cip addr external, /* current instruction pointer */
csegtype byte external, /* current segment type, code,data */
csegvalue addr external, /* current segment value */
csegspec byte external, /* true if segment value specified */
dspec byte external,
curdseg addr external, /* current data segment value */
token struc( /* actual token scanned */
type byte,
descr byte,
value addr) external, /* token value */
nextch byte external, /* next input character */
acclen byte external, /* accumulator length */
accum(80) byte external, /* actual token scanned */
nooper byte external, /* no of instruction operands */
operands(4) operandstruc /* instruction operands,max 4 */
external;
$list

View File

@@ -0,0 +1,23 @@
$nolist
/*
modified 8/19/81 R. Silberstein
*/
operand: proc byte external;
end operand;
NOFORWARDOPER: PROC BYTE EXTERNAL;
END NOFORWARDOPER;
expression: proc(pt) byte external;
dcl pt address;
end expression;
noforwardexpr: proc(pt) byte external;
dcl pt address;
end noforwardexpr;
$list

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,515 @@
$title ('EXPRESSION MODULE')
expres:
do;
/*
modified 4/8/81 R. Silberstein
modified 4/24/81 R. Silberstein
modified 8/19/81 R. Silberstein
*/
/*
This is the module to evaluate expressions and
instruction operands. The entry subroutines are:
EXPRESSION (resultfield) byte
OPERAND byte
The expression subroutine evaluates a numeric or
memory expression. The "operand" routine evalates
a single instruction operand. Both routines return
FALSE if an error is found,otherwise true.
*/
$include (:f1:macro.lit)
$include (:f1:expr.x86)
$include (:f1:ermod.ext)
$include (:f1:exglob.ext)
$INCLUDE (:F1:SUBR2.EXT)
$eject
/************** global variables: ************/
dcl
maxlev lit '5', /* max no of nested parenthesis */
parlevel byte, /* current no of parenthesis level */
stck(600) byte, /* local stack within module */
savestack addr, /* save of initial entry stack */
expresserr byte, /* error flag */
noforward byte, /* true if undefined symbols to be neglected */
bracketlegal byte, /* true if bracket expression is legal */
udefflag byte; /* true if an udefined element found */
$eject
$include (:f1:bnf.tex)
$eject
/************ michellaneous subroutines: ***********/
exprexit: proc (dummy);
dcl dummy byte;
stackptr=savestack;
end exprexit;
errorexit: proc; /* return if wrong syntax */
dcl dummy byte at (.udefflag);
expresserr=false;
call exprexit(dummy);
end errorexit;
clearoperand: proc(p);
dcl p address,oper based p operandstruc;
CALL FILL (0, .OPER.BASEINDEX - .OPER + 1, P);
OPER.BASEINDEX = NOOVERRIDEBIT;
end clearoperand;
/* routine to test if current token is member of a given
set of special characters.
Entry parameters: base = exitvalue if token is 1. member of set
numbel = no of elements in set
pt = pointer to list of elements
Exit value: routine= 0ffh if token not member of list
routine= base+i if token is element i,
token is skipped */
specmember: proc (base,numbel,pt) byte;
dcl (base,numbel,i) byte,pt address,list based pt (1) byte;
i=0ffh;
do while (i:=i+1) < numbel;
if specialtoken(list(i)) then$do call scan; return base+i; end$if;
end$while;
return 0ffh;
end specmember;
/* Routine to test if current token is member of a given set of
operators.
Entry/exit : see "specmember" header */
opmember: proc(base,numbel,pt) byte;
dcl (base,numbel,i,byteval) byte,pt address,list based pt (1) byte;
if token.type = operator then$do
i=0ffh;
do while (i:=i+1) < numbel;
byteval=token.value;
if byteval=list(i) then$do call scan; return base+i; end$if;
end$while;
end$if;
return 0ffh;
end opmember;
/* test if both operands are numbers, if not, error */
numbtest: proc (ptl,ptr);
dcl (ptl,ptr) address,(left based ptl,rigth based ptr) operandstruc;
if (left.stype <> number) or (rigth.stype <> number) then
call errorexit;
end numbtest;
/* find resulting symbol type as result of an addition or a
subtraction, test if illegal types */
typefind: proc (ptl,ptr);
dcl (ptl,ptr) address,stype byte,
(left based ptl,rigth based ptr) operandstruc;
dcl err lit '07fh',
crosstab(9) byte data(number,variable,lab,variable,err,err,
lab,err,err);
typeno: proc(typ) byte;
dcl typ byte;
if typ=number then return 0;
if typ=variable then return 1;
if typ=lab then return 2;
call errorexit; /* illegal member of expression */
end typeno;
stype=crosstab(typeno(left.stype)*3+typeno(rigth.stype));
if stype=err then call errorexit;
left.length=left.length+rigth.length;
left.stype=stype;
end typefind;
/* take care of segment specification in front of variables
syntax: <over>: variable, <over>=ES/SS/DS/CS */
segover: proc(pt) byte;
dcl pt address,segreg based pt byte;
if (token.type=reg) and (token.descr=dwrd) then$do
if nextch=':' then$do
segreg=token.value;
segreg=(shl(segreg,segtypecount) and segtypebit) or segmbit;
call scan; /* skip segment register */
call scan; /* skip : */
return 0;
end$if;
end$if;
return 0ffh;
end segover;
/* create a number operator */
createnumber: proc(p,n);
dcl p address,n addr,oper based p operandstruc;
call clearoperand(.oper);
oper.stype=number;
oper.offset=n;
end createnumber;
/* get current identificator, perform symboltable lookup
set undefined-symbol-flag if symbol not defined,
treat undefined symbols as numbers */
finditem: proc (pt);
dcl pt address,left based pt operandstruc,symbptr address,i byte;
if token.type <> ident then$do
call clearoperand(.left);
left.stype=token.type;
left.sflag=token.descr;
left.offset=token.value;
else$do
if findsymbol(acclen,.accum(0),.symbptr) then$do
call getattributes(symbptr,.left);
i=left.stype;
if (i=neglected) or (i=doubledefined) or (i=udefsymb) then$do
udefflag=true;
left.stype=number;
expresserr=false;
call errmsg(udefsymbol);
end$if;
else$do
/* symbol undefined - test if it is to be "neglected" */
expresserr=false;
if noforward then$do
if not newsymbol(acclen,.accum,.symbptr) then$do
call errorexit;
end$if;
left.stype=neglected;
call enterattributes(symbptr,.left);
end$if;
call errmsg(udefsymbol);
udefflag=true;
end$if;
end$if;
call scan;
end finditem;
/* recognize the different symboltypes for the II (identicator)
subroutine */
symtyp: proc(pt) byte;
dcl pt address, left based pt operandstruc,i byte;
if specialtoken('$') then return 0;
if specialtoken('.') then return 1;
if token.type=string then$do
if (acclen > 0) and (acclen < 3 ) then return 2;
return 4; /* error */
end$if;
call finditem(.left);
i=left.stype;
if (i=pseudo) or (i=operator) or (i=spec) then return 4; /* error */
return 3;
end symtyp;
$eject
/********** subroutines for each "NON-TERMINAL" **********/
/********** in "BNF" syntax **********/
II: proc (pt) reentrant;
dcl pt address,left based pt operandstruc,
doublebyt addr at (.accum(0)),saveb byte;
do case symtyp(.left);
do; /* $ */
left.stype=lab;
left.sflag=wrd;
left.offset=cip;
if csegspec then$do /* pick up current segment specification */
left.sflag=shl(csegtype,segtypecount) or segmbit or wrd;
left.segment=csegvalue;
end$if;
call scan; /* skip $ */
end;
do; /* . number */
call scan; /* skip . */
call finditem(.left);
if left.stype <> number then call errorexit;
left.stype=variable;
left.segment=curdseg;
left.sflag=shl(rds,segtypecount) and segtypebit;
if dspec then left.sflag=left.sflag or segmbit;
end;
do; /* string */
if acclen=1 then$do
call createnumber(.left,accum(0));
else$do
saveb=accum(0);
accum(0)=accum(1);
accum(1)=saveb;
call createnumber(.left,doublebyt);
end$if;
call scan; /* skip string */
end;
do; end; /* number,label,variable,register */
call errorexit;
end$case;
end II;
BB: proc (pt) reentrant;
dcl pt address,left based pt operandstruc;
if specialtoken('(') then$do
if (parlevel:=parlevel+1) > maxlev-1 then call errorexit;
call scan;
call EE(.left);
if not specialtoken(')') then call errorexit;
parlevel=parlevel-1;
call scan;
return;
end$if;
if specialtoken(leftbracket) then$do
if not bracketlegal then call errorexit;
bracketlegal=false;
call scan; /* skip leftbracket */
call clearoperand(.left);
left.stype=number;
if not bracketexpr(.left) then call errorexit;
return;
end$if;
call II(.left);
end BB;
FF: proc (pt) reentrant;
dcl pt address,left based pt operandstruc,rigth operandstruc,
opertyp byte,val addr;
if (opertyp:=opmember(0,5,.(oseg,ooffset,otype,olength,olast)))
<> 0ffh then$do
call BB(.left);
do case opertyp;
do; /* SEG */
if (left.sflag and segmbit) = 0 then call errorexit;
call createnumber(.left,left.segment);
end;
do; /* OFFSET */
call createnumber(.left,left.offset);
end;
do; /* TYPE */
call createnumber(.left,left.sflag and typebit);
end;
do; /* LENGTH */
call createnumber(.left,left.length);
end;
do; /* LAST */
if (val:=left.length) = 0 then val=1;
call createnumber(.left,val-1);
end;
end$case;
else$do
call BB(.left);
do while opmember(0,1,.(optr)) <> 0ffh;
call BB(.rigth);
left.stype=rigth.stype;
left.segment=rigth.segment;
left.offset=rigth.offset;
left.baseindex=rigth.baseindex;
left.sflag=(left.sflag and typebit) or (rigth.sflag and
(not typebit));
end$while;
end$if;
end FF;
SS: proc (pt) reentrant;
dcl pt address,left based pt operandstruc,segreg byte;
if segover(.segreg) <> 0ffh then$do
call FF(.left);
left.sflag=(left.sflag and (not segtypebit)) or segreg;
left.baseindex=left.baseindex and (not nooverridebit);
else$do
call FF(.left);
end$if;
end SS;
MM: proc (pt) reentrant;
dcl pt address,left based pt operandstruc,opertyp byte;
if (opertyp:=specmember(0,2,.('+-'))) <> 0ffh then$do
call MM(.left);
call numbtest(.left,.left);
if opertyp=1 then$do
left.offset=-left.offset;
end$if;
else$do
call SS(.left);
end$if;
end MM;
TT: proc (pt) reentrant;
dcl pt address,left based pt operandstruc,rigth operandstruc,
opertyp byte,(leftval,rigthval) addr;
call MM(.left);
do while (opertyp:=specmember(0,2,.('*/')) and
opmember(2,3,.(omod,oshl,oshr))) <> 0ffh;
call MM(.rigth);
call numbtest(.left,.rigth);
leftval=left.offset;
rigthval=rigth.offset;
do case opertyp;
leftval=leftval*rigthval;
leftval=leftval/rigthval;
leftval=leftval mod rigthval;
if rigthval>0 and rigthval<16 then leftval=shl(leftval,rigthval);
if rigthval>0 and rigthval<16 then leftval=shr(leftval,rigthval);
end$case;
left.offset=leftval;
end$while;
end TT;
PP: proc (pt) reentrant;
dcl pt address,left based pt operandstruc,rigth operandstruc,
opertyp byte;
call TT(.left);
do while (opertyp:=specmember(0,2,.('+-'))) <> 0ffh;
call TT(.rigth);
call typefind(.left,.rigth);
if opertyp=0 then$do
left.offset=left.offset+rigth.offset;
else$do
left.offset=left.offset-rigth.offset;
end$if;
end$while;
end PP;
RR: proc (pt) reentrant;
dcl pt address,left based pt operandstruc,rigth operandstruc,
opertyp byte,(leftval,rigthval) addr;
call PP(.left);
if (opertyp:=opmember(0,6,.(oeq,olt,ole,ogt,oge,one))) <> 0ffh
then$do
call PP(.rigth);
call numbtest(.left,.rigth);
leftval=left.offset;
rigthval=rigth.offset;
do case opertyp;
leftval = (leftval = rigthval);
leftval = (leftval < rigthval);
leftval = (leftval <= rigthval);
leftval = (leftval > rigthval);
leftval = (leftval >= rigthval);
leftval = (leftval <> rigthval);
end$case;
IF LEFTVAL = 0FFH THEN LEFTVAL = 0FFFFH;
left.offset=leftval;
end$if;
end RR;
NN: proc (pt) reentrant;
dcl pt address,left based pt operandstruc;
if opmember(0,1,.(onot)) <> 0ffh then$do
call NN(.left);
call numbtest(.left,.left);
left.offset=not left.offset;
else$do
call RR(.left);
end$if;
end NN;
AA: proc (pt) reentrant;
dcl pt address,left based pt operandstruc,rigth operandstruc;
call NN(.left);
do while opmember(0,1,.(oand)) <> 0ffh;
call NN(.rigth);
call numbtest(.left,.rigth);
left.offset=left.offset and rigth.offset;
end$while;
end AA;
EE: proc (pt) reentrant;
dcl pt address,left based pt operandstruc,right operandstruc,
opertype byte;
call AA(.left);
do while (opertype:=opmember(0,2,.(oor,oxor))) <> 0ffh;
call AA(.right);
call numbtest(.left,.right);
if opertype=0 then$do
left.offset=left.offset or right.offset;
else$do
left.offset=left.offset xor right.offset;
end$if;
end$while;
end EE;
$eject
/*************** MAIN SUBROUTINES ***************/
realexpress: proc(pt);
dcl pt address,oper based pt operandstruc,
dummy byte at(.udefflag);
savestack=stackptr; /* use local stack for reentrant routines */
stackptr=.stck(length(stck));
call EE(.oper);
call exprexit(dummy);
end realexpress;
express: proc(pt) byte;
dcl pt address,oper based pt operandstruc;
expresserr=true;
udefflag=false;
parlevel=0;
call realexpress(.oper);
if udefflag then$do
oper.stype=number;
oper.sflag=byt;
oper.offset=0;
end$if;
return expresserr;
end express;
/* normal expression */
expression: proc (pt) byte public;
dcl pt address;
noforward=false;
bracketlegal=false;
return express(pt);
end expression;
/* special expression - mark all undefined symbols as "neglected" */
noforwardexpr: proc(pt) byte public;
dcl pt address;
noforward=true;
bracketlegal=false;
return express(pt);
end noforwardexpr;
OPERND: PROC BYTE;
dcl exitvalue byte,pt address,oper based pt operandstruc;
pt=.operands(nooper);
exitvalue=true;
bracketlegal=true;
exitvalue=express(pt);
if specialtoken(leftbracket) then$do
if bracketlegal then$do
call scan;
exitvalue=exitvalue and bracketexpr(pt);
else$do
exitvalue=false;
end$if;
end$if;
return exitvalue;
END OPERND;
OPERAND: PROC BYTE PUBLIC;
NOFORWARD = FALSE;
RETURN OPERND;
END OPERAND;
NOFORWARDOPER: PROC BYTE PUBLIC;
NOFORWARD = TRUE;
RETURN OPERND;
END NOFORWARDOPER;
end$module expres;

View File

@@ -0,0 +1,146 @@
$nolist
/*
modified 4/24/81 R. Silberstein
*/
/* Symbol types : */
dcl
reg lit '0', /* register */
pseudo lit '1', /* pseudo instruction */
code lit '2', /* instruction */
string lit '3', /* character string */
spec lit '4', /* special character */
number lit '5', /* 8 or 16 bit number */
variable lit '6',
lab lit '7', /* label */
operator lit '8', /* operator in expressions */
doubledefined lit '0f9h', /* doubled defined symbol */
neglected lit '0fah', /* neglected symb.,never to be def. */
ident lit '0fbh', /* identificator, scanner output */
udefsymb lit '0fdh', /* undefined symbol */
symbol lit '0feh', /* variable,label or undef. symb. */
deletedsymb lit '0ffh'; /* deleted symbol (not used */
/* Symbol description values */
dcl
nil lit '0', /* no specification */
byt lit '1', /* symbol is 8-bit type */
wrd lit '2', /* symbol is 16 bit type */
dwrd lit '4'; /* symbol is 2*16 bit type
or a segment register */
/* Register values : */
dcl
rbx lit '3',
rbp lit '5',
rsi lit '6',
rdi lit '7',
res lit '0', /* segment registers */
rcs lit '1',
rss lit '2',
rds lit '3';
/* Symbolic operators */
dcl
oshort lit '0', /* 8-bit value of expression */
oor lit '1', /* logical OR */
oxor lit '2', /* logical XOR */
oand lit '3', /* logical AND */
onot lit '4', /* logical NOT */
oeq lit '5', /* equal */
ogt lit '6', /* greater */
oge lit '7', /* greater or equal */
olt lit '8', /* less */
ole lit '9', /* less or equal */
one lit '10', /* not equal */
omod lit '11', /* arithmetic MOD */
oshl lit '12', /* shift left */
oshr lit '13', /* shift rigth */
optr lit '14', /* take type of 1. op, value of 2. */
ooffset lit '15', /* offset value of operand */
oseg lit '16', /* segment value of operand */
otype lit '17', /* type value of operand */
olength lit '18', /* length attribute of variables */
olast lit '19', /* length - 1 */
leftbracket lit '''[''',
rightbracket lit ''']''';
dcl
operandstruc lit 'struc(
length addr,
stype byte,
sflag byte,
segment addr,
offset addr,
baseindex byte)',
/* define bits of SFLAG of structures above */
type$bit lit '7h', /* bit 0-2 */
segtypebit lit '18h', /* bit 3-4 */
segmbit lit '20h', /* bit 5 */
iregbit lit '40h', /* bit 6 */
bregbit lit '80h', /* bit 7 */
/* left-shift counters */
typecount lit '0',
segtypecount lit '3',
segmcount lit '5',
iregcount lit '6',
bregcount lit '7',
/* define bits of BASEINDEX byte of structures above */
indexregbit lit '7', /* bit 0-2 */
baseregbit lit '38h', /* bit 3-5 */
nooverridebit lit '40h', /* bit 6 */
/* left shift counters */
indexregcount lit '0',
baseregcount lit '3',
noovercount lit '6';
dcl
udefsymbol lit '10'; /* undefined elem. of expression */
newsymbol: proc(lg,stradr,result) byte external;
dcl lg byte,(stradr,result) addr;
end newsymbol;
findsymbol: proc(lg,stradr,result) byte external;
dcl lg byte,(stradr,result) addr;
end findsymbol;
getattributes: proc(symbadr,dest) external;
dcl (symbadr,dest) addr;
end getattributes;
enterattributes: proc(symbadr,source) external;
dcl (symbadr,source) addr;
end enterattributes;
scan: proc external;
end scan;
specialtoken: proc (tok) byte external;
dcl tok byte;
end specialtoken;
bracketexpr: proc (pt) byte external;
dcl pt address;
end bracketexpr;
$list

View File

@@ -0,0 +1,70 @@
$nolist
/*
modified 3/28/81 R. Silberstein
modified 6/16/81 R. Silberstein
*/
outhexbyte: proc(ch) external;
dcl ch byte;
end outhexbyte;
outprintbyte: proc(ch) external;
dcl ch byte;
end outprintbyte;
outsymbolbyte: proc(ch) external;
dcl ch byte;
end outsymbolbyte;
insourcebyte: proc byte external;
end insourcebyte;
inincludebyte: proc byte external;
end inincludebyte;
opensource: proc external;
end opensource;
openinclude: proc external;
end openinclude;
openhex: proc external;
end openhex;
openprint: proc external;
end openprint;
opensymbol: proc external;
end opensymbol;
close$source: proc external;
end close$source;
rewindsource: proc external;
end rewindsource;
close$include: proc external;
end close$include;
closehex: proc external;
end closehex;
closeprint: proc external;
end closeprint;
closesymbol: proc external;
end closesymbol;
i$file$setup: proc(dev,filnam,filtyp) external;
dcl dev byte,(filnam,filtyp) addr;
end i$file$setup;
filesetup: proc byte external;
end filesetup;
$list

View File

@@ -0,0 +1,982 @@
PL/M-86 COMPILER FILE AND I/O MODULE 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE FILE
OBJECT MODULE PLACED IN FILES.OBJ
COMPILER INVOKED BY: :F0: FILES.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100) XREF
$title('FILE AND I/O MODULE')
1 file:
do;
/*
modified 3/26/81 R. Silberstein
modified 3/28/81 R. Silberstein
modified 3/30/81 R. Silberstein
modified 4/7/81 R. Silberstein
modified 4/16/81 R. Silberstein
modified 6/16/81 R. Silberstein
modified 9/14/81 R. Silberstein
*/
/*
This is the modules to perform BYTE i/o to
the following 5 logical devices:
source - file
include - file
hex - file
symbol - file
print - file
Each of the logical files may be assigned to the
following physical devices :
null (not legal for source and include file)
console
printer (not legal for source and include file)
disk
The module defines the following set
of public subroutines:
INSOURCEBYTE - read 1 byte from source file
ININCLUDEBYTE - read 1 byte from include file
OUTHEXBYTE (ch) - write 1 byte to hex file
OUTSYMBOLBYTE (ch) - write 1 byte to symbol file
OUTPRINTBYTE (ch) - write 1 byte to print file
OPENSOURCE - open source file
OPENINCLUDE - open include file
OPENHEX - open hex file
OPENSYMBOL - open symbol file
OPENPRINT - open print file
REWINDSOURCE - rewind source file
CLOSESOURCE - close source file
PL/M-86 COMPILER FILE AND I/O MODULE 10/5/81 PAGE 2
CLOSEINCLUDE - close include file
CLOSEHEX - close hex file
CLOSESYMBOL - close symbol file
CLOSEPRINT - close print file
In addition, 2 subroutines to set up the correct
file names and routing to correct physical device
are included. These are:
FILESETUP
I$FILESETUP
The "filesetup" routine sets up the source, hex, symbol
and print files by scanning the user command tail of the
program activating line. The format of the command line
is described in the program format section of the user's
manual. The routine also initiates the global string array
"SOURCENAME" with the source file name, this array to be
used later by the printout module.
The "ifilesetup" sets up the format of the include file
given by the INCLUDE command of the assembler.
*/
$include (:f1:macro.lit)
= $nolist
$include (:f1:struc.lit)
= $nolist
$include (:f1:dev.lit)
= $nolist
$include (:f1:io.ext)
= $nolist
$include (:f1:subr1.ext)
= $nolist
$include (:f1:subr2.ext)
= $nolist
$INCLUDE (:F1:TEXT.EXT)
= $nolist
$include (:f1:global.ext)
= $nolist
109 1 dcl
diskunit byte,
nulltype lit '0', /* subroutine "devicetype" */
consoletype lit '1',
printertype lit '2',
disktype lit '3',
dr lit '0', /* drive code in fcb block */
fn lit '1', /* filename in fcb block */
ft lit '9', /* filetype in fcb block */
ex lit '12', /* file extension number */
s2 lit '14',
nr lit '32', /* file record number */
dollar lit '''$''',
PL/M-86 COMPILER FILE AND I/O MODULE 10/5/81 PAGE 3
asmdefault(3) byte data ('A86'), /* different file types */
hexdefault(3) byte data ('H86'),
lstdefault(3) byte data ('LST'),
symdefault(3) byte data ('SYM'),
sourcefile file$i$structure,
includefile file$i$structure,
hexfile file$o$structure,
printfile file$o$structure,
symbolfile file$o$structure;
110 1 clearfcb: proc(fcbpt,defaultpt);
111 2 dcl
(fcbpt,defaultpt) addr,
dest based fcbpt (1) byte;
112 2 CALL FILL (0, 33, FCBPT);
113 2 CALL FILL (' ', 8, FCBPT+FN);
114 2 call copy(3,defaultpt,.dest(ft));
115 2 end clearfcb;
116 1 clearcontrol: procedure(point,defaultptr);
117 2 dcl (point,defaultptr) addr,
x based point file$o$structure;
118 2 call clearfcb(.x.fcbblock,defaultptr);
119 2 x.disk=diskunit;
120 2 end clearcontrol;
121 1 devicetype: proc(ch) byte;
122 2 dcl ch byte;
123 2 if ch=null then return nulltype;
125 2 if ch=console then return consoletype;
127 2 if ch=printer then return printertype;
129 2 return disktype;
130 2 end devicetype;
131 1 disk$select: procedure(disk);
132 2 dcl disk byte;
133 2 if diskunit <> disk then$do
135 3 diskunit=disk;
136 3 call select$disk(diskunit);
137 3 end$if;
138 2 end disk$select;
139 1 inbyte: proc (ptr) byte;
140 2 dcl ptr addr,
x based ptr file$i$structure,
ch byte,
i addr;
141 2 i=x.bufptr;
142 2 if i=length(x.buffer) then$do
144 3 i=0;
145 3 call disk$select(x.disk);
146 3 do while i < length(x.buffer);
147 4 call SET$DMA$ADDRESS (.x.buffer(i));
148 4 IF (CH := READ$RECORD (.X.FCBBLOCK)) <> 0 THEN$DO
PL/M-86 COMPILER FILE AND I/O MODULE 10/5/81 PAGE 4
150 5 IF CH = 1 THEN$DO
152 6 X.BUFFER (I) = END$OF$FILE;
153 6 I = LENGTH (X.BUFFER);
154 6 ELSE$DO
156 6 CALL FILEABORT (.X, .DISKREADERRTEXT);
157 6 END$IF;
158 5 else$do
160 5 i=i+128;
161 5 end$if;
162 4 end$while;
163 3 i=0;
164 3 end$if;
165 2 ch=x.buffer(i);
166 2 x.bufptr=i+1;
167 2 return ch;
168 2 end inbyte;
169 1 FLUSHBUFFER: PROCEDURE (PTR);
170 2 DECLARE (PTR, I) ADDRESS, X BASED PTR FILE$O$STRUCTURE;
171 2 call disk$select(x.disk);
172 2 i=0;
173 2 do while i < x.bufptr;
174 3 call SET$DMA$ADDRESS (.x.buffer(i));
175 3 IF WRITE$RECORD (.X.FCBBLOCK) > 0 THEN
176 3 CALL FILEABORT (.X, .DISKWRITEERRTXT);
177 3 i=i+128;
178 3 end$while;
179 2 END FLUSHBUFFER;
180 1 outbyte: proc(ch,ptr);
181 2 dcl ch byte,
ptr addr,
x based ptr file$o$structure,
i addr;
182 2 do case devicetype(x.disk);
/* null */
183 3 do; end; /* do nothing */
/* console */
185 3 call write$console(ch);
/* printer */
186 3 call write$list(ch);
/* disk file */
187 3 do;
188 4 i=x.bufptr;
189 4 if i=length(x.buffer) then$do
191 5 CALL FLUSHBUFFER (PTR);
192 5 i=0;
193 5 end$if;
194 4 x.buffer(i)=ch;
195 4 x.bufptr=i+1;
196 4 end;
PL/M-86 COMPILER FILE AND I/O MODULE 10/5/81 PAGE 5
197 3 end$case;
198 2 end outbyte;
199 1 open$input: proc (ptr);
200 2 dcl ptr addr,
x based ptr file$i$structure;
201 2 x.bufptr=length(x.buffer);
202 2 call disk$select(x.disk);
203 2 IF LOW (VERSION) >= 30H THEN$DO
205 3 IF OPEN$RO$FILE (.X.FCBBLOCK) <> 0FFH THEN RETURN;
ELSE$DO
209 3 IF OPEN$FILE (.X.FCBBLOCK) <> 0FFH THEN RETURN;
END$IF;
212 2 CALL FILEABORT (.X, .OPENERRTEXT);
213 2 end open$input;
214 1 open$output: proc(ptr);
215 2 dcl ptr addr,
x based ptr file$o$structure;
216 2 if devicetype(x.disk)=disktype then$do
218 3 x.bufptr=0;
219 3 call disk$select(x.disk);
220 3 CALL delete$file(.x.fcbblock);
221 3 if create$file(.x.fcbblock) = 0ffh then
222 3 CALL FILEABORT (.X, .MAKEERRTEXT);
end$if;
224 2 end open$output;
225 1 outputclose: proc(ptr);
226 2 dcl ptr addr,
x based ptr file$o$structure;
227 2 if devicetype(x.disk)=disktype then$do
229 3 call outbyte(end$of$file,.x);
230 3 CALL FLUSHBUFFER (PTR);
231 3 IF CLOSE$FILE (.X.FCBBLOCK) = 0FFH THEN
232 3 CALL FILEABORT (.X, .CLOSEERRTEXT);
end$if;
234 2 end outputclose;
235 1 INPUT$CLOSE: PROCEDURE (PTR);
236 2 DECLARE PTR ADDRESS, X BASED PTR FILE$I$STRUCTURE;
237 2 CALL DISK$SELECT (X.DISK);
238 2 CALL SET$DMA$ADDRESS (.X.BUFFER);
239 2 IF CLOSE$FILE (.X.FCBBLOCK) THEN;
241 2 END INPUT$CLOSE;
242 1 outhexbyte: proc(ch) public;
243 2 dcl ch byte;
244 2 call outbyte(ch,.hex$file);
245 2 end outhexbyte;
246 1 outprintbyte: proc(ch) public;
247 2 dcl ch byte;
248 2 if printfile.disk=console then$do
PL/M-86 COMPILER FILE AND I/O MODULE 10/5/81 PAGE 6
250 3 call write$console(ch);
251 3 else$do
253 3 if error$printed then call write$console(ch);
255 3 call outbyte(ch,.printfile);
256 3 end$if;
257 2 end outprintbyte;
258 1 outsymbolbyte: proc(ch) public;
259 2 dcl ch byte;
260 2 call outbyte(ch,.symbolfile);
261 2 end outsymbolbyte;
262 1 insourcebyte: proc byte public;
263 2 return inbyte(.sourcefile);
264 2 end insourcebyte;
265 1 inincludebyte: proc byte public;
266 2 return inbyte(.includefile);
267 2 end inincludebyte;
268 1 opensource: proc public;
269 2 CALL open$input(.sourcefile);
270 2 end opensource;
271 1 openinclude: proc public;
272 2 CALL open$input(.includefile);
273 2 end openinclude;
274 1 openhex: proc public;
275 2 CALL open$output(.hexfile);
276 2 end openhex;
277 1 openprint: proc public;
278 2 CALL open$output(.printfile);
279 2 end openprint;
280 1 opensymbol: proc public;
281 2 CALL open$output(.symbolfile);
282 2 end opensymbol;
283 1 close$source: proc public;
284 2 call input$close (.source$file);
285 2 end close$source;
286 1 rewindsource: proc public;
287 2 sourcefile.fcbblock(nr)=0;
288 2 sourcefile.bufptr=length(sourcefile.buffer);
289 2 if sourcefile.fcbblock(ex) <> 0 then$do
291 3 sourcefile.fcbblock(ex)=0;
292 3 sourcefile.fcbblock(s2)=0;
293 3 CALL opensource;
294 3 end$if;
295 2 end rewindsource;
296 1 close$include: proc public;
297 2 call input$close (.include$file);
298 2 end close$include;
PL/M-86 COMPILER FILE AND I/O MODULE 10/5/81 PAGE 7
299 1 closehex: proc public;
300 2 call outputclose(.hexfile);
301 2 end closehex;
302 1 closeprint: proc public;
303 2 call outputclose(.printfile);
304 2 end closeprint;
305 1 closesymbol: proc public;
306 2 call outputclose(.symbolfile);
307 2 end closesymbol;
308 1 i$file$setup: proc(dev,filnam,filtyp) public;
309 2 dcl dev byte,(filnam,filtyp) addr;
310 2 call clearcontrol(.includefile,filtyp);
311 2 includefile.disk=dev;
312 2 call copy(8,filnam,.includefile.fcbblock(fn));
313 2 end i$file$setup;
314 1 filesetup: proc byte public;
315 2 dcl
ch byte, /* pick up character */
i byte, /* counter */
noleft byte, /* no of characters left in tbuff */
bpt byte, /* index of tbuff */
exitvalue byte, /* exitvalue of subroutine */
flag byte; /* program logic flag */
316 2 nextch: proc byte;
317 3 if noleft > 0 then$do
319 4 ch=tbuff(bpt);
320 4 noleft=noleft-1;
321 4 bpt=bpt+1;
322 4 else$do
324 4 ch=cr;
325 4 end$if;
326 3 return ch;
327 3 end nextch;
328 2 getdsk: procedure (p);
329 3 declare p address, dsk based p byte;
330 3 ch=upper(nextch); /* test selected disk drive */
331 3 if letter(ch) then$do
333 4 dsk=ch-'A';
334 4 if dsk > validdisk then
335 4 if dsk < console then
336 4 exitvalue = false; /* invalid drive */
else$do
339 4 exitvalue=false;
340 4 noleft=0;
341 4 end$if;
342 3 end getdsk;
343 2 exitvalue=true;
PL/M-86 COMPILER FILE AND I/O MODULE 10/5/81 PAGE 8
/* save current disk */
344 2 default$drive,diskunit=interrogate$disk;
/* enter user selected disk */
345 2 if fcb(dr) <> 0 then$do
347 3 call selectdisk(diskunit:=fcb(dr)-1);
348 3 end$if;
/* clear control blocks */
349 2 call clearcontrol(.sourcefile,.asmdefault);
350 2 call clearcontrol(.hexfile,.hexdefault);
351 2 call clearcontrol(.printfile,.lstdefault);
352 2 call clearcontrol(.symbolfile,.symdefault);
353 2 call copy(8,.fcb(fn),.sourcefile.fcbblock(fn));
354 2 call copy(8,.fcb(fn),.hexfile.fcbblock(fn));
355 2 call copy(8,.fcb(fn),.printfile.fcbblock(fn));
356 2 call copy(8,.fcb(fn),.symbolfile.fcbblock(fn));
357 2 if FCB (FT) <> SPACE then$do /* pick up specified source file type */
359 3 call copy(3,.fcb(ft),.sourcefile.fcbblock(ft));
360 3 end$if;
/* Move source file name to SOURCENAME */
361 2 CALL FILL (SPACE, LENGTH (SOURCENAME), .SOURCENAME);
362 2 i=0;
363 2 do while i<8 and (sourcename(i):=sourcefile.fcbblock(fn+i)) <> space;
364 3 i=i+1;
365 3 end$while;
366 2 sourcename(i)='.';
367 2 i=i+1;
368 2 call copy(3,.sourcefile.fcbblock(ft),.sourcename(i));
/* Test if file parameters */
369 2 noleft=tbuff(0);
370 2 bpt=1;
371 2 FLAG = FALSE;
372 2 IF FCB16 (1) <> SPACE THEN$DO
374 3 IF FCB16 (1) <> DOLLAR THEN$DO
376 4 EXITVALUE = FALSE;
377 4 ELSE$DO
379 4 DO WHILE (NOLEFT > 0) AND (NEXTCH <> DOLLAR);
380 5 END$WHILE;
381 4 FLAG = TRUE;
382 4 END$IF;
383 3 END$IF;
384 2 if flag then$do
/* file parameters present - pick them up */
386 3 do while noleft > 0;
387 4 if (ch:=upper(nextch)) <> space then$do
/* A-parameter */
389 5 IF CH = 'A' THEN call getdsk(.sourcefile.disk);
PL/M-86 COMPILER FILE AND I/O MODULE 10/5/81 PAGE 9
/* H-parameter */
391 5 ELSE IF CH = 'H' THEN call getdsk(.hexfile.disk);
/* P-parameter */
393 5 ELSE IF CH = 'P' THEN call getdsk(.printfile.disk);
/* S-parameter */
395 5 ELSE IF CH = 'S' THEN call getdsk(.symbolfile.disk);
/* F-parameter */
397 5 ELSE IF CH = 'F' THEN$DO
399 6 if (ch:=upper(nextch)) = 'I' then$do
401 7 intel$hex$on=true;
402 7 else$do
404 7 if ch= 'D' then$do
406 8 intel$hex$on=false;
407 8 else$do
409 8 exitvalue=false;
410 8 noleft=0;
411 8 endif;
412 7 endif;
413 6 END$IF;
/* error,no legal parameter */
ELSE
414 5 DO;
415 6 exitvalue=false;
416 6 noleft=0;
417 6 END$DO;
418 5 end$if;
end$while;
420 3 end$if;
421 2 printdevice=printfile.disk; /* set global printdevice flag */
422 2 SYMBOLDEVICE = SYMBOLFILE.DISK;
423 2 INCLUDE$DEFAULT = SOURCEFILE.DISK;
/* input must be from a disk file */
424 2 if devicetype(sourcefile.disk) <> disktype then$do
426 3 exitvalue=false;
427 3 end$if;
428 2 return exitvalue;
429 2 end filesetup;
430 1 end file;
PL/M-86 COMPILER FILE AND I/O MODULE 10/5/81 PAGE 10
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
106 0000H 4 ABSADDR. . . . . . BYTE ARRAY(4) EXTERNAL(87)
106 0000H 1 ACCLEN . . . . . . BYTE EXTERNAL(91)
106 0000H 1 ACCLENSAVE . . . . BYTE EXTERNAL(94)
106 0000H 80 ACCUM. . . . . . . BYTE ARRAY(80) EXTERNAL(92)
106 0000H 80 ACCUMSAVE. . . . . BYTE ARRAY(80) EXTERNAL(93)
2 ADDR . . . . . . . LITERALLY 61 64 67 70 76 94 97
100 103 106 109 111 117 140 170 181 200
215 226 236 309
84 0000H ALPHANUMERIC . . . PROCEDURE BYTE EXTERNAL(31) STACK=0000H
87 0000H ASCIICHAR. . . . . PROCEDURE BYTE EXTERNAL(32) STACK=0000H
105 0000H 1 ASM86TEXT. . . . . BYTE ARRAY(1) EXTERNAL(44)
109 0000H 3 ASMDEFAULT . . . . BYTE ARRAY(3) DATA 349
106 0008H 1 BASEINDEX. . . . . BYTE MEMBER(CURRENTSYMBOL)
106 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPERANDS)
3 BASEREGBIT . . . . LITERALLY
3 BASEREGCOUNT . . . LITERALLY
315 0EBFH 1 BPT. . . . . . . . BYTE 319 321 370
3 BREGBIT. . . . . . LITERALLY
3 BREGCOUNT. . . . . LITERALLY
170 0024H 512 BUFFER . . . . . . BYTE ARRAY(512) MEMBER(X) 174
236 0024H 1024 BUFFER . . . . . . BYTE ARRAY(1024) MEMBER(X) 238
109 0024H 512 BUFFER . . . . . . BYTE ARRAY(512) MEMBER(SYMBOLFILE)
226 0024H 512 BUFFER . . . . . . BYTE ARRAY(512) MEMBER(X)
140 0024H 1024 BUFFER . . . . . . BYTE ARRAY(1024) MEMBER(X) 142 146 147
152 153 165
109 0024H 512 BUFFER . . . . . . BYTE ARRAY(512) MEMBER(PRINTFILE)
200 0024H 1024 BUFFER . . . . . . BYTE ARRAY(1024) MEMBER(X) 201
215 0024H 512 BUFFER . . . . . . BYTE ARRAY(512) MEMBER(X)
109 0024H 1024 BUFFER . . . . . . BYTE ARRAY(1024) MEMBER(INCLUDEFILE)
117 0024H 512 BUFFER . . . . . . BYTE ARRAY(512) MEMBER(X)
109 0024H 1024 BUFFER . . . . . . BYTE ARRAY(1024) MEMBER(SOURCEFILE) 288
109 0024H 512 BUFFER . . . . . . BYTE ARRAY(512) MEMBER(HEXFILE)
181 0024H 512 BUFFER . . . . . . BYTE ARRAY(512) MEMBER(X) 189 194
109 0022H 2 BUFPTR . . . . . . WORD MEMBER(INCLUDEFILE)
109 0022H 2 BUFPTR . . . . . . WORD MEMBER(PRINTFILE)
226 0022H 2 BUFPTR . . . . . . WORD MEMBER(X)
140 0022H 2 BUFPTR . . . . . . WORD MEMBER(X) 141 166
170 0022H 2 BUFPTR . . . . . . WORD MEMBER(X) 173
109 0022H 2 BUFPTR . . . . . . WORD MEMBER(HEXFILE)
215 0022H 2 BUFPTR . . . . . . WORD MEMBER(X) 218
109 0022H 2 BUFPTR . . . . . . WORD MEMBER(SYMBOLFILE)
117 0022H 2 BUFPTR . . . . . . WORD MEMBER(X)
181 0022H 2 BUFPTR . . . . . . WORD MEMBER(X) 188 195
109 0022H 2 BUFPTR . . . . . . WORD MEMBER(SOURCEFILE) 288
236 0022H 2 BUFPTR . . . . . . WORD MEMBER(X)
200 0022H 2 BUFPTR . . . . . . WORD MEMBER(X) 201
81 0000H 1 CH . . . . . . . . BYTE PARAMETER 82
315 0EBCH 1 CH . . . . . . . . BYTE 319 324 326 330 331 333 387 389
391 393 395 397 399 404
PL/M-86 COMPILER FILE AND I/O MODULE 10/5/81 PAGE 11
75 0000H 1 CH . . . . . . . . BYTE PARAMETER 76
246 0004H 1 CH . . . . . . . . BYTE PARAMETER AUTOMATIC 247 250 254 255
180 0006H 1 CH . . . . . . . . BYTE PARAMETER AUTOMATIC 181 185 186 194
90 0000H 1 CH . . . . . . . . BYTE PARAMETER 91
78 0000H 1 CH . . . . . . . . BYTE PARAMETER 79
242 0004H 1 CH . . . . . . . . BYTE PARAMETER AUTOMATIC 243 244
140 0EBBH 1 CH . . . . . . . . BYTE 148 150 165 167
84 0000H 1 CH . . . . . . . . BYTE PARAMETER 85
121 0004H 1 CH . . . . . . . . BYTE PARAMETER AUTOMATIC 122 123 125 127
258 0004H 1 CH . . . . . . . . BYTE PARAMETER AUTOMATIC 259 260
87 0000H 1 CH . . . . . . . . BYTE PARAMETER 88
19 0000H 1 CHAR . . . . . . . BYTE PARAMETER 20
22 0000H 1 CHAR . . . . . . . BYTE PARAMETER 23
106 0000H 2 CIP. . . . . . . . WORD EXTERNAL(56)
116 0031H 28 CLEARCONTROL . . . PROCEDURE STACK=0016H 310 349 350 351
352
110 0000H 49 CLEARFCB . . . . . PROCEDURE STACK=000EH 118
105 0000H 1 CLOSEERRTEXT . . . BYTE ARRAY(1) EXTERNAL(50) 232
38 0000H CLOSEFILE. . . . . PROCEDURE BYTE EXTERNAL(15) STACK=0000H 231
239
299 0399H 12 CLOSEHEX . . . . . PROCEDURE PUBLIC STACK=0020H
296 038DH 12 CLOSEINCLUDE . . . PROCEDURE PUBLIC STACK=0012H
302 03A5H 12 CLOSEPRINT . . . . PROCEDURE PUBLIC STACK=0020H
283 0361H 12 CLOSESOURCE. . . . PROCEDURE PUBLIC STACK=0012H
305 03B1H 12 CLOSESYMBOL. . . . PROCEDURE PUBLIC STACK=0020H
106 0000H 1 CODEMACROFLAG. . . BYTE EXTERNAL(113)
3 CODEMACROHEAD. . . LITERALLY
106 0000H 2 CODEMACROPTR . . . WORD EXTERNAL(108)
4 CONSOLE. . . . . . LITERALLY 125 248 335
109 CONSOLETYPE. . . . LITERALLY 126
25 0000H CONSTAT. . . . . . PROCEDURE BYTE EXTERNAL(10) STACK=0000H
66 0000H COPY . . . . . . . PROCEDURE EXTERNAL(25) STACK=0000H 114 312
353 354 355 356 359 368
2 CR . . . . . . . . LITERALLY 324
50 0000H CREATEFILE . . . . PROCEDURE BYTE EXTERNAL(19) STACK=0000H 221
58 0000H CRLF . . . . . . . PROCEDURE EXTERNAL(22) STACK=0000H
106 0000H 2 CSCIP. . . . . . . WORD EXTERNAL(61)
106 0000H 1 CSEGSPEC . . . . . BYTE EXTERNAL(59)
106 0000H 1 CSEGTYPE . . . . . BYTE EXTERNAL(57)
106 0000H 2 CSEGVALUE. . . . . WORD EXTERNAL(58)
106 0000H 1 CSPEC. . . . . . . BYTE EXTERNAL(68)
106 0000H 2 CURCSEG. . . . . . WORD EXTERNAL(64)
106 0000H 2 CURDSEG. . . . . . WORD EXTERNAL(65)
106 0000H 2 CURESEG. . . . . . WORD EXTERNAL(67)
106 0000H 9 CURRENTSYMBOL. . . STRUCTURE EXTERNAL(104)
106 0000H 2 CURSSEG. . . . . . WORD EXTERNAL(66)
96 0000H 2 D. . . . . . . . . WORD PARAMETER 97
93 0000H 2 D. . . . . . . . . WORD PARAMETER 94
102 0000H 2 D. . . . . . . . . WORD PARAMETER 103
66 0000H 2 D. . . . . . . . . WORD PARAMETER 67
99 0000H 2 D. . . . . . . . . WORD PARAMETER 100
2 DCL. . . . . . . . LITERALLY
102 0000H DECOUT . . . . . . PROCEDURE EXTERNAL(37) STACK=0000H
106 0000H 1 DEFAULTDRIVE . . . BYTE EXTERNAL(111) 344
110 0004H 2 DEFAULTPT. . . . . WORD PARAMETER AUTOMATIC 111 114
116 0004H 2 DEFAULTPTR . . . . WORD PARAMETER AUTOMATIC 117 118
41 0000H DELETEFILE . . . . PROCEDURE EXTERNAL(16) STACK=0000H 220
PL/M-86 COMPILER FILE AND I/O MODULE 10/5/81 PAGE 12
106 0001H 1 DESCR. . . . . . . BYTE MEMBER(TOKEN)
111 0000H 1 DEST . . . . . . . BYTE BASED(FCBPT) ARRAY(1) 114
308 0008H 1 DEV. . . . . . . . BYTE PARAMETER AUTOMATIC 309 311
121 004DH 39 DEVICETYPE . . . . PROCEDURE BYTE STACK=0004H 182 216 227
424
78 0000H DIGIT. . . . . . . PROCEDURE BYTE EXTERNAL(29) STACK=0000H
109 0000H 1 DISK . . . . . . . BYTE MEMBER(PRINTFILE) 248 394 421
140 0000H 1 DISK . . . . . . . BYTE MEMBER(X) 145
215 0000H 1 DISK . . . . . . . BYTE MEMBER(X) 216 219
109 0000H 1 DISK . . . . . . . BYTE MEMBER(HEXFILE) 392
109 0000H 1 DISK . . . . . . . BYTE MEMBER(SOURCEFILE) 390 423 424
236 0000H 1 DISK . . . . . . . BYTE MEMBER(X) 237
200 0000H 1 DISK . . . . . . . BYTE MEMBER(X) 202
109 0000H 1 DISK . . . . . . . BYTE MEMBER(INCLUDEFILE) 311
181 0000H 1 DISK . . . . . . . BYTE MEMBER(X) 182
170 0000H 1 DISK . . . . . . . BYTE MEMBER(X) 171
117 0000H 1 DISK . . . . . . . BYTE MEMBER(X) 119
226 0000H 1 DISK . . . . . . . BYTE MEMBER(X) 227
109 0000H 1 DISK . . . . . . . BYTE MEMBER(SYMBOLFILE) 396 422
131 0004H 1 DISK . . . . . . . BYTE PARAMETER AUTOMATIC 132 133 135
29 0000H 1 DISKNUMBER . . . . BYTE PARAMETER 30
105 0000H 1 DISKREADERRTEXT. . BYTE ARRAY(1) EXTERNAL(47) 156
131 0074H 23 DISKSELECT . . . . PROCEDURE STACK=0008H 145 171 202 219
237
109 DISKTYPE . . . . . LITERALLY 129 216 227 424
109 0EBAH 1 DISKUNIT . . . . . BYTE 119 133 135 136 344 347
105 0000H 1 DISKWRITEERRTXT. . BYTE ARRAY(1) EXTERNAL(48) 176
55 0000H 2 DMAADDRESS . . . . WORD PARAMETER 56
109 DOLLAR . . . . . . LITERALLY 374 379
109 DR . . . . . . . . LITERALLY 345 347
106 0000H 2 DSCIP. . . . . . . WORD EXTERNAL(63)
329 0000H 1 DSK. . . . . . . . BYTE BASED(P) 333 334 335
106 0000H 1 DSPEC. . . . . . . BYTE EXTERNAL(69)
2 ELSEDO . . . . . . LITERALLY 206 336
14 0000H 2 ENDBUF . . . . . . WORD EXTERNAL(5)
2 ENDCASE. . . . . . LITERALLY
2 ENDDO. . . . . . . LITERALLY
2 ENDFOREVER . . . . LITERALLY
2 ENDIF. . . . . . . LITERALLY 210 222 232
2 ENDMODULE. . . . . LITERALLY
2 ENDOFFILE. . . . . LITERALLY 152 229
2 ENDPROC. . . . . . LITERALLY
105 0000H 1 ENDTEXT. . . . . . BYTE ARRAY(1) EXTERNAL(42)
2 ENDWHILE . . . . . LITERALLY 418
106 0000H 1 EOFSET . . . . . . BYTE EXTERNAL(95)
93 0000H EQUAL. . . . . . . PROCEDURE BYTE EXTERNAL(34) STACK=0000H
106 0000H 1 ERRORPRINTED . . . BYTE EXTERNAL(98) 253
106 0000H 2 ERRORS . . . . . . WORD EXTERNAL(88)
106 0000H 2 ESCIP. . . . . . . WORD EXTERNAL(60)
106 0000H 1 ESPEC. . . . . . . BYTE EXTERNAL(71)
109 EX . . . . . . . . LITERALLY 289 291
315 0EC0H 1 EXITVALUE. . . . . BYTE 336 339 343 376 409 415 426 428
2 FALSE. . . . . . . LITERALLY 336 339 371 376 406 409 415
426
11 0000H 1 FCB. . . . . . . . BYTE ARRAY(1) EXTERNAL(2) 345 347 353 354
355 356 357 359
12 0000H 1 FCB16. . . . . . . BYTE ARRAY(1) EXTERNAL(3) 372 374
PL/M-86 COMPILER FILE AND I/O MODULE 10/5/81 PAGE 13
38 0000H 2 FCBADDRESS . . . . WORD PARAMETER 39
50 0000H 2 FCBADDRESS . . . . WORD PARAMETER 51
47 0000H 2 FCBADDRESS . . . . WORD PARAMETER 48
44 0000H 2 FCBADDRESS . . . . WORD PARAMETER 45
41 0000H 2 FCBADDRESS . . . . WORD PARAMETER 42
35 0000H 2 FCBADDRESS . . . . WORD PARAMETER 36
32 0000H 2 FCBADDRESS . . . . WORD PARAMETER 33
72 0000H 2 FCBADR . . . . . . WORD PARAMETER 73
236 0001H 33 FCBBLOCK . . . . . BYTE ARRAY(33) MEMBER(X) 239
215 0001H 33 FCBBLOCK . . . . . BYTE ARRAY(33) MEMBER(X) 220 221
200 0001H 33 FCBBLOCK . . . . . BYTE ARRAY(33) MEMBER(X) 205 209
181 0001H 33 FCBBLOCK . . . . . BYTE ARRAY(33) MEMBER(X)
170 0001H 33 FCBBLOCK . . . . . BYTE ARRAY(33) MEMBER(X) 175
140 0001H 33 FCBBLOCK . . . . . BYTE ARRAY(33) MEMBER(X) 148
117 0001H 33 FCBBLOCK . . . . . BYTE ARRAY(33) MEMBER(X) 118
109 0001H 33 FCBBLOCK . . . . . BYTE ARRAY(33) MEMBER(SYMBOLFILE) 356
109 0001H 33 FCBBLOCK . . . . . BYTE ARRAY(33) MEMBER(PRINTFILE) 355
109 0001H 33 FCBBLOCK . . . . . BYTE ARRAY(33) MEMBER(HEXFILE) 354
109 0001H 33 FCBBLOCK . . . . . BYTE ARRAY(33) MEMBER(INCLUDEFILE) 312
109 0001H 33 FCBBLOCK . . . . . BYTE ARRAY(33) MEMBER(SOURCEFILE) 287 289
291 292 353 359 363 368
226 0001H 33 FCBBLOCK . . . . . BYTE ARRAY(33) MEMBER(X) 231
110 0006H 2 FCBPT. . . . . . . WORD PARAMETER AUTOMATIC 111 112 113 114
1 0000H FILE . . . . . . . PROCEDURE STACK=0000H
72 0000H FILEABORT. . . . . PROCEDURE EXTERNAL(27) STACK=0000H 156 176
212 222 232
3 FILEISTRUCTURE . . LITERALLY 109 140 200 236
3 FILEOSTRUCTURE . . LITERALLY 109 117 170 181 215 226
314 03E1H 512 FILESETUP. . . . . PROCEDURE BYTE PUBLIC STACK=001AH
75 0000H FILL . . . . . . . PROCEDURE EXTERNAL(28) STACK=0000H 112 113
361
308 0006H 2 FILNAM . . . . . . WORD PARAMETER AUTOMATIC 309 312
308 0004H 2 FILTYP . . . . . . WORD PARAMETER AUTOMATIC 309 310
106 0000H 2 FIRSTMACROPTR. . . WORD EXTERNAL(99)
315 0EC1H 1 FLAG . . . . . . . BYTE 371 381 384
169 011DH 76 FLUSHBUFFER. . . . PROCEDURE STACK=000EH 191 230
109 FN . . . . . . . . LITERALLY 113 312 353 354 355 356 363
2 FOREVER. . . . . . LITERALLY
2 FORMFEED . . . . . LITERALLY
109 FT . . . . . . . . LITERALLY 114 357 359 368
106 0000H 1 FULLSYMBTAB. . . . BYTE EXTERNAL(101)
8 0000H 1 FUNC . . . . . . . BYTE PARAMETER 9
5 0000H 1 FUNC . . . . . . . BYTE PARAMETER 6
328 060CH 68 GETDSK . . . . . . PROCEDURE STACK=0008H 390 392 394 396
107 0000H GLOBALINIT . . . . PROCEDURE EXTERNAL(114) STACK=0000H
106 0000H 5 HELP . . . . . . . BYTE ARRAY(5) EXTERNAL(109)
96 0000H HEX1OUT. . . . . . PROCEDURE EXTERNAL(35) STACK=0000H
99 0000H HEX2OUT. . . . . . PROCEDURE EXTERNAL(36) STACK=0000H
109 0003H 3 HEXDEFAULT . . . . BYTE ARRAY(3) DATA 350
109 0848H 548 HEXFILE. . . . . . STRUCTURE 244 275 300 350 354 392
315 0EBDH 1 I. . . . . . . . . BYTE 362 363 364 366 367 368
181 0EB8H 2 I. . . . . . . . . WORD 188 189 192 194 195
170 0EB6H 2 I. . . . . . . . . WORD 172 173 174 177
140 0EB4H 2 I. . . . . . . . . WORD 141 142 144 146 147 152 153 160
163 165 166
106 0000H 1 I. . . . . . . . . BYTE EXTERNAL(110)
308 03BDH 36 IFILESETUP . . . . PROCEDURE PUBLIC STACK=0020H
PL/M-86 COMPILER FILE AND I/O MODULE 10/5/81 PAGE 14
106 0000H 1 IFLEVEL. . . . . . BYTE EXTERNAL(103)
106 0000H 1 IFLIST . . . . . . BYTE EXTERNAL(74)
139 008BH 146 INBYTE . . . . . . PROCEDURE BYTE STACK=000EH 263 266
106 0000H 1 INCLUDEDEFAULT . . BYTE EXTERNAL(112) 423
109 0424H 1060 INCLUDEFILE. . . . STRUCTURE 266 272 297 310 311 312
106 0000H 1 INCLUDEON. . . . . BYTE EXTERNAL(102)
3 INDEXREGBIT. . . . LITERALLY
3 INDEXREGCOUNT. . . LITERALLY
8 0000H 2 INFO . . . . . . . WORD PARAMETER 9
5 0000H 2 INFO . . . . . . . WORD PARAMETER 6
265 0319H 12 ININCLUDEBYTE. . . PROCEDURE BYTE PUBLIC STACK=0012H
2 INIT . . . . . . . LITERALLY
105 0000H 1 INITIALS . . . . . BYTE ARRAY(1) EXTERNAL(40)
235 029BH 35 INPUTCLOSE . . . . PROCEDURE STACK=000EH 284 297
262 030DH 12 INSOURCEBYTE . . . PROCEDURE BYTE PUBLIC STACK=0012H
106 0000H 1 INTELHEXON . . . . BYTE EXTERNAL(96) 401 406
53 0000H INTERROGATEDISK. . PROCEDURE BYTE EXTERNAL(20) STACK=0000H 344
3 IREGBIT. . . . . . LITERALLY
3 IREGCOUNT. . . . . LITERALLY
LENGTH . . . . . . BUILTIN 142 146 153 189 201 288 361
106 0000H 2 LENGTH . . . . . . WORD MEMBER(OPERANDS)
106 0000H 2 LENGTH . . . . . . WORD MEMBER(CURRENTSYMBOL)
81 0000H LETTER . . . . . . PROCEDURE BYTE EXTERNAL(30) STACK=0000H 331
2 LF . . . . . . . . LITERALLY
2 LIT. . . . . . . . LITERALLY 2 3 4 109
LOW. . . . . . . . BUILTIN 203
109 0006H 3 LSTDEFAULT . . . . BYTE ARRAY(3) DATA 351
106 0000H 2 MACROPTR . . . . . WORD EXTERNAL(100)
105 0000H 1 MAKEERRTEXT. . . . BYTE ARRAY(1) EXTERNAL(49) 222
106 0000H 1 MAXCOL . . . . . . BYTE EXTERNAL(75)
5 0000H MON1 . . . . . . . PROCEDURE EXTERNAL(0) STACK=0000H
8 0000H MON2 . . . . . . . PROCEDURE BYTE EXTERNAL(1) STACK=0000H
96 0000H 1 N. . . . . . . . . BYTE PARAMETER 97
102 0000H 2 N. . . . . . . . . WORD PARAMETER 103
99 0000H 2 N. . . . . . . . . WORD PARAMETER 100
93 0000H 1 N. . . . . . . . . BYTE PARAMETER 94
75 0000H 1 N. . . . . . . . . BYTE PARAMETER 76
66 0000H 1 N. . . . . . . . . BYTE PARAMETER 67
63 0000H 2 N. . . . . . . . . WORD PARAMETER 64
106 0000H 1 NEXTCH . . . . . . BYTE EXTERNAL(90)
316 05E1H 43 NEXTCH . . . . . . PROCEDURE BYTE STACK=0002H 330 379 387
399
105 0000H 1 NO . . . . . . . . BYTE EXTERNAL(39)
106 0000H 1 NOERROR. . . . . . BYTE EXTERNAL(97)
315 0EBEH 1 NOLEFT . . . . . . BYTE 317 320 340 369 379 386 410 416
106 0000H 1 NOOPER . . . . . . BYTE EXTERNAL(106)
3 NOOVERCOUNT. . . . LITERALLY
3 NOOVERRIDEBIT. . . LITERALLY
109 NR . . . . . . . . LITERALLY 287
4 NULL . . . . . . . LITERALLY 123
109 NULLTYPE . . . . . LITERALLY 124
106 0006H 2 OFFSET . . . . . . WORD MEMBER(OPERANDS)
106 0006H 2 OFFSET . . . . . . WORD MEMBER(CURRENTSYMBOL)
105 0000H 1 OPENERRTEXT. . . . BYTE ARRAY(1) EXTERNAL(46) 212
32 0000H OPENFILE . . . . . PROCEDURE BYTE EXTERNAL(13) STACK=0000H 209
274 033DH 12 OPENHEX. . . . . . PROCEDURE PUBLIC STACK=0012H
271 0331H 12 OPENINCLUDE. . . . PROCEDURE PUBLIC STACK=0012H
PL/M-86 COMPILER FILE AND I/O MODULE 10/5/81 PAGE 15
199 01CCH 71 OPENINPUT. . . . . PROCEDURE STACK=000EH 269 272
214 0213H 72 OPENOUTPUT . . . . PROCEDURE STACK=000EH 275 278 281
277 0349H 12 OPENPRINT. . . . . PROCEDURE PUBLIC STACK=0012H
35 0000H OPENROFILE . . . . PROCEDURE BYTE EXTERNAL(14) STACK=0000H 205
268 0325H 12 OPENSOURCE . . . . PROCEDURE PUBLIC STACK=0012H 293
280 0355H 12 OPENSYMBOL . . . . PROCEDURE PUBLIC STACK=0012H
106 0000H 36 OPERANDS . . . . . STRUCTURE ARRAY(4) EXTERNAL(107)
3 OPERANDSTRUC . . . LITERALLY 106
180 0169H 99 OUTBYTE. . . . . . PROCEDURE STACK=0016H 229 244 255 260
242 02BEH 17 OUTHEXBYTE . . . . PROCEDURE PUBLIC STACK=001CH
246 02CFH 45 OUTPRINTBYTE . . . PROCEDURE PUBLIC STACK=001CH
225 025BH 64 OUTPUTCLOSE. . . . PROCEDURE STACK=001CH 300 303 306
258 02FCH 17 OUTSYMBOLBYTE. . . PROCEDURE PUBLIC STACK=001CH
69 0000H OUTTEXT. . . . . . PROCEDURE EXTERNAL(26) STACK=0000H
328 0004H 2 P. . . . . . . . . WORD PARAMETER AUTOMATIC 329 333 334 335
106 0000H 1 PAGESIZE . . . . . BYTE EXTERNAL(81)
105 0000H 1 PAGETEXT . . . . . BYTE ARRAY(1) EXTERNAL(41)
105 0000H 1 PARERRTEXT . . . . BYTE ARRAY(1) EXTERNAL(45)
106 0000H 1 PASS . . . . . . . BYTE EXTERNAL(55)
105 0000H 1 PASS0TEXT. . . . . BYTE ARRAY(1) EXTERNAL(53)
105 0000H 1 PASS1TEXT. . . . . BYTE ARRAY(1) EXTERNAL(54)
116 0006H 2 POINT. . . . . . . WORD PARAMETER AUTOMATIC 117 118 119
106 0000H 240 PREFIX . . . . . . BYTE ARRAY(240) EXTERNAL(85)
106 0000H 1 PREFIXPTR. . . . . BYTE EXTERNAL(86)
106 0000H 1 PRINTDEVICE. . . . BYTE EXTERNAL(78) 421
4 PRINTER. . . . . . LITERALLY 127
109 PRINTERTYPE. . . . LITERALLY 128
109 0A6CH 548 PRINTFILE. . . . . STRUCTURE 248 255 278 303 351 355 394
421
106 0000H 1 PRINTON. . . . . . BYTE EXTERNAL(72)
106 0000H 1 PRINTSWITCHOFF . . BYTE EXTERNAL(73)
2 PROC . . . . . . . LITERALLY 60 63 84 87 96 99 102
110 121 139 180 199 214 225 242 246 258
262 265 268 271 274 277 280 283 286 296
299 302 305 308 314 316
75 0000H 2 PT . . . . . . . . WORD PARAMETER 76
235 0004H 2 PTR. . . . . . . . WORD PARAMETER AUTOMATIC 236 237 238 239
225 0004H 2 PTR. . . . . . . . WORD PARAMETER AUTOMATIC 226 227 229 230
231 232
214 0004H 2 PTR. . . . . . . . WORD PARAMETER AUTOMATIC 215 216 218 219
220 221 222
199 0004H 2 PTR. . . . . . . . WORD PARAMETER AUTOMATIC 200 201 202 205
209 212
180 0004H 2 PTR. . . . . . . . WORD PARAMETER AUTOMATIC 181 182 188 191
194 195
169 0004H 2 PTR. . . . . . . . WORD PARAMETER AUTOMATIC 170 171 173 174
175 176
139 0004H 2 PTR. . . . . . . . WORD PARAMETER AUTOMATIC 140 141 145 147
148 152 156 165 166
17 0000H READCONSOLE. . . . PROCEDURE BYTE EXTERNAL(7) STACK=0000H
44 0000H READRECORD . . . . PROCEDURE BYTE EXTERNAL(17) STACK=0000H 148
2 REENT. . . . . . . LITERALLY
286 036DH 32 REWINDSOURCE . . . PROCEDURE PUBLIC STACK=0016H
93 0000H 2 S. . . . . . . . . WORD PARAMETER 94
66 0000H 2 S. . . . . . . . . WORD PARAMETER 67
109 S2 . . . . . . . . LITERALLY 292
106 0000H 12 SAVESOURCE . . . . BYTE ARRAY(12) EXTERNAL(77)
PL/M-86 COMPILER FILE AND I/O MODULE 10/5/81 PAGE 16
3 SEGMBIT. . . . . . LITERALLY
3 SEGMCOUNT. . . . . LITERALLY
106 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPERANDS)
106 0004H 2 SEGMENT. . . . . . WORD MEMBER(CURRENTSYMBOL)
3 SEGTYPEBIT . . . . LITERALLY
3 SEGTYPECOUNT . . . LITERALLY
29 0000H SELECTDISK . . . . PROCEDURE EXTERNAL(12) STACK=0000H 136 347
55 0000H SETDMAADDRESS. . . PROCEDURE EXTERNAL(21) STACK=0000H 147 174
238
106 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPERANDS)
106 0003H 1 SFLAG. . . . . . . BYTE MEMBER(CURRENTSYMBOL)
106 0000H 1 SIMFORM. . . . . . BYTE EXTERNAL(82)
106 0000H 80 SOURCEBUF. . . . . BYTE ARRAY(80) EXTERNAL(83)
109 0000H 1060 SOURCEFILE . . . . STRUCTURE 263 269 284 287 288 289 291
292 349 353 359 363 368 390 423 424
106 0000H 12 SOURCENAME . . . . BYTE ARRAY(12) EXTERNAL(76) 361 363 366
368
106 0000H 1 SOURCEPTR. . . . . BYTE EXTERNAL(84)
2 SPACE. . . . . . . LITERALLY 357 361 363 372 387
106 0000H 2 SSCIP. . . . . . . WORD EXTERNAL(62)
106 0000H 1 SSPEC. . . . . . . BYTE EXTERNAL(70)
2 STRUC. . . . . . . LITERALLY 106 109 117 140 170 181 200
215 226 236
106 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPERANDS)
106 0002H 1 STYPE. . . . . . . BYTE MEMBER(CURRENTSYMBOL)
105 0000H 1 SYMBFULLERRTEXT. . BYTE ARRAY(1) EXTERNAL(51)
106 0000H 1 SYMBOLDEVICE . . . BYTE EXTERNAL(79) 422
109 0C90H 548 SYMBOLFILE . . . . STRUCTURE 260 281 306 352 356 396 422
3 SYMBOLHEAD . . . . LITERALLY
3 SYMBOLSTRUC. . . . LITERALLY 106
106 0000H 2 SYMBTABADR . . . . WORD EXTERNAL(105)
109 0009H 3 SYMDEFAULT . . . . BYTE ARRAY(3) DATA 352
15 0000H SYSTEMRESET. . . . PROCEDURE EXTERNAL(6) STACK=0000H
69 0000H 2 T. . . . . . . . . WORD PARAMETER 70
2 TAB. . . . . . . . LITERALLY
13 0000H 1 TBUFF. . . . . . . BYTE ARRAY(1) EXTERNAL(4) 319 369
72 0000H 2 TEXTADR. . . . . . WORD PARAMETER 73
2 THENDO . . . . . . LITERALLY 133 142 148 150 189 203 216
227 248 289 317 331 345 357 372 374 384
387 397 399 404 424
106 0000H 30 TITLE. . . . . . . BYTE ARRAY(30) EXTERNAL(80)
106 0000H 4 TOKEN. . . . . . . STRUCTURE EXTERNAL(89)
2 TRUE . . . . . . . LITERALLY 343 381 401
106 0000H 1 TYPE . . . . . . . BYTE MEMBER(TOKEN)
3 TYPEBIT. . . . . . LITERALLY
60 0000H TYPECALC . . . . . PROCEDURE BYTE EXTERNAL(23) STACK=0000H
3 TYPECOUNT. . . . . LITERALLY
90 0000H UPPER. . . . . . . PROCEDURE BYTE EXTERNAL(33) STACK=0000H 330
387 399
105 0000H 1 USBREAKTEXT. . . . BYTE ARRAY(1) EXTERNAL(52)
105 0000H 1 USEFACTOR. . . . . BYTE ARRAY(1) EXTERNAL(43)
60 0000H 2 VAL. . . . . . . . WORD PARAMETER 61
4 VALIDDISK. . . . . LITERALLY 334
106 0002H 2 VALUE. . . . . . . WORD MEMBER(TOKEN)
27 0000H VERSION. . . . . . PROCEDURE WORD EXTERNAL(11) STACK=0000H 203
63 0000H WRDTEST. . . . . . PROCEDURE BYTE EXTERNAL(24) STACK=0000H
19 0000H WRITECONSOLE . . . PROCEDURE EXTERNAL(8) STACK=0000H 185 250
PL/M-86 COMPILER FILE AND I/O MODULE 10/5/81 PAGE 17
254
22 0000H WRITELIST. . . . . PROCEDURE EXTERNAL(9) STACK=0000H 186
47 0000H WRITERECORD. . . . PROCEDURE BYTE EXTERNAL(18) STACK=0000H 175
236 0000H 1060 X. . . . . . . . . STRUCTURE BASED(PTR) 237 238 239
226 0000H 548 X. . . . . . . . . STRUCTURE BASED(PTR) 227 229 231 232
215 0000H 548 X. . . . . . . . . STRUCTURE BASED(PTR) 216 218 219 220 221
222
200 0000H 1060 X. . . . . . . . . STRUCTURE BASED(PTR) 201 202 205 209 212
181 0000H 548 X. . . . . . . . . STRUCTURE BASED(PTR) 182 188 189 194 195
170 0000H 548 X. . . . . . . . . STRUCTURE BASED(PTR) 171 173 174 175 176
140 0000H 1060 X. . . . . . . . . STRUCTURE BASED(PTR) 141 142 145 146 147
148 152 153 156 165 166
117 0000H 548 X. . . . . . . . . STRUCTURE BASED(POINT) 118 119
105 0000H 1 YES. . . . . . . . BYTE EXTERNAL(38)
MODULE INFORMATION:
CODE AREA SIZE = 0650H 1616D
CONSTANT AREA SIZE = 000CH 12D
VARIABLE AREA SIZE = 0EC2H 3778D
MAXIMUM STACK SIZE = 0020H 32D
947 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,491 @@
$title('FILE AND I/O MODULE')
file:
do;
/*
modified 3/26/81 R. Silberstein
modified 3/28/81 R. Silberstein
modified 3/30/81 R. Silberstein
modified 4/7/81 R. Silberstein
modified 4/16/81 R. Silberstein
modified 6/16/81 R. Silberstein
modified 9/14/81 R. Silberstein
*/
/*
This is the modules to perform BYTE i/o to
the following 5 logical devices:
source - file
include - file
hex - file
symbol - file
print - file
Each of the logical files may be assigned to the
following physical devices :
null (not legal for source and include file)
console
printer (not legal for source and include file)
disk
The module defines the following set
of public subroutines:
INSOURCEBYTE - read 1 byte from source file
ININCLUDEBYTE - read 1 byte from include file
OUTHEXBYTE (ch) - write 1 byte to hex file
OUTSYMBOLBYTE (ch) - write 1 byte to symbol file
OUTPRINTBYTE (ch) - write 1 byte to print file
OPENSOURCE - open source file
OPENINCLUDE - open include file
OPENHEX - open hex file
OPENSYMBOL - open symbol file
OPENPRINT - open print file
REWINDSOURCE - rewind source file
CLOSESOURCE - close source file
CLOSEINCLUDE - close include file
CLOSEHEX - close hex file
CLOSESYMBOL - close symbol file
CLOSEPRINT - close print file
In addition, 2 subroutines to set up the correct
file names and routing to correct physical device
are included. These are:
FILESETUP
I$FILESETUP
The "filesetup" routine sets up the source, hex, symbol
and print files by scanning the user command tail of the
program activating line. The format of the command line
is described in the program format section of the user's
manual. The routine also initiates the global string array
"SOURCENAME" with the source file name, this array to be
used later by the printout module.
The "ifilesetup" sets up the format of the include file
given by the INCLUDE command of the assembler.
*/
$include (:f1:macro.lit)
$include (:f1:struc.lit)
$include (:f1:dev.lit)
$include (:f1:io.ext)
$include (:f1:subr1.ext)
$include (:f1:subr2.ext)
$INCLUDE (:F1:TEXT.EXT)
$include (:f1:global.ext)
dcl
diskunit byte,
nulltype lit '0', /* subroutine "devicetype" */
consoletype lit '1',
printertype lit '2',
disktype lit '3',
dr lit '0', /* drive code in fcb block */
fn lit '1', /* filename in fcb block */
ft lit '9', /* filetype in fcb block */
ex lit '12', /* file extension number */
s2 lit '14',
nr lit '32', /* file record number */
dollar lit '''$''',
asmdefault(3) byte data ('A86'), /* different file types */
hexdefault(3) byte data ('H86'),
lstdefault(3) byte data ('LST'),
symdefault(3) byte data ('SYM'),
sourcefile file$i$structure,
includefile file$i$structure,
hexfile file$o$structure,
printfile file$o$structure,
symbolfile file$o$structure;
clearfcb: proc(fcbpt,defaultpt);
dcl
(fcbpt,defaultpt) addr,
dest based fcbpt (1) byte;
CALL FILL (0, 33, FCBPT);
CALL FILL (' ', 8, FCBPT+FN);
call copy(3,defaultpt,.dest(ft));
end clearfcb;
clearcontrol: procedure(point,defaultptr);
dcl (point,defaultptr) addr,
x based point file$o$structure;
call clearfcb(.x.fcbblock,defaultptr);
x.disk=diskunit;
end clearcontrol;
devicetype: proc(ch) byte;
dcl ch byte;
if ch=null then return nulltype;
if ch=console then return consoletype;
if ch=printer then return printertype;
return disktype;
end devicetype;
disk$select: procedure(disk);
dcl disk byte;
if diskunit <> disk then$do
diskunit=disk;
call select$disk(diskunit);
end$if;
end disk$select;
inbyte: proc (ptr) byte;
dcl ptr addr,
x based ptr file$i$structure,
ch byte,
i addr;
i=x.bufptr;
if i=length(x.buffer) then$do
i=0;
call disk$select(x.disk);
do while i < length(x.buffer);
call SET$DMA$ADDRESS (.x.buffer(i));
IF (CH := READ$RECORD (.X.FCBBLOCK)) <> 0 THEN$DO
IF CH = 1 THEN$DO
X.BUFFER (I) = END$OF$FILE;
I = LENGTH (X.BUFFER);
ELSE$DO
CALL FILEABORT (.X, .DISKREADERRTEXT);
END$IF;
else$do
i=i+128;
end$if;
end$while;
i=0;
end$if;
ch=x.buffer(i);
x.bufptr=i+1;
return ch;
end inbyte;
FLUSHBUFFER: PROCEDURE (PTR);
DECLARE (PTR, I) ADDRESS, X BASED PTR FILE$O$STRUCTURE;
call disk$select(x.disk);
i=0;
do while i < x.bufptr;
call SET$DMA$ADDRESS (.x.buffer(i));
IF WRITE$RECORD (.X.FCBBLOCK) > 0 THEN
CALL FILEABORT (.X, .DISKWRITEERRTXT);
i=i+128;
end$while;
END FLUSHBUFFER;
outbyte: proc(ch,ptr);
dcl ch byte,
ptr addr,
x based ptr file$o$structure,
i addr;
do case devicetype(x.disk);
/* null */
do; end; /* do nothing */
/* console */
call write$console(ch);
/* printer */
call write$list(ch);
/* disk file */
do;
i=x.bufptr;
if i=length(x.buffer) then$do
CALL FLUSHBUFFER (PTR);
i=0;
end$if;
x.buffer(i)=ch;
x.bufptr=i+1;
end;
end$case;
end outbyte;
open$input: proc (ptr);
dcl ptr addr,
x based ptr file$i$structure;
x.bufptr=length(x.buffer);
call disk$select(x.disk);
IF LOW (VERSION) >= 30H THEN$DO
IF OPEN$RO$FILE (.X.FCBBLOCK) <> 0FFH THEN RETURN;
ELSE$DO
IF OPEN$FILE (.X.FCBBLOCK) <> 0FFH THEN RETURN;
END$IF;
CALL FILEABORT (.X, .OPENERRTEXT);
end open$input;
open$output: proc(ptr);
dcl ptr addr,
x based ptr file$o$structure;
if devicetype(x.disk)=disktype then$do
x.bufptr=0;
call disk$select(x.disk);
CALL delete$file(.x.fcbblock);
if create$file(.x.fcbblock) = 0ffh then
CALL FILEABORT (.X, .MAKEERRTEXT);
end$if;
end open$output;
outputclose: proc(ptr);
dcl ptr addr,
x based ptr file$o$structure;
if devicetype(x.disk)=disktype then$do
call outbyte(end$of$file,.x);
CALL FLUSHBUFFER (PTR);
IF CLOSE$FILE (.X.FCBBLOCK) = 0FFH THEN
CALL FILEABORT (.X, .CLOSEERRTEXT);
end$if;
end outputclose;
INPUT$CLOSE: PROCEDURE (PTR);
DECLARE PTR ADDRESS, X BASED PTR FILE$I$STRUCTURE;
CALL DISK$SELECT (X.DISK);
CALL SET$DMA$ADDRESS (.X.BUFFER);
IF CLOSE$FILE (.X.FCBBLOCK) THEN;
END INPUT$CLOSE;
outhexbyte: proc(ch) public;
dcl ch byte;
call outbyte(ch,.hex$file);
end outhexbyte;
outprintbyte: proc(ch) public;
dcl ch byte;
if printfile.disk=console then$do
call write$console(ch);
else$do
if error$printed then call write$console(ch);
call outbyte(ch,.printfile);
end$if;
end outprintbyte;
outsymbolbyte: proc(ch) public;
dcl ch byte;
call outbyte(ch,.symbolfile);
end outsymbolbyte;
insourcebyte: proc byte public;
return inbyte(.sourcefile);
end insourcebyte;
inincludebyte: proc byte public;
return inbyte(.includefile);
end inincludebyte;
opensource: proc public;
CALL open$input(.sourcefile);
end opensource;
openinclude: proc public;
CALL open$input(.includefile);
end openinclude;
openhex: proc public;
CALL open$output(.hexfile);
end openhex;
openprint: proc public;
CALL open$output(.printfile);
end openprint;
opensymbol: proc public;
CALL open$output(.symbolfile);
end opensymbol;
close$source: proc public;
call input$close (.source$file);
end close$source;
rewindsource: proc public;
sourcefile.fcbblock(nr)=0;
sourcefile.bufptr=length(sourcefile.buffer);
if sourcefile.fcbblock(ex) <> 0 then$do
sourcefile.fcbblock(ex)=0;
sourcefile.fcbblock(s2)=0;
CALL opensource;
end$if;
end rewindsource;
close$include: proc public;
call input$close (.include$file);
end close$include;
closehex: proc public;
call outputclose(.hexfile);
end closehex;
closeprint: proc public;
call outputclose(.printfile);
end closeprint;
closesymbol: proc public;
call outputclose(.symbolfile);
end closesymbol;
i$file$setup: proc(dev,filnam,filtyp) public;
dcl dev byte,(filnam,filtyp) addr;
call clearcontrol(.includefile,filtyp);
includefile.disk=dev;
call copy(8,filnam,.includefile.fcbblock(fn));
end i$file$setup;
filesetup: proc byte public;
dcl
ch byte, /* pick up character */
i byte, /* counter */
noleft byte, /* no of characters left in tbuff */
bpt byte, /* index of tbuff */
exitvalue byte, /* exitvalue of subroutine */
flag byte; /* program logic flag */
nextch: proc byte;
if noleft > 0 then$do
ch=tbuff(bpt);
noleft=noleft-1;
bpt=bpt+1;
else$do
ch=cr;
end$if;
return ch;
end nextch;
getdsk: procedure (p);
declare p address, dsk based p byte;
ch=upper(nextch); /* test selected disk drive */
if letter(ch) then$do
dsk=ch-'A';
if dsk > validdisk then
if dsk < console then
exitvalue = false; /* invalid drive */
else$do
exitvalue=false;
noleft=0;
end$if;
end getdsk;
exitvalue=true;
/* save current disk */
default$drive,diskunit=interrogate$disk;
/* enter user selected disk */
if fcb(dr) <> 0 then$do
call selectdisk(diskunit:=fcb(dr)-1);
end$if;
/* clear control blocks */
call clearcontrol(.sourcefile,.asmdefault);
call clearcontrol(.hexfile,.hexdefault);
call clearcontrol(.printfile,.lstdefault);
call clearcontrol(.symbolfile,.symdefault);
call copy(8,.fcb(fn),.sourcefile.fcbblock(fn));
call copy(8,.fcb(fn),.hexfile.fcbblock(fn));
call copy(8,.fcb(fn),.printfile.fcbblock(fn));
call copy(8,.fcb(fn),.symbolfile.fcbblock(fn));
if FCB (FT) <> SPACE then$do /* pick up specified source file type */
call copy(3,.fcb(ft),.sourcefile.fcbblock(ft));
end$if;
/* Move source file name to SOURCENAME */
CALL FILL (SPACE, LENGTH (SOURCENAME), .SOURCENAME);
i=0;
do while i<8 and (sourcename(i):=sourcefile.fcbblock(fn+i)) <> space;
i=i+1;
end$while;
sourcename(i)='.';
i=i+1;
call copy(3,.sourcefile.fcbblock(ft),.sourcename(i));
/* Test if file parameters */
noleft=tbuff(0);
bpt=1;
FLAG = FALSE;
IF FCB16 (1) <> SPACE THEN$DO
IF FCB16 (1) <> DOLLAR THEN$DO
EXITVALUE = FALSE;
ELSE$DO
DO WHILE (NOLEFT > 0) AND (NEXTCH <> DOLLAR);
END$WHILE;
FLAG = TRUE;
END$IF;
END$IF;
if flag then$do
/* file parameters present - pick them up */
do while noleft > 0;
if (ch:=upper(nextch)) <> space then$do
/* A-parameter */
IF CH = 'A' THEN call getdsk(.sourcefile.disk);
/* H-parameter */
ELSE IF CH = 'H' THEN call getdsk(.hexfile.disk);
/* P-parameter */
ELSE IF CH = 'P' THEN call getdsk(.printfile.disk);
/* S-parameter */
ELSE IF CH = 'S' THEN call getdsk(.symbolfile.disk);
/* F-parameter */
ELSE IF CH = 'F' THEN$DO
if (ch:=upper(nextch)) = 'I' then$do
intel$hex$on=true;
else$do
if ch= 'D' then$do
intel$hex$on=false;
else$do
exitvalue=false;
noleft=0;
endif;
endif;
END$IF;
/* error,no legal parameter */
ELSE
DO;
exitvalue=false;
noleft=0;
END$DO;
end$if;
end$while;
end$if;
printdevice=printfile.disk; /* set global printdevice flag */
SYMBOLDEVICE = SYMBOLFILE.DISK;
INCLUDE$DEFAULT = SOURCEFILE.DISK;
/* input must be from a disk file */
if devicetype(sourcefile.disk) <> disktype then$do
exitvalue=false;
end$if;
return exitvalue;
end filesetup;
end file;

View File

@@ -0,0 +1,113 @@
$nolist
/*
modified 3/28/81 R. Silberstein
modified 4/16/81 R. Silberstein
modified 7/24/81 R. Silberstein
modified 9/2/81 R. Silberstein
*/
dcl
pass byte external, /* current pass no, 1,2,3 */
/* address counters */
cip addr external, /* current instruction pointer */
csegtype byte external, /* current segment type, code,data,
stack or extra data */
csegvalue addr external, /* current segment value */
csegspec byte external, /* true if segment value specified */
escip addr external, /* current ES instruction pointer */
cscip addr external, /* current CS instruction pointer */
sscip addr external, /* current SS instruction pointer */
dscip addr external, /* current DS instruction pointer */
curcseg addr external, /* current code segment value */
curdseg addr external, /* current data segment value */
cursseg addr external, /* current stack segment value */
cureseg addr external, /* current extra segment value */
cspec byte external, /* true if code segm. value given */
dspec byte external, /* true if data segm. value given */
sspec byte external, /* true if stack segment given */
espec byte external, /* true if extra segment given */
/* print output parameters */
print$on byte external, /* on/off flag */
printswitchoff byte external, /* set/reset by NOLIST/LIST */
IFLIST BYTE EXTERNAL, /* SET/RESET BY IFLIST/NOIFLIST */
maxcol byte external, /* pagewidth */
sourcename (12) byte external, /* source file name */
savesource (12) byte external, /* source file during INLUDE file */
printdevice byte external, /* printfile device */
SYMBOLDEVICE BYTE EXTERNAL, /* SYMBOL FILE DEVICE */
title (30) byte external, /* user specified program title */
pagesize byte external, /* page size */
simform byte external, /* true if formfeed simulation */
sourcebuf (80) byte external, /* source input to be printed */
sourceptr byte external, /* source buffer pointer */
prefix (240) byte external, /* prefix to source line */
prefixptr byte external, /* pointer to prefix buffer */
ABSADDR (4) BYTE EXTERNAL, /* ABSOLUTE ADDRESS FIELD */
/* io error status */
errors addr external, /* counts no of errors */
/* scanner variables: */
token struc( /* actual token scanned */
type byte, /* token type, legal values :
reg - register
pseudo - pseudo code
string - text string
spec - special character
number - number
operator - aritmetic operator
ident - identifier */
descr byte, /* token description, legal values:
nil - no specification
byte - 8 bit type
word - 16 bit type
dword - 32 bit type */
value addr) external, /* token value */
nextch byte external, /* next input character */
acclen byte external, /* accumulator length */
accum(80) byte external, /* actual token scanned */
accumsave(80) byte external,
acclensave byte external,
eofset byte external, /* true if end-of-file found */
/* Mischellaneous variables: */
intel$hex$on byte external, /* true if INTEL hex format */
noerror byte external, /* codemacro decoding errorflag */
errorprinted byte external, /* true if an error is printed */
firstmacroptr address external, /* pointer at first codemacro */
macroptr address external, /* current pointer within macros */
fullsymbtab byte external, /* full if symboltable is full */
include$on byte external, /* true if INCLUDEfile input */
IFLEVEL BYTE EXTERNAL, /* IF-ENDIF NESTING LEVEL */
currentsymbol symbolstruc /* current scanned symbol */
external,
symbtabadr address external, /* pointer at symbol in table */
nooper byte external, /* no of instruction operands */
operands(4) operandstruc /* instruction operands,max 4 */
external,
codemacroptr address external, /* pointer to found codemacro */
help(5) byte external, /* ascii number scratch area */
i byte external, /* scratch variable */
default$drive byte external, /* default disk drive */
include$default byte external, /* default drive for include file */
codemacro$flag byte external; /* true if building a codemacro */
globalinit: procedure external; /* initiate some globals */
end globalinit;
$list

View File

@@ -0,0 +1,403 @@
PL/M-86 COMPILER GLOBAL VARIABLES 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE GLOBAL
OBJECT MODULE PLACED IN GLOBAL.OBJ
COMPILER INVOKED BY: :F0: GLOBAL.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100) XREF
$title ('GLOBAL VARIABLES')
1 global:
do;
/*
modified 3/28/81 R. Silberstein
modified 4/16/81 R. Silberstein
modified 4/20/81 R. Silberstein
modified 7/24/81 R. Silberstein
modified 9/2/81 R. Silberstein
*/
/*
This module defines all the global variables
of the assmembler.
*/
$include (:f1:macro.lit)
= $nolist
$include (:f1:struc.lit)
= $nolist
$INCLUDE (:F1:SUBR2.EXT)
= $nolist
40 1 dcl
/* dummy structure forces contiguous storage */
glob structure (
pass byte, /* current pass no, 1,2,3 */
/* address counters */
cip addr, /* current instruction pointer */
csegtype byte, /* current segment type, code,data,
stack or extra data */
csegvalue addr, /* current segment value */
csegspec byte, /* true if segment value specified */
escip addr, /* current ES instruction pointer */
cscip addr, /* current CS instruction pointer */
sscip addr, /* current SS instruction pointer */
dscip addr, /* current DS instruction pointer */
curcseg addr, /* current code segment value */
curdseg addr, /* current data segment value */
cursseg addr, /* current stack segment value */
cureseg addr, /* current extra segment value */
cspec byte, /* true if code segment value given */
dspec byte, /* true if data segment value given */
PL/M-86 COMPILER GLOBAL VARIABLES 10/5/81 PAGE 2
sspec byte, /* true if stack segment value given */
espec byte, /* true if extra segment value given */
/* print output parameters */
print$on byte, /* on/off flag */
printswitchoff byte, /* set/reset by NOLIST/LIST */
IFLIST BYTE, /* SET/RESET BY IFLIST/NOIFLIST */
maxcol byte); /* pagewidth */
41 1 dcl
sourcename (12) byte public, /* source file name */
sourcestop byte, /* used to contain zero */
savesource (12) byte public, /* source file during INLUDE file */
printdevice byte public, /* print file device */
SYMBOLDEVICE BYTE PUBLIC, /* SYMBOL FILE DEVICE */
title (30) byte public, /* user specified program title */
stoptitle byte, /* used to contain zero */
pagesize byte public, /* page size */
simform byte public, /* true if formfeed is to be simulated*/
sourcebuf (80) byte public, /* copy of source input to be printed*/
sourceptr byte public, /* source buffer pointer */
prefix (240) byte public, /* prefix to source line */
prefixptr byte public, /* pointer to prefix buffer */
ABSADDR (4) BYTE PUBLIC; /* ABSOLUTE ADDRESS FIELD */
/* references to glob structure */
42 1 dcl
pass byte public at(.glob.pass),
cip addr public at(.glob.cip),
csegtype byte public at(.glob.csegtype),
csegvalue addr public at(.glob.csegvalue),
csegspec byte public at(.glob.csegspec),
escip addr public at(.glob.escip),
cscip addr public at(.glob.cscip),
sscip addr public at(.glob.sscip),
dscip addr public at(.glob.dscip),
curcseg addr public at(.glob.curcseg),
curdseg addr public at(.glob.curdseg),
cursseg addr public at(.glob.cursseg),
cureseg addr public at(.glob.cureseg),
cspec byte public at(.glob.cspec),
dspec byte public at(.glob.dspec),
sspec byte public at(.glob.sspec),
espec byte public at(.glob.espec),
print$on byte public at(.glob.print$on),
printswitchoff byte public at(.glob.printswitchoff),
IFLIST BYTE PUBLIC AT (.GLOB.IFLIST),
maxcol byte public at(.glob.maxcol);
/* io error stpublic atus */
43 1 dcl
PL/M-86 COMPILER GLOBAL VARIABLES 10/5/81 PAGE 3
errors addr public, /* counts no of errors */
/* scanner variables: */
token struc( /* actual token scannes */
type byte, /* token type, legal values :
reg - register
pseudo - pseudo code
string - text string
spec - special character
number - number
operator - aritmetic operator
ident - identifier */
descr byte, /* token description, legal values :
nil - no specification
byte - 8 bit type
word - 16 bit type
dword - 32 bit type */
value addr) public, /* token value */
nextch byte public, /* next input character (lookahead) */
acclen byte public, /* accumulator length */
accum(80) byte public, /* actual token scanned */
accumsave(80) byte public, /* used to save accumulator */
acclensave byte public,
eofset byte public, /* true if end-of-file found */
/* Mischellaneous variables: */
intel$hex$on byte public, /* true if INTEL hex ouput format */
noerror byte public, /* errorflag in codemacro decoding */
errorprinted byte public, /* true if an error is printed */
firstmacroptr address public, /* pointer at first codemacro */
macroptr address public, /* current pointer within macros */
fullsymbtab byte public, /* true if symboltable is full */
include$on byte public, /* true if input from INCLUDE file */
IFLEVEL BYTE PUBLIC, /* IF-ENDIF NESTING LEVEL */
currentsymbol symbolstruc /* current scanned symbol */
public,
symbtabadr address public, /* pointer at symbol in table */
nooper byte public, /* no of instruction operands */
operands(4) operandstruc /* instruction operands,max 4 */
public,
codemacroptr address public, /* pointer to found codemacro */
help(5) byte public, /* scratch area for ascii numbers */
helpstop byte,
i byte public, /* scratch variable */
default$drive byte public, /* default disk drive */
include$default byte public, /* default disk for include files */
codemacro$flag byte public; /* true if building a codemacro */
44 1 globalinit: procedure public; /* initiate some global varaiables */
45 2 stoptitle,sourcestop,helpstop=0;
46 2 pagesize=66;
47 2 fullsymbtab,intel$hex$on=false;
48 2 CALL FILL (0, SIZE (TITLE), .TITLE);
PL/M-86 COMPILER GLOBAL VARIABLES 10/5/81 PAGE 4
49 2 codemacro$flag=false;
50 2 end globalinit;
51 1 end$module global;
PL/M-86 COMPILER GLOBAL VARIABLES 10/5/81 PAGE 5
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
41 01ABH 4 ABSADDR. . . . . . BYTE ARRAY(4) PUBLIC
43 01B0H 1 ACCLEN . . . . . . BYTE PUBLIC
43 0251H 1 ACCLENSAVE . . . . BYTE PUBLIC
43 01B1H 80 ACCUM. . . . . . . BYTE ARRAY(80) PUBLIC
43 0201H 80 ACCUMSAVE. . . . . BYTE ARRAY(80) PUBLIC
2 ADDR . . . . . . . LITERALLY 5 11 29 32 35 38 40
42 43
19 0000H ALPHANUMERIC . . . PROCEDURE BYTE EXTERNAL(5) STACK=0000H
22 0000H ASCIICHAR. . . . . PROCEDURE BYTE EXTERNAL(6) STACK=0000H
43 0008H 1 BASEINDEX. . . . . BYTE MEMBER(CURRENTSYMBOL)
43 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPERANDS)
3 BASEREGBIT . . . . LITERALLY
3 BASEREGCOUNT . . . LITERALLY
3 BREGBIT. . . . . . LITERALLY
3 BREGCOUNT. . . . . LITERALLY
16 0000H 1 CH . . . . . . . . BYTE PARAMETER 17
13 0000H 1 CH . . . . . . . . BYTE PARAMETER 14
25 0000H 1 CH . . . . . . . . BYTE PARAMETER 26
10 0000H 1 CH . . . . . . . . BYTE PARAMETER 11
19 0000H 1 CH . . . . . . . . BYTE PARAMETER 20
22 0000H 1 CH . . . . . . . . BYTE PARAMETER 23
40 0001H 2 CIP. . . . . . . . WORD MEMBER(GLOB) 42
42 000FH 2 CIP. . . . . . . . WORD PUBLIC AT
43 0290H 1 CODEMACROFLAG. . . BYTE PUBLIC 49
3 CODEMACROHEAD. . . LITERALLY
43 000CH 2 CODEMACROPTR . . . WORD PUBLIC
2 CR . . . . . . . . LITERALLY
42 0017H 2 CSCIP. . . . . . . WORD PUBLIC AT
40 0009H 2 CSCIP. . . . . . . WORD MEMBER(GLOB) 42
42 0014H 1 CSEGSPEC . . . . . BYTE PUBLIC AT
40 0006H 1 CSEGSPEC . . . . . BYTE MEMBER(GLOB) 42
42 0011H 1 CSEGTYPE . . . . . BYTE PUBLIC AT
40 0003H 1 CSEGTYPE . . . . . BYTE MEMBER(GLOB) 42
42 0012H 2 CSEGVALUE. . . . . WORD PUBLIC AT
40 0004H 2 CSEGVALUE. . . . . WORD MEMBER(GLOB) 42
42 0025H 1 CSPEC. . . . . . . BYTE PUBLIC AT
40 0017H 1 CSPEC. . . . . . . BYTE MEMBER(GLOB) 42
42 001DH 2 CURCSEG. . . . . . WORD PUBLIC AT
40 000FH 2 CURCSEG. . . . . . WORD MEMBER(GLOB) 42
42 001FH 2 CURDSEG. . . . . . WORD PUBLIC AT
40 0011H 2 CURDSEG. . . . . . WORD MEMBER(GLOB) 42
42 0023H 2 CURESEG. . . . . . WORD PUBLIC AT
40 0015H 2 CURESEG. . . . . . WORD MEMBER(GLOB) 42
43 0259H 9 CURRENTSYMBOL. . . STRUCTURE PUBLIC
40 0013H 2 CURSSEG. . . . . . WORD MEMBER(GLOB) 42
42 0021H 2 CURSSEG. . . . . . WORD PUBLIC AT
28 0000H 2 D. . . . . . . . . WORD PARAMETER 29
37 0000H 2 D. . . . . . . . . WORD PARAMETER 38
34 0000H 2 D. . . . . . . . . WORD PARAMETER 35
PL/M-86 COMPILER GLOBAL VARIABLES 10/5/81 PAGE 6
31 0000H 2 D. . . . . . . . . WORD PARAMETER 32
2 DCL. . . . . . . . LITERALLY
37 0000H DECOUT . . . . . . PROCEDURE EXTERNAL(11) STACK=0000H
43 028EH 1 DEFAULTDRIVE . . . BYTE PUBLIC
43 0001H 1 DESCR. . . . . . . BYTE MEMBER(TOKEN)
13 0000H DIGIT. . . . . . . PROCEDURE BYTE EXTERNAL(3) STACK=0000H
40 000DH 2 DSCIP. . . . . . . WORD MEMBER(GLOB) 42
42 001BH 2 DSCIP. . . . . . . WORD PUBLIC AT
40 0018H 1 DSPEC. . . . . . . BYTE MEMBER(GLOB) 42
42 0026H 1 DSPEC. . . . . . . BYTE PUBLIC AT
2 ELSEDO . . . . . . LITERALLY
2 ENDCASE. . . . . . LITERALLY
2 ENDDO. . . . . . . LITERALLY
2 ENDFOREVER . . . . LITERALLY
2 ENDIF. . . . . . . LITERALLY
2 ENDMODULE. . . . . LITERALLY
2 ENDOFFILE. . . . . LITERALLY
2 ENDPROC. . . . . . LITERALLY
2 ENDWHILE . . . . . LITERALLY
43 0252H 1 EOFSET . . . . . . BYTE PUBLIC
28 0000H EQUAL. . . . . . . PROCEDURE BYTE EXTERNAL(8) STACK=0000H
43 0255H 1 ERRORPRINTED . . . BYTE PUBLIC
43 0000H 2 ERRORS . . . . . . WORD PUBLIC
42 0015H 2 ESCIP. . . . . . . WORD PUBLIC AT
40 0007H 2 ESCIP. . . . . . . WORD MEMBER(GLOB) 42
42 0028H 1 ESPEC. . . . . . . BYTE PUBLIC AT
40 001AH 1 ESPEC. . . . . . . BYTE MEMBER(GLOB) 42
2 FALSE. . . . . . . LITERALLY 47 49
7 0000H 2 FCBADR . . . . . . WORD PARAMETER 8
7 0000H FILEABORT. . . . . PROCEDURE EXTERNAL(1) STACK=0000H
3 FILEISTRUCTURE . . LITERALLY
3 FILEOSTRUCTURE . . LITERALLY
10 0000H FILL . . . . . . . PROCEDURE EXTERNAL(2) STACK=0000H 48
43 0006H 2 FIRSTMACROPTR. . . WORD PUBLIC
2 FOREVER. . . . . . LITERALLY
2 FORMFEED . . . . . LITERALLY
43 0256H 1 FULLSYMBTAB. . . . BYTE PUBLIC 47
40 000EH 31 GLOB . . . . . . . STRUCTURE 42
1 0000H GLOBAL . . . . . . PROCEDURE STACK=0000H
44 0000H 44 GLOBALINIT . . . . PROCEDURE PUBLIC STACK=000AH
43 0287H 5 HELP . . . . . . . BYTE ARRAY(5) PUBLIC
43 028CH 1 HELPSTOP . . . . . BYTE 45
31 0000H HEX1OUT. . . . . . PROCEDURE EXTERNAL(9) STACK=0000H
34 0000H HEX2OUT. . . . . . PROCEDURE EXTERNAL(10) STACK=0000H
43 028DH 1 I. . . . . . . . . BYTE PUBLIC
43 0258H 1 IFLEVEL. . . . . . BYTE PUBLIC
42 002BH 1 IFLIST . . . . . . BYTE PUBLIC AT
40 001DH 1 IFLIST . . . . . . BYTE MEMBER(GLOB) 42
43 028FH 1 INCLUDEDEFAULT . . BYTE PUBLIC
43 0257H 1 INCLUDEON. . . . . BYTE PUBLIC
3 INDEXREGBIT. . . . LITERALLY
3 INDEXREGCOUNT. . . LITERALLY
2 INIT . . . . . . . LITERALLY
43 0253H 1 INTELHEXON . . . . BYTE PUBLIC 47
3 IREGBIT. . . . . . LITERALLY
3 IREGCOUNT. . . . . LITERALLY
43 0000H 2 LENGTH . . . . . . WORD MEMBER(OPERANDS)
PL/M-86 COMPILER GLOBAL VARIABLES 10/5/81 PAGE 7
43 0000H 2 LENGTH . . . . . . WORD MEMBER(CURRENTSYMBOL)
16 0000H LETTER . . . . . . PROCEDURE BYTE EXTERNAL(4) STACK=0000H
2 LF . . . . . . . . LITERALLY
2 LIT. . . . . . . . LITERALLY 2 3
43 0008H 2 MACROPTR . . . . . WORD PUBLIC
42 002CH 1 MAXCOL . . . . . . BYTE PUBLIC AT
40 001EH 1 MAXCOL . . . . . . BYTE MEMBER(GLOB) 42
10 0000H 1 N. . . . . . . . . BYTE PARAMETER 11
37 0000H 2 N. . . . . . . . . WORD PARAMETER 38
34 0000H 2 N. . . . . . . . . WORD PARAMETER 35
31 0000H 1 N. . . . . . . . . BYTE PARAMETER 32
28 0000H 1 N. . . . . . . . . BYTE PARAMETER 29
43 01AFH 1 NEXTCH . . . . . . BYTE PUBLIC
43 0254H 1 NOERROR. . . . . . BYTE PUBLIC
43 0262H 1 NOOPER . . . . . . BYTE PUBLIC
3 NOOVERCOUNT. . . . LITERALLY
3 NOOVERRIDEBIT. . . LITERALLY
43 0006H 2 OFFSET . . . . . . WORD MEMBER(CURRENTSYMBOL)
43 0006H 2 OFFSET . . . . . . WORD MEMBER(OPERANDS)
43 0263H 36 OPERANDS . . . . . STRUCTURE ARRAY(4) PUBLIC
3 OPERANDSTRUC . . . LITERALLY 43
4 0000H OUTTEXT. . . . . . PROCEDURE EXTERNAL(0) STACK=0000H
41 0067H 1 PAGESIZE . . . . . BYTE PUBLIC 46
42 000EH 1 PASS . . . . . . . BYTE PUBLIC AT
40 0000H 1 PASS . . . . . . . BYTE MEMBER(GLOB) 42
41 00BAH 240 PREFIX . . . . . . BYTE ARRAY(240) PUBLIC
41 01AAH 1 PREFIXPTR. . . . . BYTE PUBLIC
41 0046H 1 PRINTDEVICE. . . . BYTE PUBLIC
42 0029H 1 PRINTON. . . . . . BYTE PUBLIC AT
40 001BH 1 PRINTON. . . . . . BYTE MEMBER(GLOB) 42
42 002AH 1 PRINTSWITCHOFF . . BYTE PUBLIC AT
40 001CH 1 PRINTSWITCHOFF . . BYTE MEMBER(GLOB) 42
2 PROC . . . . . . . LITERALLY 19 22 31 34 37
10 0000H 2 PT . . . . . . . . WORD PARAMETER 11
2 REENT. . . . . . . LITERALLY
28 0000H 2 S. . . . . . . . . WORD PARAMETER 29
41 003AH 12 SAVESOURCE . . . . BYTE ARRAY(12) PUBLIC
3 SEGMBIT. . . . . . LITERALLY
3 SEGMCOUNT. . . . . LITERALLY
43 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPERANDS)
43 0004H 2 SEGMENT. . . . . . WORD MEMBER(CURRENTSYMBOL)
3 SEGTYPEBIT . . . . LITERALLY
3 SEGTYPECOUNT . . . LITERALLY
43 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPERANDS)
43 0003H 1 SFLAG. . . . . . . BYTE MEMBER(CURRENTSYMBOL)
41 0068H 1 SIMFORM. . . . . . BYTE PUBLIC
SIZE . . . . . . . BUILTIN 48
41 0069H 80 SOURCEBUF. . . . . BYTE ARRAY(80) PUBLIC
41 002DH 12 SOURCENAME . . . . BYTE ARRAY(12) PUBLIC
41 00B9H 1 SOURCEPTR. . . . . BYTE PUBLIC
41 0039H 1 SOURCESTOP . . . . BYTE 45
2 SPACE. . . . . . . LITERALLY
42 0019H 2 SSCIP. . . . . . . WORD PUBLIC AT
40 000BH 2 SSCIP. . . . . . . WORD MEMBER(GLOB) 42
42 0027H 1 SSPEC. . . . . . . BYTE PUBLIC AT
40 0019H 1 SSPEC. . . . . . . BYTE MEMBER(GLOB) 42
41 0066H 1 STOPTITLE. . . . . BYTE 45
PL/M-86 COMPILER GLOBAL VARIABLES 10/5/81 PAGE 8
2 STRUC. . . . . . . LITERALLY 43
43 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPERANDS)
43 0002H 1 STYPE. . . . . . . BYTE MEMBER(CURRENTSYMBOL)
41 0047H 1 SYMBOLDEVICE . . . BYTE PUBLIC
3 SYMBOLHEAD . . . . LITERALLY
3 SYMBOLSTRUC. . . . LITERALLY 43
43 000AH 2 SYMBTABADR . . . . WORD PUBLIC
4 0000H 2 T. . . . . . . . . WORD PARAMETER 5
2 TAB. . . . . . . . LITERALLY
7 0000H 2 TEXTADR. . . . . . WORD PARAMETER 8
2 THENDO . . . . . . LITERALLY
41 0048H 30 TITLE. . . . . . . BYTE ARRAY(30) PUBLIC 48
43 0002H 4 TOKEN. . . . . . . STRUCTURE PUBLIC
2 TRUE . . . . . . . LITERALLY
43 0000H 1 TYPE . . . . . . . BYTE MEMBER(TOKEN)
3 TYPEBIT. . . . . . LITERALLY
3 TYPECOUNT. . . . . LITERALLY
25 0000H UPPER. . . . . . . PROCEDURE BYTE EXTERNAL(7) STACK=0000H
43 0002H 2 VALUE. . . . . . . WORD MEMBER(TOKEN)
MODULE INFORMATION:
CODE AREA SIZE = 002CH 44D
CONSTANT AREA SIZE = 0000H 0D
VARIABLE AREA SIZE = 0291H 657D
MAXIMUM STACK SIZE = 000AH 10D
339 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,167 @@
$title ('GLOBAL VARIABLES')
global:
do;
/*
modified 3/28/81 R. Silberstein
modified 4/16/81 R. Silberstein
modified 4/20/81 R. Silberstein
modified 7/24/81 R. Silberstein
modified 9/2/81 R. Silberstein
*/
/*
This module defines all the global variables
of the assmembler.
*/
$include (:f1:macro.lit)
$include (:f1:struc.lit)
$INCLUDE (:F1:SUBR2.EXT)
dcl
/* dummy structure forces contiguous storage */
glob structure (
pass byte, /* current pass no, 1,2,3 */
/* address counters */
cip addr, /* current instruction pointer */
csegtype byte, /* current segment type, code,data,
stack or extra data */
csegvalue addr, /* current segment value */
csegspec byte, /* true if segment value specified */
escip addr, /* current ES instruction pointer */
cscip addr, /* current CS instruction pointer */
sscip addr, /* current SS instruction pointer */
dscip addr, /* current DS instruction pointer */
curcseg addr, /* current code segment value */
curdseg addr, /* current data segment value */
cursseg addr, /* current stack segment value */
cureseg addr, /* current extra segment value */
cspec byte, /* true if code segment value given */
dspec byte, /* true if data segment value given */
sspec byte, /* true if stack segment value given */
espec byte, /* true if extra segment value given */
/* print output parameters */
print$on byte, /* on/off flag */
printswitchoff byte, /* set/reset by NOLIST/LIST */
IFLIST BYTE, /* SET/RESET BY IFLIST/NOIFLIST */
maxcol byte); /* pagewidth */
dcl
sourcename (12) byte public, /* source file name */
sourcestop byte, /* used to contain zero */
savesource (12) byte public, /* source file during INLUDE file */
printdevice byte public, /* print file device */
SYMBOLDEVICE BYTE PUBLIC, /* SYMBOL FILE DEVICE */
title (30) byte public, /* user specified program title */
stoptitle byte, /* used to contain zero */
pagesize byte public, /* page size */
simform byte public, /* true if formfeed is to be simulated*/
sourcebuf (80) byte public, /* copy of source input to be printed*/
sourceptr byte public, /* source buffer pointer */
prefix (240) byte public, /* prefix to source line */
prefixptr byte public, /* pointer to prefix buffer */
ABSADDR (4) BYTE PUBLIC; /* ABSOLUTE ADDRESS FIELD */
/* references to glob structure */
dcl
pass byte public at(.glob.pass),
cip addr public at(.glob.cip),
csegtype byte public at(.glob.csegtype),
csegvalue addr public at(.glob.csegvalue),
csegspec byte public at(.glob.csegspec),
escip addr public at(.glob.escip),
cscip addr public at(.glob.cscip),
sscip addr public at(.glob.sscip),
dscip addr public at(.glob.dscip),
curcseg addr public at(.glob.curcseg),
curdseg addr public at(.glob.curdseg),
cursseg addr public at(.glob.cursseg),
cureseg addr public at(.glob.cureseg),
cspec byte public at(.glob.cspec),
dspec byte public at(.glob.dspec),
sspec byte public at(.glob.sspec),
espec byte public at(.glob.espec),
print$on byte public at(.glob.print$on),
printswitchoff byte public at(.glob.printswitchoff),
IFLIST BYTE PUBLIC AT (.GLOB.IFLIST),
maxcol byte public at(.glob.maxcol);
/* io error stpublic atus */
dcl
errors addr public, /* counts no of errors */
/* scanner variables: */
token struc( /* actual token scannes */
type byte, /* token type, legal values :
reg - register
pseudo - pseudo code
string - text string
spec - special character
number - number
operator - aritmetic operator
ident - identifier */
descr byte, /* token description, legal values :
nil - no specification
byte - 8 bit type
word - 16 bit type
dword - 32 bit type */
value addr) public, /* token value */
nextch byte public, /* next input character (lookahead) */
acclen byte public, /* accumulator length */
accum(80) byte public, /* actual token scanned */
accumsave(80) byte public, /* used to save accumulator */
acclensave byte public,
eofset byte public, /* true if end-of-file found */
/* Mischellaneous variables: */
intel$hex$on byte public, /* true if INTEL hex ouput format */
noerror byte public, /* errorflag in codemacro decoding */
errorprinted byte public, /* true if an error is printed */
firstmacroptr address public, /* pointer at first codemacro */
macroptr address public, /* current pointer within macros */
fullsymbtab byte public, /* true if symboltable is full */
include$on byte public, /* true if input from INCLUDE file */
IFLEVEL BYTE PUBLIC, /* IF-ENDIF NESTING LEVEL */
currentsymbol symbolstruc /* current scanned symbol */
public,
symbtabadr address public, /* pointer at symbol in table */
nooper byte public, /* no of instruction operands */
operands(4) operandstruc /* instruction operands,max 4 */
public,
codemacroptr address public, /* pointer to found codemacro */
help(5) byte public, /* scratch area for ascii numbers */
helpstop byte,
i byte public, /* scratch variable */
default$drive byte public, /* default disk drive */
include$default byte public, /* default disk for include files */
codemacro$flag byte public; /* true if building a codemacro */
globalinit: procedure public; /* initiate some global varaiables */
stoptitle,sourcestop,helpstop=0;
pagesize=66;
fullsymbtab,intel$hex$on=false;
CALL FILL (0, SIZE (TITLE), .TITLE);
codemacro$flag=false;
end globalinit;
end$module global;

View File

@@ -0,0 +1,6 @@
$nolist
instruction: proc external;
end instruction;
$list

View File

@@ -0,0 +1,587 @@
PL/M-86 COMPILER INSTRUCTION MODULE 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE INSTRUC
OBJECT MODULE PLACED IN INSTR.OBJ
COMPILER INVOKED BY: :F0: INSTR.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100) XREF
$title ('INSTRUCTION MODULE')
1 instruc:
do;
/*
This is the module to decode and produce code-
output of a single instruction, possibly preceded
by a number of PREFIX-instructions.
*/
$include (:f1:macro.lit)
= $nolist
$include (:f1:struc.lit)
= $nolist
$include (:f1:cmacd.lit)
= $nolist
$include (:f1:equals.lit)
= $nolist
$include (:f1:ermod.lit)
= $nolist
$include (:f1:subr1.ext)
= $nolist
$include (:f1:expr.ext)
= $nolist
$include (:f1:symb.ext)
= $nolist
$include (:f1:scan.ext)
= $nolist
$include (:f1:ermod.ext)
= $nolist
$include (:f1:cmsubr.ext)
= $nolist
$include (:f1:instr.x86)
= $nolist
PL/M-86 COMPILER INSTRUCTION MODULE 10/5/81 PAGE 2
$eject
120 1 dcl /* global variables */
bytevar based macroptr byte, /* byte within codemacro */
comtab(12) byte data /* legal codemacro commands */
(mdbn,mdbf,mdwn,mdwf,mddf,mrelb,mrelw,mmodrm1,mmodrm2,msegfix,
mnosegfix,mdbit);
PL/M-86 COMPILER INSTRUCTION MODULE 10/5/81 PAGE 3
$eject
/* generate instruction output code */
121 1 makecode: proc byte;
122 2 if (noerror:=searchformatch) then$do
/* matching operands, comput code */
124 3 do while (bytevar <> mendm) and noerror;
125 4 do case commandtype(bytevar,length(comtab),.comtab);
126 5 call mDBNrout;
127 5 call mDBFrout;
128 5 call mDWNrout;
129 5 call mDWFrout; /* typed during earthquake */
130 5 call mDDFrout;
131 5 call mRELBrout;
132 5 call mRELWrout;
133 5 call mMODRM1rout;
134 5 call mMODRM2rout;
135 5 call mSEGFIXrout;
136 5 call mNOSEGFIXrout;
137 5 call mDBITrout;
138 5 do; end; /* dummy, should not happen */
140 5 end$case;
141 4 end$while;
142 3 end$if;
143 2 if noerror then call emit; else call emitdummies;
146 2 return noerror;
147 2 end makecode;
/* scan all PREFIX instructions */
148 1 prefixscan: proc byte;
/* compute address of first codemacro */
149 2 findmacroaddr: proc;
150 3 dcl macrop based codemacroptr address;
151 3 firstmacroptr=macrop;
152 3 end findmacroaddr;
/* test if instruction is of PREFIX type */
153 2 prefixinstr: proc byte;
154 3 dcl ptr address,flag based ptr byte;
155 3 ptr=firstmacroptr+2;
156 3 return ((flag and prefix$on) <> 0);
157 3 end prefixinstr;
158 2 call findmacroaddr; /* compute pointer to first macro */
159 2 do while prefixinstr;
160 3 if makecode then; /* generate output code,always succed */
162 3 call clearcmindex;
163 3 if findcodemacro(acclen,.accum(0),.codemacroptr) then$do
165 4 call scan;
166 4 call findmacroaddr;
167 4 else$do
169 4 call errmsg(missinstr); /* missing instruction */
170 4 call skip$rest$of$line;
171 4 return false;
172 4 end$if;
173 3 end$while;
174 2 return true;
PL/M-86 COMPILER INSTRUCTION MODULE 10/5/81 PAGE 4
175 2 end prefixscan;
/* get all instruction operands */
176 1 getoperands: proc byte;
177 2 dcl moreoperands byte,pt address,oper based pt operandstruc,
exitvalue byte;
178 2 exitvalue=true;
179 2 nooper=0; /* clear no of operands */
180 2 moreoperands=not emptyline;
181 2 do while moreoperands;
182 3 moreoperands=false;
183 3 pt=.operands(nooper);
184 3 if not operand then$do
186 4 if oper.stype <> udefsymb then call errmsg(illioper);
188 4 exitvalue=false;
189 4 if skip$until(',') then moreoperands=true;
else$do
193 4 if specialtoken(',') then$do
195 5 call scan; /* skip "," */
196 5 if nooper < 3 then moreoperands=true;
end$if;
end$if;
200 3 nooper=nooper+1;
201 3 end$while;
202 2 return exitvalue;
203 2 end getoperands;
/* test if operands contain enough type information */
204 1 enough$type$info: proc byte;
205 2 dcl pt address,oper based pt operandstruc,(i,flag) byte;
206 2 flag=true;
207 2 i=0ffh;
208 2 do while (i:=i+1) < nooper;
209 3 pt=.operands(i);
210 3 if oper.stype=variable then$do
212 4 if (oper.sflag and typebit) = 0 then flag=false;
end$if;
end$while;
216 2 if flag then return true;
218 2 i=0ffh; /* one of operands lacks type info,check others */
219 2 do while (i:=i+1) < nooper;
220 3 pt=.operands(i);
221 3 if (oper.sflag and typebit) <> 0 then return true;
223 3 if (oper.stype=number) and (wrdtest(oper.offset)) then return true;
end$while;
226 2 return false;
227 2 end enough$type$info;
/* Module entry point: */
228 1 instruction: proc public; /* decode line in pass 1 and pass 2 */
229 2 call clearcmindex; /* clear buffer for output codes */
230 2 if prefixscan then$do
232 3 if getoperands then$do
PL/M-86 COMPILER INSTRUCTION MODULE 10/5/81 PAGE 5
234 4 if enough$type$info then$do
236 5 if makecode then$do
238 6 if not emptyline then$do
240 7 call errmsg(end$of$line$err);
241 7 end$if;
else$do
244 6 call errmsg(opmismatch);
245 6 end$if;
246 5 else$do
248 5 call errmsg(misstypeinfo);
249 5 call emitdummies;
250 5 end$if;
251 4 else$do
253 4 if makecode then; /* try to make code with bad operands */
end$if;
256 3 end$if;
257 2 call skip$rest$of$line;
258 2 end instruction;
259 1 end$module instruc;
PL/M-86 COMPILER INSTRUCTION MODULE 10/5/81 PAGE 6
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
119 0000H 1 ACCLEN . . . . . . BYTE EXTERNAL(43) 163
119 0000H 80 ACCUM. . . . . . . BYTE ARRAY(80) EXTERNAL(44) 163
2 ADDR . . . . . . . LITERALLY 19 22 25 37 38 44 47
50 53 56 59 62 65 119 177 205
64 0000H 2 ASCIIPTR . . . . . WORD PARAMETER 65
119 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPERANDS)
205 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPER)
177 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPER)
3 BASEREGBIT . . . . LITERALLY
3 BASEREGCOUNT . . . LITERALLY
3 BREGBIT. . . . . . LITERALLY
3 BREGCOUNT. . . . . LITERALLY
13 BYT. . . . . . . . LITERALLY
120 0000H 1 BYTEVAR. . . . . . BYTE BASED(MACROPTR) 124 125
84 0000H CLEARCMINDEX . . . PROCEDURE EXTERNAL(26) STACK=0000H 162 229
12 CODE . . . . . . . LITERALLY
17 CODEMACROERR . . . LITERALLY
3 CODEMACROHEAD. . . LITERALLY
119 0000H 2 CODEMACROPTR . . . WORD EXTERNAL(50) 150 151 163
90 0000H COMMANDTYPE. . . . PROCEDURE BYTE EXTERNAL(29) STACK=0000H 125
90 0000H 1 COMNO. . . . . . . BYTE PARAMETER 91
120 0000H 12 COMTAB . . . . . . BYTE ARRAY(12) DATA 125
24 0000H COPY . . . . . . . PROCEDURE EXTERNAL(2) STACK=0000H
2 CR . . . . . . . . LITERALLY
7 CSOVER . . . . . . LITERALLY
24 0000H 2 D. . . . . . . . . WORD PARAMETER 25
2 DCL. . . . . . . . LITERALLY
12 DELETEDSYMB. . . . LITERALLY
52 0000H 2 DEST . . . . . . . WORD PARAMETER 53
12 DOUBLEDEFINED. . . LITERALLY
17 DOUBLEDEFLAB . . . LITERALLY
17 DOUBLEDEFSYMB. . . LITERALLY
17 DOUBLEDEFVAR . . . LITERALLY
11 DOUBLERANGE. . . . LITERALLY
7 DSOVER . . . . . . LITERALLY
13 DWRD . . . . . . . LITERALLY
2 ELSEDO . . . . . . LITERALLY 190 241
86 0000H EMIT . . . . . . . PROCEDURE EXTERNAL(27) STACK=0000H 144
88 0000H EMITDUMMIES. . . . PROCEDURE EXTERNAL(28) STACK=0000H 145 249
79 0000H EMPTYLINE. . . . . PROCEDURE BYTE EXTERNAL(24) STACK=0000H 180
238
2 ENDCASE. . . . . . LITERALLY
2 ENDDO. . . . . . . LITERALLY
2 ENDFOREVER . . . . LITERALLY
2 ENDIF. . . . . . . LITERALLY 197 198 213 254
2 ENDMODULE. . . . . LITERALLY
2 ENDOFFILE. . . . . LITERALLY
17 ENDOFLINEERR . . . LITERALLY 240
38 0000H 2 ENDOFSYMBTAB . . . WORD EXTERNAL(8)
PL/M-86 COMPILER INSTRUCTION MODULE 10/5/81 PAGE 7
2 ENDPROC. . . . . . LITERALLY
2 ENDWHILE . . . . . LITERALLY 214 224
204 0186H 143 ENOUGHTYPEINFO . . PROCEDURE BYTE STACK=0008H 234
55 0000H ENTERATTRIBUTES. . PROCEDURE EXTERNAL(15) STACK=0000H
81 0000H ERRMSG . . . . . . PROCEDURE EXTERNAL(25) STACK=0000H 169 187
240 244 248
81 0000H 1 ERRNO. . . . . . . BYTE PARAMETER 82
12 ERROR. . . . . . . LITERALLY
7 ESOVER . . . . . . LITERALLY
177 0007H 1 EXITVALUE. . . . . BYTE 178 188 202
31 0000H EXPRESSION . . . . PROCEDURE BYTE EXTERNAL(5) STACK=0000H
2 FALSE. . . . . . . LITERALLY 171 182 188 213 226
3 FILEISTRUCTURE . . LITERALLY
3 FILEOSTRUCTURE . . LITERALLY
17 FILESYNTERR. . . . LITERALLY
58 0000H FINDCODEMACRO. . . PROCEDURE BYTE EXTERNAL(16) STACK=0000H 163
149 00E0H 14 FINDMACROADDR. . . PROCEDURE STACK=0002H 158 166
49 0000H FINDSYMBOL . . . . PROCEDURE BYTE EXTERNAL(13) STACK=0000H
17 FIRSTITEM. . . . . LITERALLY
119 0000H 2 FIRSTMACROPTR. . . WORD EXTERNAL(46) 151 155
205 0009H 1 FLAG . . . . . . . BYTE 206 213 216
154 0000H 1 FLAG . . . . . . . BYTE BASED(PTR) 156
2 FOREVER. . . . . . LITERALLY
2 FORMFEED . . . . . LITERALLY
37 0000H 2 FREEPT . . . . . . WORD EXTERNAL(7)
52 0000H GETATTRIBUTES. . . PROCEDURE EXTERNAL(14) STACK=0000H
176 0109H 125 GETOPERANDS. . . . PROCEDURE BYTE STACK=0006H 232
205 0008H 1 I. . . . . . . . . BYTE 207 208 209 218 219 220
12 IDENT. . . . . . . LITERALLY
17 IFPARERR . . . . . LITERALLY
17 ILLEGALMACRO . . . LITERALLY
17 ILLEGALPSEUDO. . . LITERALLY
17 ILLEXPRELEM. . . . LITERALLY
17 ILLIOPER . . . . . LITERALLY 187
3 INDEXREGBIT. . . . LITERALLY
3 INDEXREGCOUNT. . . LITERALLY
2 INIT . . . . . . . LITERALLY
17 INSTRERR . . . . . LITERALLY
1 0000H INSTRUC. . . . . . PROCEDURE STACK=0000H
228 0215H 74 INSTRUCTION. . . . PROCEDURE PUBLIC STACK=0012H
3 IREGBIT. . . . . . LITERALLY
3 IREGCOUNT. . . . . LITERALLY
12 LAB. . . . . . . . LITERALLY
17 LABOUTOFRANGE. . . LITERALLY
16 LEFTBRACKET. . . . LITERALLY
205 0000H 2 LENGTH . . . . . . WORD MEMBER(OPER)
LENGTH . . . . . . BUILTIN 125
119 0000H 2 LENGTH . . . . . . WORD MEMBER(OPERANDS)
177 0000H 2 LENGTH . . . . . . WORD MEMBER(OPER)
2 LF . . . . . . . . LITERALLY
90 0000H 1 LG . . . . . . . . BYTE PARAMETER 91
46 0000H 1 LG . . . . . . . . BYTE PARAMETER 47
43 0000H 1 LG . . . . . . . . BYTE PARAMETER 44
64 0000H 1 LG . . . . . . . . BYTE PARAMETER 65
58 0000H 1 LG . . . . . . . . BYTE PARAMETER 59
49 0000H 1 LG . . . . . . . . BYTE PARAMETER 50
61 0000H 1 LG . . . . . . . . BYTE PARAMETER 62
PL/M-86 COMPILER INSTRUCTION MODULE 10/5/81 PAGE 8
2 LIT. . . . . . . . LITERALLY 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16 17
46 0000H 2 MACDEFPT . . . . . WORD PARAMETER 47
150 0000H 2 MACROP . . . . . . WORD BASED(CODEMACROPTR) 151
119 0000H 2 MACROPTR . . . . . WORD EXTERNAL(47) 120 124 125
121 0000H 162 MAKECODE . . . . . PROCEDURE BYTE STACK=000AH 160 236 253
4 MDBF . . . . . . . LITERALLY 120
95 0000H MDBFROUT . . . . . PROCEDURE EXTERNAL(31) STACK=0000H 127
4 MDBIT. . . . . . . LITERALLY 120
115 0000H MDBITROUT. . . . . PROCEDURE EXTERNAL(41) STACK=0000H 137
4 MDBN . . . . . . . LITERALLY 120
93 0000H MDBNROUT . . . . . PROCEDURE EXTERNAL(30) STACK=0000H 126
4 MDDF . . . . . . . LITERALLY 120
101 0000H MDDFROUT . . . . . PROCEDURE EXTERNAL(34) STACK=0000H 130
4 MDWF . . . . . . . LITERALLY 120
99 0000H MDWFROUT . . . . . PROCEDURE EXTERNAL(33) STACK=0000H 129
4 MDWN . . . . . . . LITERALLY 120
97 0000H MDWNROUT . . . . . PROCEDURE EXTERNAL(32) STACK=0000H 128
4 MENDBIT. . . . . . LITERALLY
4 MENDM. . . . . . . LITERALLY 124
4 MFORMALBITS. . . . LITERALLY
17 MISSIFERR. . . . . LITERALLY
17 MISSINGPSEUDO. . . LITERALLY
17 MISSINSTR. . . . . LITERALLY 169
17 MISSSEGMINFO . . . LITERALLY
17 MISSTYPEINFO . . . LITERALLY 248
4 MMODRM1. . . . . . LITERALLY 120
111 0000H MMODRM1ROUT. . . . PROCEDURE EXTERNAL(39) STACK=0000H 133
4 MMODRM2. . . . . . LITERALLY 120
113 0000H MMODRM2ROUT. . . . PROCEDURE EXTERNAL(40) STACK=0000H 134
4 MNOSEGFIX. . . . . LITERALLY 120
107 0000H MNOSEGFIXROUT. . . PROCEDURE EXTERNAL(37) STACK=0000H 136
4 MNUMBERBITS. . . . LITERALLY
6 MODB . . . . . . . LITERALLY
6 MODD . . . . . . . LITERALLY
10 MODLETTERBIT . . . LITERALLY
10 MODLETTERCOUNT . . LITERALLY
6 MODSB. . . . . . . LITERALLY
6 MODW . . . . . . . LITERALLY
177 0006H 1 MOREOPERANDS . . . BYTE 180 181 182 190 197
4 MRELB. . . . . . . LITERALLY 120
103 0000H MRELBROUT. . . . . PROCEDURE EXTERNAL(35) STACK=0000H 131
4 MRELW. . . . . . . LITERALLY 120
105 0000H MRELWROUT. . . . . PROCEDURE EXTERNAL(36) STACK=0000H 132
4 MSEGFIX. . . . . . LITERALLY 120
109 0000H MSEGFIXROUT. . . . PROCEDURE EXTERNAL(38) STACK=0000H 135
24 0000H 1 N. . . . . . . . . BYTE PARAMETER 25
21 0000H 2 N. . . . . . . . . WORD PARAMETER 22
12 NEGLECTED. . . . . LITERALLY
17 NEGLECTERR . . . . LITERALLY
17 NESTEDIFERR. . . . LITERALLY
17 NESTEDINCLUDEERR . LITERALLY
61 0000H NEWCMBODY. . . . . PROCEDURE BYTE EXTERNAL(17) STACK=0000H
64 0000H NEWCMNAME. . . . . PROCEDURE BYTE EXTERNAL(18) STACK=0000H
46 0000H NEWMACRO . . . . . PROCEDURE BYTE EXTERNAL(12) STACK=0000H
43 0000H NEWSYMBOL. . . . . PROCEDURE BYTE EXTERNAL(11) STACK=0000H
13 NIL. . . . . . . . LITERALLY
PL/M-86 COMPILER INSTRUCTION MODULE 10/5/81 PAGE 9
119 0000H 1 NOERROR. . . . . . BYTE EXTERNAL(45) 122 124 143 146
34 0000H NOFORWARDEXPR. . . PROCEDURE BYTE EXTERNAL(6) STACK=0000H
29 0000H NOFORWARDOPER. . . PROCEDURE BYTE EXTERNAL(4) STACK=0000H
6 NOMOD. . . . . . . LITERALLY
119 0000H 1 NOOPER . . . . . . BYTE EXTERNAL(48) 179 183 196 200 208
219
3 NOOVERCOUNT. . . . LITERALLY
3 NOOVERRIDEBIT. . . LITERALLY
8 NOPARAND . . . . . LITERALLY
11 NORANGE. . . . . . LITERALLY
12 NUMBER . . . . . . LITERALLY 223
11 NUMBERRANGE. . . . LITERALLY
16 OAND . . . . . . . LITERALLY
16 OEQ. . . . . . . . LITERALLY
177 0006H 2 OFFSET . . . . . . WORD MEMBER(OPER)
119 0006H 2 OFFSET . . . . . . WORD MEMBER(OPERANDS)
205 0006H 2 OFFSET . . . . . . WORD MEMBER(OPER) 223
16 OGE. . . . . . . . LITERALLY
16 OGT. . . . . . . . LITERALLY
16 OLAST. . . . . . . LITERALLY
16 OLE. . . . . . . . LITERALLY
16 OLENGTH. . . . . . LITERALLY
16 OLT. . . . . . . . LITERALLY
16 OMOD . . . . . . . LITERALLY
16 ONE. . . . . . . . LITERALLY
16 ONOT . . . . . . . LITERALLY
16 OOFFSET. . . . . . LITERALLY
16 OOR. . . . . . . . LITERALLY
177 0000H 9 OPER . . . . . . . STRUCTURE BASED(PT) 186
205 0000H 9 OPER . . . . . . . STRUCTURE BASED(PT) 210 212 221 223
27 0000H OPERAND. . . . . . PROCEDURE BYTE EXTERNAL(3) STACK=0000H 184
119 0000H 36 OPERANDS . . . . . STRUCTURE ARRAY(4) EXTERNAL(49) 183 209
220
3 OPERANDSTRUC . . . LITERALLY 119 177 205
12 OPERATOR . . . . . LITERALLY
17 OPMISMATCH . . . . LITERALLY 244
16 OPTR . . . . . . . LITERALLY
16 OSEG . . . . . . . LITERALLY
16 OSHL . . . . . . . LITERALLY
16 OSHORT . . . . . . LITERALLY
16 OSHR . . . . . . . LITERALLY
16 OTYPE. . . . . . . LITERALLY
16 OXOR . . . . . . . LITERALLY
15 PCODEMACRO . . . . LITERALLY
15 PCSEG. . . . . . . LITERALLY
15 PDB. . . . . . . . LITERALLY
15 PDBIT. . . . . . . LITERALLY
15 PDD. . . . . . . . LITERALLY
15 PDSEG. . . . . . . LITERALLY
15 PDW. . . . . . . . LITERALLY
15 PEJECT . . . . . . LITERALLY
15 PEND . . . . . . . LITERALLY
15 PENDIF . . . . . . LITERALLY
15 PENDM. . . . . . . LITERALLY
15 PEQU . . . . . . . LITERALLY
15 PESEG. . . . . . . LITERALLY
15 PIF. . . . . . . . LITERALLY
PL/M-86 COMPILER INSTRUCTION MODULE 10/5/81 PAGE 10
15 PIFLIST. . . . . . LITERALLY
15 PINCLUDE . . . . . LITERALLY
15 PLIST. . . . . . . LITERALLY
15 PMODRM . . . . . . LITERALLY
15 PNOIFLIST. . . . . LITERALLY
15 PNOLIST. . . . . . LITERALLY
15 PNOSEGFIX. . . . . LITERALLY
15 PORG . . . . . . . LITERALLY
15 PPAGESIZE. . . . . LITERALLY
15 PPAGEWIDTH . . . . LITERALLY
15 PRB. . . . . . . . LITERALLY
8 PREFIXAND. . . . . LITERALLY
153 00EEH 27 PREFIXINSTR. . . . PROCEDURE BYTE STACK=0002H 159
9 PREFIXON . . . . . LITERALLY 156
148 00A2H 62 PREFIXSCAN . . . . PROCEDURE BYTE STACK=000EH 230
15 PRELB. . . . . . . LITERALLY
15 PRELW. . . . . . . LITERALLY
2 PROC . . . . . . . LITERALLY 18 21 27 29 31 34 39
41 43 46 49 52 55 58 61 64 67
69 71 73 76 79 81 84 86 88 90
93 95 97 99 101 103 105 107 109 111
113 115 117 121 148 149 153 176 204 228
15 PRS. . . . . . . . LITERALLY
15 PRW. . . . . . . . LITERALLY
15 PSEGFIX. . . . . . LITERALLY
12 PSEUDO . . . . . . LITERALLY
17 PSEUDOOPERR. . . . LITERALLY
15 PSIMFORM . . . . . LITERALLY
15 PSSEG. . . . . . . LITERALLY
205 0004H 2 PT . . . . . . . . WORD 205 209 210 212 220 221 223
90 0000H 2 PT . . . . . . . . WORD PARAMETER 91
177 0002H 2 PT . . . . . . . . WORD 177 183 186
34 0000H 2 PT . . . . . . . . WORD PARAMETER 35
31 0000H 2 PT . . . . . . . . WORD PARAMETER 32
15 PTITLE . . . . . . LITERALLY
154 0000H 2 PTR. . . . . . . . WORD 154 155 156
61 0000H 2 PTR. . . . . . . . WORD PARAMETER 62
14 RAH. . . . . . . . LITERALLY
14 RAL. . . . . . . . LITERALLY
11 RANGEAND . . . . . LITERALLY
10 RANGESPECBIT . . . LITERALLY
10 RANGESPECCOUNT . . LITERALLY
11 RANGETYPEAND . . . LITERALLY
14 RAX. . . . . . . . LITERALLY
14 RBH. . . . . . . . LITERALLY
14 RBL. . . . . . . . LITERALLY
14 RBP. . . . . . . . LITERALLY
14 RBX. . . . . . . . LITERALLY
14 RCH. . . . . . . . LITERALLY
14 RCL. . . . . . . . LITERALLY
14 RCS. . . . . . . . LITERALLY
14 RCX. . . . . . . . LITERALLY
14 RDH. . . . . . . . LITERALLY
14 RDI. . . . . . . . LITERALLY
14 RDL. . . . . . . . LITERALLY
14 RDS. . . . . . . . LITERALLY
14 RDX. . . . . . . . LITERALLY
PL/M-86 COMPILER INSTRUCTION MODULE 10/5/81 PAGE 11
2 REENT. . . . . . . LITERALLY
12 REG. . . . . . . . LITERALLY
11 REGISTERRANGE. . . LITERALLY
14 RES. . . . . . . . LITERALLY
58 0000H 2 RESULT . . . . . . WORD PARAMETER 59
49 0000H 2 RESULT . . . . . . WORD PARAMETER 50
43 0000H 2 RESULT . . . . . . WORD PARAMETER 44
64 0000H 2 RETURNPTR. . . . . WORD PARAMETER 65
16 RIGHTBRACKET . . . LITERALLY
14 RSI. . . . . . . . LITERALLY
14 RSP. . . . . . . . LITERALLY
14 RSS. . . . . . . . LITERALLY
24 0000H 2 S. . . . . . . . . WORD PARAMETER 25
69 0000H SCAN . . . . . . . PROCEDURE EXTERNAL(20) STACK=0000H 165 195
67 0000H SCANINIT . . . . . PROCEDURE EXTERNAL(19) STACK=0000H
117 0000H SEARCHFORMATCH . . PROCEDURE BYTE EXTERNAL(42) STACK=0000H 122
3 SEGMBIT. . . . . . LITERALLY
3 SEGMCOUNT. . . . . LITERALLY
205 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPER)
177 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPER)
119 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPERANDS)
3 SEGTYPEBIT . . . . LITERALLY
3 SEGTYPECOUNT . . . LITERALLY
205 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPER) 212 221
177 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPER)
119 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPERANDS)
11 SINGLERANGE. . . . LITERALLY
71 0000H SKIPRESTOFLINE . . PROCEDURE EXTERNAL(21) STACK=0000H 170 257
76 0000H SKIPUNTIL. . . . . PROCEDURE BYTE EXTERNAL(23) STACK=0000H 189
55 0000H 2 SOURCE . . . . . . WORD PARAMETER 56
2 SPACE. . . . . . . LITERALLY
12 SPEC . . . . . . . LITERALLY
5 SPECA. . . . . . . LITERALLY
5 SPECC. . . . . . . LITERALLY
5 SPECD. . . . . . . LITERALLY
5 SPECE. . . . . . . LITERALLY
73 0000H SPECIALTOKEN . . . PROCEDURE BYTE EXTERNAL(22) STACK=0000H 193
5 SPECM. . . . . . . LITERALLY
5 SPECR. . . . . . . LITERALLY
5 SPECS. . . . . . . LITERALLY
5 SPECX. . . . . . . LITERALLY
7 SSOVER . . . . . . LITERALLY
58 0000H 2 STRADR . . . . . . WORD PARAMETER 59
49 0000H 2 STRADR . . . . . . WORD PARAMETER 50
46 0000H 2 STRADR . . . . . . WORD PARAMETER 47
43 0000H 2 STRADR . . . . . . WORD PARAMETER 44
12 STRING . . . . . . LITERALLY
2 STRUC. . . . . . . LITERALLY 119 177 205
205 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPER) 210 223
177 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPER) 186
119 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPERANDS)
55 0000H 2 SYMBADR. . . . . . WORD PARAMETER 56
52 0000H 2 SYMBADR. . . . . . WORD PARAMETER 53
41 0000H SYMBINIT . . . . . PROCEDURE EXTERNAL(10) STACK=0000H
12 SYMBOL . . . . . . LITERALLY
3 SYMBOLHEAD . . . . LITERALLY
3 SYMBOLSTRUC. . . . LITERALLY 119 177 205
PL/M-86 COMPILER INSTRUCTION MODULE 10/5/81 PAGE 12
39 0000H SYMBTERMINATE. . . PROCEDURE EXTERNAL(9) STACK=0000H
2 TAB. . . . . . . . LITERALLY
2 THENDO . . . . . . LITERALLY 122 163 184 193 210 230 232
234 236 238
76 0000H 1 TOK. . . . . . . . BYTE PARAMETER 77
73 0000H 1 TOK. . . . . . . . BYTE PARAMETER 74
2 TRUE . . . . . . . LITERALLY 174 178 190 197 206 217 222
224
3 TYPEBIT. . . . . . LITERALLY 212 221
18 0000H TYPECALC . . . . . PROCEDURE BYTE EXTERNAL(0) STACK=0000H
3 TYPECOUNT. . . . . LITERALLY
12 UDEFSYMB . . . . . LITERALLY 186
17 UDEFSYMBOL . . . . LITERALLY
18 0000H 2 VAL. . . . . . . . WORD PARAMETER 19
12 VARIABLE . . . . . LITERALLY 210
13 WRD. . . . . . . . LITERALLY
21 0000H WRDTEST. . . . . . PROCEDURE BYTE EXTERNAL(1) STACK=0000H 223
MODULE INFORMATION:
CODE AREA SIZE = 025FH 607D
CONSTANT AREA SIZE = 000CH 12D
VARIABLE AREA SIZE = 000AH 10D
MAXIMUM STACK SIZE = 0012H 18D
735 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,161 @@
$title ('INSTRUCTION MODULE')
instruc:
do;
/*
This is the module to decode and produce code-
output of a single instruction, possibly preceded
by a number of PREFIX-instructions.
*/
$include (:f1:macro.lit)
$include (:f1:struc.lit)
$include (:f1:cmacd.lit)
$include (:f1:equals.lit)
$include (:f1:ermod.lit)
$include (:f1:subr1.ext)
$include (:f1:expr.ext)
$include (:f1:symb.ext)
$include (:f1:scan.ext)
$include (:f1:ermod.ext)
$include (:f1:cmsubr.ext)
$include (:f1:instr.x86)
$eject
dcl /* global variables */
bytevar based macroptr byte, /* byte within codemacro */
comtab(12) byte data /* legal codemacro commands */
(mdbn,mdbf,mdwn,mdwf,mddf,mrelb,mrelw,mmodrm1,mmodrm2,msegfix,
mnosegfix,mdbit);
$eject
/* generate instruction output code */
makecode: proc byte;
if (noerror:=searchformatch) then$do
/* matching operands, comput code */
do while (bytevar <> mendm) and noerror;
do case commandtype(bytevar,length(comtab),.comtab);
call mDBNrout;
call mDBFrout;
call mDWNrout;
call mDWFrout; /* typed during earthquake */
call mDDFrout;
call mRELBrout;
call mRELWrout;
call mMODRM1rout;
call mMODRM2rout;
call mSEGFIXrout;
call mNOSEGFIXrout;
call mDBITrout;
do; end; /* dummy, should not happen */
end$case;
end$while;
end$if;
if noerror then call emit; else call emitdummies;
return noerror;
end makecode;
/* scan all PREFIX instructions */
prefixscan: proc byte;
/* compute address of first codemacro */
findmacroaddr: proc;
dcl macrop based codemacroptr address;
firstmacroptr=macrop;
end findmacroaddr;
/* test if instruction is of PREFIX type */
prefixinstr: proc byte;
dcl ptr address,flag based ptr byte;
ptr=firstmacroptr+2;
return ((flag and prefix$on) <> 0);
end prefixinstr;
call findmacroaddr; /* compute pointer to first macro */
do while prefixinstr;
if makecode then; /* generate output code,always succed */
call clearcmindex;
if findcodemacro(acclen,.accum(0),.codemacroptr) then$do
call scan;
call findmacroaddr;
else$do
call errmsg(missinstr); /* missing instruction */
call skip$rest$of$line;
return false;
end$if;
end$while;
return true;
end prefixscan;
/* get all instruction operands */
getoperands: proc byte;
dcl moreoperands byte,pt address,oper based pt operandstruc,
exitvalue byte;
exitvalue=true;
nooper=0; /* clear no of operands */
moreoperands=not emptyline;
do while moreoperands;
moreoperands=false;
pt=.operands(nooper);
if not operand then$do
if oper.stype <> udefsymb then call errmsg(illioper);
exitvalue=false;
if skip$until(',') then moreoperands=true;
else$do
if specialtoken(',') then$do
call scan; /* skip "," */
if nooper < 3 then moreoperands=true;
end$if;
end$if;
nooper=nooper+1;
end$while;
return exitvalue;
end getoperands;
/* test if operands contain enough type information */
enough$type$info: proc byte;
dcl pt address,oper based pt operandstruc,(i,flag) byte;
flag=true;
i=0ffh;
do while (i:=i+1) < nooper;
pt=.operands(i);
if oper.stype=variable then$do
if (oper.sflag and typebit) = 0 then flag=false;
end$if;
end$while;
if flag then return true;
i=0ffh; /* one of operands lacks type info,check others */
do while (i:=i+1) < nooper;
pt=.operands(i);
if (oper.sflag and typebit) <> 0 then return true;
if (oper.stype=number) and (wrdtest(oper.offset)) then return true;
end$while;
return false;
end enough$type$info;
/* Module entry point: */
instruction: proc public; /* decode line in pass 1 and pass 2 */
call clearcmindex; /* clear buffer for output codes */
if prefixscan then$do
if getoperands then$do
if enough$type$info then$do
if makecode then$do
if not emptyline then$do
call errmsg(end$of$line$err);
end$if;
else$do
call errmsg(opmismatch);
end$if;
else$do
call errmsg(misstypeinfo);
call emitdummies;
end$if;
else$do
if makecode then; /* try to make code with bad operands */
end$if;
end$if;
call skip$rest$of$line;
end instruction;
end$module instruc;

View File

@@ -0,0 +1,17 @@
$nolist
dcl
acclen byte external, /* accumulator length */
accum(80) byte external, /* actual token scanned */
/* Mischellaneous variables: */
noerror byte external, /* errorflag in codemacro decoding */
firstmacroptr address external, /* pointer at first codemacro */
macroptr address external, /* current pointer within macros */
nooper byte external, /* no of instruction operands */
operands(4) operandstruc /* instruction operands,max 4 */
external,
codemacroptr address external; /* pointer to found codemacro */
$list

View File

@@ -0,0 +1,112 @@
$nolist
/* Template for all BDOS calls */
/*
modified 3/26/81 R. Silberstein
modified 9/14/81 R. Silberstein
*/
mon1: procedure(func,info) external;
declare func byte,
info address;
end mon1;
mon2: procedure(func,info) byte external;
declare func byte,
info address;
end mon2;
declare fcb(1) byte external;
declare fcb16(1) byte external;
declare tbuff(1) byte external;
declare endbuf address external;
/**************************************
* *
* B D O S Externals *
* *
**************************************/
system$reset:
procedure external;
end system$reset;
read$console:
procedure byte external;
end read$console;
write$console:
procedure (char) external;
declare char byte;
end write$console;
write$list:
procedure (char) external;
declare char byte;
end write$list;
constat:
procedure byte external;
end constat;
VERSION: PROCEDURE ADDRESS EXTERNAL;
END VERSION;
select$disk:
procedure (disk$number) external;
declare disk$number byte;
end select$disk;
open$file:
procedure (fcb$address) byte external;
declare fcb$address address;
end open$file;
OPEN$RO$FILE: PROCEDURE (FCB$ADDRESS) BYTE EXTERNAL;
DECLARE FCB$ADDRESS ADDRESS;
END OPEN$RO$FILE;
close$file:
procedure (fcb$address) byte external;
declare fcb$address address;
end close$file;
delete$file:
procedure (fcb$address) external;
declare fcb$address address;
end delete$file;
read$record:
procedure (fcb$address) byte external;
declare fcb$address address;
end read$record;
write$record:
procedure (fcb$address) byte external;
declare fcb$address address;
end write$record;
create$file:
procedure (fcb$address) byte external;
declare fcb$address address;
end create$file;
interrogate$disk:
procedure byte external;
end interrogate$disk;
set$DMA$address:
procedure (DMA$address) external;
declare DMA$address address;
end set$DMA$address;
crlf: procedure external;
end crlf;
$list

View File

@@ -0,0 +1,198 @@
PL/M-86 COMPILER INTERFACE TO CP/M I/O 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE IO
OBJECT MODULE PLACED IN IO.OBJ
COMPILER INVOKED BY: :F0: IO.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100) XREF
$title ('INTERFACE TO CP/M I/O')
1 io:
do;
/*
Template for all BDOS calls
*/
/*
modified 3/26/81 R. Silberstein
modified 6/16/81 R. Silberstein
modified 9/14/81 R. Silberstein
*/
2 1 declare tbuff (80h) byte external;
3 1 mon1: procedure (func,info) external;
4 2 declare func byte;
5 2 declare info address;
6 2 end mon1;
7 1 mon2: procedure (func,info) byte external;
8 2 declare func byte;
9 2 declare info address;
10 2 end mon2;
/**************************************
* *
* B D O S Externals *
* *
**************************************/
11 1 system$reset: procedure public;
12 2 call mon1 (0,0);
13 2 end system$reset;
14 1 read$console: procedure byte public;
15 2 return mon2 (1,0);
16 2 end read$console;
17 1 write$console: procedure (char) public;
18 2 declare char byte;
19 2 call mon1 (2,char);
20 2 end write$console;
21 1 write$list: procedure (char) public;
22 2 declare char byte;
23 2 call mon1 (5,char);
24 2 end write$list;
PL/M-86 COMPILER INTERFACE TO CP/M I/O 10/5/81 PAGE 2
25 1 constat: procedure byte public;
26 2 return mon2 (11,0);
27 2 end constat;
28 1 VERSION: PROCEDURE ADDRESS PUBLIC;
29 2 RETURN MON2 (12, 0);
30 2 END VERSION;
31 1 select$disk: procedure (disk$number) public;
32 2 declare disk$number byte;
33 2 call mon1 (14,disk$number);
34 2 end select$disk;
35 1 set$DMA$address: procedure (DMA$address) public;
36 2 declare DMA$address address;
37 2 call mon1 (26,DMA$address);
38 2 end set$DMA$address;
39 1 open$file: procedure (fcb$address) byte public;
40 2 declare fcb$address address;
41 2 CALL SET$DMA$ADDRESS (.TBUFF); /* FOR 1.4 SYSTEMS */
42 2 return mon2 (15,fcb$address);
43 2 end open$file;
44 1 OPEN$RO$FILE: PROCEDURE (FCB$ADDRESS) BYTE PUBLIC;
45 2 DECLARE FCB$ADDRESS ADDRESS, FCB BASED FCB$ADDRESS (32) BYTE;
46 2 FCB (6) = FCB (6) OR 80H;
47 2 RETURN OPEN$FILE (FCB$ADDRESS);
48 2 END OPEN$RO$FILE;
49 1 close$file: procedure (fcb$address) byte public;
50 2 declare fcb$address address;
51 2 return mon2 (16,fcb$address);
52 2 end close$file;
53 1 delete$file: procedure (fcb$address) public;
54 2 declare fcb$address address;
55 2 CALL mon1 (19,fcb$address);
56 2 end delete$file;
57 1 read$record: procedure (fcb$address) byte public;
58 2 declare fcb$address address;
59 2 return mon2 (20,fcb$address);
60 2 end read$record;
61 1 write$record: procedure (fcb$address) byte public;
62 2 declare fcb$address address;
63 2 return mon2 (21,fcb$address);
64 2 end write$record;
65 1 create$file: procedure (fcb$address) byte public;
66 2 declare fcb$address address;
67 2 return mon2 (22,fcb$address);
68 2 end create$file;
69 1 interrogate$disk: procedure byte public;
PL/M-86 COMPILER INTERFACE TO CP/M I/O 10/5/81 PAGE 3
70 2 return mon2 (25,0);
71 2 end interrogate$disk;
72 1 crlf: procedure public;
73 2 call write$console (0dh);
74 2 call write$console (0ah);
75 2 end crlf;
76 1 end io;
PL/M-86 COMPILER INTERFACE TO CP/M I/O 10/5/81 PAGE 4
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
21 0004H 1 CHAR . . . . . . . BYTE PARAMETER AUTOMATIC 22 23
17 0004H 1 CHAR . . . . . . . BYTE PARAMETER AUTOMATIC 18 19
49 00B1H 16 CLOSEFILE. . . . . PROCEDURE BYTE PUBLIC STACK=000AH
25 0043H 15 CONSTAT. . . . . . PROCEDURE BYTE PUBLIC STACK=0008H
65 00F1H 16 CREATEFILE . . . . PROCEDURE BYTE PUBLIC STACK=000AH
72 0110H 17 CRLF . . . . . . . PROCEDURE PUBLIC STACK=000EH
53 00C1H 16 DELETEFILE . . . . PROCEDURE PUBLIC STACK=000AH
31 0004H 1 DISKNUMBER . . . . BYTE PARAMETER AUTOMATIC 32 33
35 0004H 2 DMAADDRESS . . . . WORD PARAMETER AUTOMATIC 36 37
45 0000H 32 FCB. . . . . . . . BYTE BASED(FCBADDRESS) ARRAY(32) 46
61 0004H 2 FCBADDRESS . . . . WORD PARAMETER AUTOMATIC 62 63
44 0004H 2 FCBADDRESS . . . . WORD PARAMETER AUTOMATIC 45 46 47
39 0004H 2 FCBADDRESS . . . . WORD PARAMETER AUTOMATIC 40 42
49 0004H 2 FCBADDRESS . . . . WORD PARAMETER AUTOMATIC 50 51
53 0004H 2 FCBADDRESS . . . . WORD PARAMETER AUTOMATIC 54 55
65 0004H 2 FCBADDRESS . . . . WORD PARAMETER AUTOMATIC 66 67
57 0004H 2 FCBADDRESS . . . . WORD PARAMETER AUTOMATIC 58 59
3 0000H 1 FUNC . . . . . . . BYTE PARAMETER 4
7 0000H 1 FUNC . . . . . . . BYTE PARAMETER 8
7 0000H 2 INFO . . . . . . . WORD PARAMETER 9
3 0000H 2 INFO . . . . . . . WORD PARAMETER 5
69 0101H 15 INTERROGATEDISK. . PROCEDURE BYTE PUBLIC STACK=0008H
1 0000H IO . . . . . . . . PROCEDURE STACK=0000H
3 0000H MON1 . . . . . . . PROCEDURE EXTERNAL(1) STACK=0000H 12 19
23 33 37 55
7 0000H MON2 . . . . . . . PROCEDURE BYTE EXTERNAL(2) STACK=0000H 15
26 29 42 51 59 63 67 70
39 0086H 23 OPENFILE . . . . . PROCEDURE BYTE PUBLIC STACK=0010H 47
44 009DH 20 OPENROFILE . . . . PROCEDURE BYTE PUBLIC STACK=0016H
14 000EH 15 READCONSOLE. . . . PROCEDURE BYTE PUBLIC STACK=0008H
57 00D1H 16 READRECORD . . . . PROCEDURE BYTE PUBLIC STACK=000AH
31 0063H 19 SELECTDISK . . . . PROCEDURE PUBLIC STACK=000AH
35 0076H 16 SETDMAADDRESS. . . PROCEDURE PUBLIC STACK=000AH 41
11 0000H 14 SYSTEMRESET. . . . PROCEDURE PUBLIC STACK=0008H
2 0000H 128 TBUFF. . . . . . . BYTE ARRAY(128) EXTERNAL(0) 41
28 0052H 17 VERSION. . . . . . PROCEDURE WORD PUBLIC STACK=0008H
17 001DH 19 WRITECONSOLE . . . PROCEDURE PUBLIC STACK=000AH 73 74
21 0030H 19 WRITELIST. . . . . PROCEDURE PUBLIC STACK=000AH
61 00E1H 16 WRITERECORD. . . . PROCEDURE BYTE PUBLIC STACK=000AH
MODULE INFORMATION:
CODE AREA SIZE = 0121H 289D
CONSTANT AREA SIZE = 0000H 0D
VARIABLE AREA SIZE = 0000H 0D
MAXIMUM STACK SIZE = 0016H 22D
117 LINES READ
PL/M-86 COMPILER INTERFACE TO CP/M I/O 10/5/81 PAGE 5
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,117 @@
$title ('INTERFACE TO CP/M I/O')
io:
do;
/*
Template for all BDOS calls
*/
/*
modified 3/26/81 R. Silberstein
modified 6/16/81 R. Silberstein
modified 9/14/81 R. Silberstein
*/
declare tbuff (80h) byte external;
mon1: procedure (func,info) external;
declare func byte;
declare info address;
end mon1;
mon2: procedure (func,info) byte external;
declare func byte;
declare info address;
end mon2;
/**************************************
* *
* B D O S Externals *
* *
**************************************/
system$reset: procedure public;
call mon1 (0,0);
end system$reset;
read$console: procedure byte public;
return mon2 (1,0);
end read$console;
write$console: procedure (char) public;
declare char byte;
call mon1 (2,char);
end write$console;
write$list: procedure (char) public;
declare char byte;
call mon1 (5,char);
end write$list;
constat: procedure byte public;
return mon2 (11,0);
end constat;
VERSION: PROCEDURE ADDRESS PUBLIC;
RETURN MON2 (12, 0);
END VERSION;
select$disk: procedure (disk$number) public;
declare disk$number byte;
call mon1 (14,disk$number);
end select$disk;
set$DMA$address: procedure (DMA$address) public;
declare DMA$address address;
call mon1 (26,DMA$address);
end set$DMA$address;
open$file: procedure (fcb$address) byte public;
declare fcb$address address;
CALL SET$DMA$ADDRESS (.TBUFF); /* FOR 1.4 SYSTEMS */
return mon2 (15,fcb$address);
end open$file;
OPEN$RO$FILE: PROCEDURE (FCB$ADDRESS) BYTE PUBLIC;
DECLARE FCB$ADDRESS ADDRESS, FCB BASED FCB$ADDRESS (32) BYTE;
FCB (6) = FCB (6) OR 80H;
RETURN OPEN$FILE (FCB$ADDRESS);
END OPEN$RO$FILE;
close$file: procedure (fcb$address) byte public;
declare fcb$address address;
return mon2 (16,fcb$address);
end close$file;
delete$file: procedure (fcb$address) public;
declare fcb$address address;
CALL mon1 (19,fcb$address);
end delete$file;
read$record: procedure (fcb$address) byte public;
declare fcb$address address;
return mon2 (20,fcb$address);
end read$record;
write$record: procedure (fcb$address) byte public;
declare fcb$address address;
return mon2 (21,fcb$address);
end write$record;
create$file: procedure (fcb$address) byte public;
declare fcb$address address;
return mon2 (22,fcb$address);
end create$file;
interrogate$disk: procedure byte public;
return mon2 (25,0);
end interrogate$disk;
crlf: procedure public;
call write$console (0dh);
call write$console (0ah);
end crlf;
end io;

View File

@@ -0,0 +1,34 @@
$nolist
$eject
/* PL/M language text macros: */
declare
lit literally 'literally',
dcl lit 'declare',
init lit 'initial',
true lit '0ffh',
false lit '0',
addr lit 'address',
struc lit 'structure',
proc lit 'procedure',
reent lit 'reentrant',
then$do lit 'then do;',
else$do lit 'end; else do;',
end$if lit 'end',
forever lit 'while true',
end$forever lit 'end',
end$while lit 'end',
end$case lit 'end',
end$do lit 'end',
end$module lit 'end',
end$proc lit 'end',
cr lit '0dh',
lf lit '0ah',
tab lit '09h',
formfeed lit '0ch',
end$of$file lit '1ah',
space lit '20h';
$list

View File

@@ -0,0 +1,649 @@
PL/M-86 COMPILER ASM86 MAIN PROGRAM 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE MAINP
OBJECT MODULE PLACED IN MAINP.OBJ
COMPILER INVOKED BY: :F0: MAINP.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100) XREF
$title ('ASM86 MAIN PROGRAM')
1 mainp:
do;
/*
This is the main program of the CP/M 8086
assembler. This module activates the i/o
modules and goes through the source text
in 3 passes. The module then for each source
line calls the external subroutine DECODELINE
to perform assembly of each line;
*/
/*
modified 3/25/81 R. Silberstein
modified 3/28/81 R. Silberstein
modified 3/30/81 R. Silberstein
modified 4/7/81 R. Silberstein
modified 4/20/81 R. Silberstein
modified 6/16/81 R. Silberstein
modified 7/24/81 R. Silberstein
modified 7/27/81 R. Silberstein
modified 8/21/81 R. Silberstein
*/
$include (:f1:macro.lit)
= $nolist
$include (:f1:struc.lit)
= $nolist
$include (:f1:equals.lit)
= $nolist
$include (:f1:dev.lit)
= $nolist
$include (:f1:ermod.lit)
= $nolist
$include (:f1:subr2.ext)
= $nolist
$include (:f1:io.ext)
= $nolist
$include (:f1:files.ext)
= $nolist
$include (:f1:outp.ext)
= $nolist
$include (:f1:scan.ext)
= $nolist
$include (:f1:print.ext)
= $nolist
$include (:f1:symb.ext)
= $nolist
PL/M-86 COMPILER ASM86 MAIN PROGRAM 10/5/81 PAGE 2
$include (:f1:ermod.ext)
= $nolist
$include (:f1:mglob.ext)
= $nolist
$include (:f1:text.ext)
= $nolist
$include (:f1:dline.ext)
= $nolist
218 1 DECLARE ASM86 LABEL PUBLIC;
219 1 closefiles: procedure;
220 2 call close$source;
221 2 call close$print;
222 2 call close$symbol;
223 2 call close$hex;
224 2 end closefiles;
225 1 open$output$files: procedure;
226 2 CALL OPENPRINT;
227 2 CALL OPENHEX;
228 2 CALL OPENSYMBOL;
229 2 end open$output$files;
230 1 userbreak: proc byte; /* test if keyboard break from user */
231 2 if not constat then return false; /* test console status */
233 2 if readconsole then; /* skip first break key */
235 2 do forever;
236 3 call outtext(.usbreaktext); /* USER BREAK. OK (Y/N)? */
237 3 i=upper(readconsole);
238 3 call crlf;
239 3 if i = yes then return true;
241 3 if i = no then return false;
end$forever;
244 2 end userbreak;
245 1 varinit: proc;
246 2 CALL FILL (0, .PRINT$ON-.CIP, .CIP);
247 2 errors=0;
248 2 printswitchoff,includeon=false;
249 2 IFLEVEL = 0;
250 2 IFLIST = TRUE;
251 2 csegtype=rcs;
252 2 end varinit;
253 1 pass0init: proc; /* initialize pass 0 */
254 2 simform=false;
255 2 maxcol=119;
256 2 if printdevice=console then maxcol=79;
258 2 call symbinit; /* initialize symbol table */
259 2 print$on=false;
260 2 call varinit;
261 2 end pass0init;
262 1 pass1init: proc; /* initialize for pass 1 */
263 2 call varinit;
264 2 end pass1init;
PL/M-86 COMPILER ASM86 MAIN PROGRAM 10/5/81 PAGE 3
265 1 pass2init: proc; /* initialize for pass 2 (last pass) */
266 2 print$on=true;
267 2 call varinit;
268 2 call emitinit;
269 2 end pass2init;
270 1 pass0terminate: proc; /* terminate pass 0 */
271 2 call outtext(.pass0text); /* End of pass 0 */
272 2 end pass0terminate;
273 1 pass1terminate: proc; /* terminate pass 1 */
274 2 print$on=false; /* dummy */
275 2 call outtext(.pass1text); /* End of pass 1 */
276 2 end pass1terminate;
277 1 pass2terminate: proc; /* terminate pass 2 (last pass) */
278 2 DECLARE USEFACT BYTE;
279 2 USEFACT = (FREEPT-.MEMORY) / ((ENDOFSYMBTAB-.MEMORY) / 100 + 1);
280 2 errorprinted=false;
281 2 call emitterminate; /* terminate hex output module */
282 2 call symbterminate; /* print symbols */
283 2 if printdevice <> console then call printterminate (USEFACT);
285 2 CALL CLOSEFILES;
286 2 call outtext(.endtext); /* END OF ASSEMBLY... */
287 2 call decout(errors,.help(0)); /* print no of errors */
288 2 call outtext(.help(2));
289 2 CALL OUTTEXT (.USEFACTOR);
290 2 CALL DECOUT (USEFACT, .HELP(0));
291 2 CALL OUTTEXT (.HELP(3));
292 2 CALL WRITECONSOLE (25H); /* % */
293 2 CALL CRLF;
294 2 end pass2terminate;
295 1 include$close: proc (flag);
296 2 declare flag byte;
297 2 if eofset and include$on then$do
299 3 call close$include;
300 3 include$on,eofset=false;
301 3 if flag then$do
303 4 call scan; /* skip EOF */
304 4 call scan; /* prepare for next source line */
305 4 end$if;
end$if;
307 2 end include$close;
308 1 ASM86:
call globalinit; /* initialize some globals */
309 1 call outtext(.asm86text); /* CP/M 8086 ASSEMBLER.... */
310 1 if not filesetup then$do
312 2 call outtext(.parerrtext); /* PARAMETER ERROR */
313 2 CALL SYSTEMRESET;
314 2 end$if;
PL/M-86 COMPILER ASM86 MAIN PROGRAM 10/5/81 PAGE 4
315 1 CALL OPENSOURCE;
316 1 CALL OPENOUTPUTFILES;
317 1 pass=0ffh;
318 1 do while (pass:=pass+1) < 3;
319 2 do case pass;
320 3 call pass0init; /* pass 0 */
321 3 call pass1init; /* pass 1 */
322 3 call pass2init; /* pass 2 */
323 3 end$case;
324 2 call scaninit;
325 2 call scan;
326 2 do while not eofset;
327 3 if userbreak then$do
329 4 eofset=true;
330 4 pass=3;
331 4 else$do
333 4 errorprinted=false;
334 4 call decodeline;
335 4 call includeclose(false); /* close include file if necessary */
336 4 call scan;
337 4 call includeclose(true); /* close include file if necessary */
338 4 end$if;
339 3 end$while;
340 2 do case pass;
341 3 call pass0terminate; /* pass 0 */
342 3 call pass1terminate; /* pass 1 */
343 3 call pass2terminate; /* pass 2 */
344 3 do; end; /* do nothing if userbreak */
346 3 end$case;
347 2 end$while;
348 1 call system$reset;
349 1 end$module mainp;
PL/M-86 COMPILER ASM86 MAIN PROGRAM 10/5/81 PAGE 5
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
2 ADDR . . . . . . . LITERALLY 12 18 36 39 42 45 138
179 180 186 189 192 195 198 201 204 207
212
26 0000H ALPHANUMERIC . . . PROCEDURE BYTE EXTERNAL(5) STACK=0000H
29 0000H ASCIICHAR. . . . . PROCEDURE BYTE EXTERNAL(6) STACK=0000H
206 0000H 2 ASCIIPTR . . . . . WORD PARAMETER 207
218 0010H ASM86. . . . . . . LABEL PUBLIC 308
215 0000H 1 ASM86TEXT. . . . . BYTE ARRAY(1) EXTERNAL(106) 309
3 BASEREGBIT . . . . LITERALLY
3 BASEREGCOUNT . . . LITERALLY
3 BREGBIT. . . . . . LITERALLY
3 BREGCOUNT. . . . . LITERALLY
5 BYT. . . . . . . . LITERALLY
23 0000H 1 CH . . . . . . . . BYTE PARAMETER 24
163 0000H 1 CH . . . . . . . . BYTE PARAMETER 164
102 0000H 1 CH . . . . . . . . BYTE PARAMETER 103
146 0000H 1 CH . . . . . . . . BYTE PARAMETER 147
26 0000H 1 CH . . . . . . . . BYTE PARAMETER 27
17 0000H 1 CH . . . . . . . . BYTE PARAMETER 18
29 0000H 1 CH . . . . . . . . BYTE PARAMETER 30
20 0000H 1 CH . . . . . . . . BYTE PARAMETER 21
105 0000H 1 CH . . . . . . . . BYTE PARAMETER 106
32 0000H 1 CH . . . . . . . . BYTE PARAMETER 33
108 0000H 1 CH . . . . . . . . BYTE PARAMETER 109
64 0000H 1 CHAR . . . . . . . BYTE PARAMETER 65
61 0000H 1 CHAR . . . . . . . BYTE PARAMETER 62
212 0000H 2 CIP. . . . . . . . WORD EXTERNAL(83) 246
215 0000H 1 CLOSEERRTEXT . . . BYTE ARRAY(1) EXTERNAL(112)
80 0000H CLOSEFILE. . . . . PROCEDURE BYTE EXTERNAL(27) STACK=0000H
219 00CDH 17 CLOSEFILES . . . . PROCEDURE STACK=0004H 285
131 0000H CLOSEHEX . . . . . PROCEDURE EXTERNAL(48) STACK=0000H 223
129 0000H CLOSEINCLUDE . . . PROCEDURE EXTERNAL(47) STACK=0000H 299
133 0000H CLOSEPRINT . . . . PROCEDURE EXTERNAL(49) STACK=0000H 221
125 0000H CLOSESOURCE. . . . PROCEDURE EXTERNAL(45) STACK=0000H 220
135 0000H CLOSESYMBOL. . . . PROCEDURE EXTERNAL(50) STACK=0000H 222
4 CODE . . . . . . . LITERALLY
10 CODEMACROERR . . . LITERALLY
3 CODEMACROHEAD. . . LITERALLY
9 CONSOLE. . . . . . LITERALLY 256 283
67 0000H CONSTAT. . . . . . PROCEDURE BYTE EXTERNAL(22) STACK=0000H 231
2 CR . . . . . . . . LITERALLY
92 0000H CREATEFILE . . . . PROCEDURE BYTE EXTERNAL(31) STACK=0000H
100 0000H CRLF . . . . . . . PROCEDURE EXTERNAL(34) STACK=0000H 238 293
212 0000H 1 CSEGTYPE . . . . . BYTE EXTERNAL(84) 251
44 0000H 2 D. . . . . . . . . WORD PARAMETER 45
41 0000H 2 D. . . . . . . . . WORD PARAMETER 42
35 0000H 2 D. . . . . . . . . WORD PARAMETER 36
38 0000H 2 D. . . . . . . . . WORD PARAMETER 39
2 DCL. . . . . . . . LITERALLY
PL/M-86 COMPILER ASM86 MAIN PROGRAM 10/5/81 PAGE 6
216 0000H DECODELINE . . . . PROCEDURE EXTERNAL(117) STACK=0000H 334
44 0000H DECOUT . . . . . . PROCEDURE EXTERNAL(11) STACK=0000H 287 290
4 DELETEDSYMB. . . . LITERALLY
83 0000H DELETEFILE . . . . PROCEDURE EXTERNAL(28) STACK=0000H
194 0000H 2 DEST . . . . . . . WORD PARAMETER 195
137 0000H 1 DEV. . . . . . . . BYTE PARAMETER 138
20 0000H DIGIT. . . . . . . PROCEDURE BYTE EXTERNAL(3) STACK=0000H
71 0000H 1 DISKNUMBER . . . . BYTE PARAMETER 72
215 0000H 1 DISKREADERRTEXT. . BYTE ARRAY(1) EXTERNAL(109)
215 0000H 1 DISKWRITEERRTXT. . BYTE ARRAY(1) EXTERNAL(110)
97 0000H 2 DMAADDRESS . . . . WORD PARAMETER 98
4 DOUBLEDEFINED. . . LITERALLY
10 DOUBLEDEFLAB . . . LITERALLY
10 DOUBLEDEFSYMB. . . LITERALLY
10 DOUBLEDEFVAR . . . LITERALLY
5 DWRD . . . . . . . LITERALLY
177 0000H EJECT. . . . . . . PROCEDURE EXTERNAL(68) STACK=0000H
2 ELSEDO . . . . . . LITERALLY
146 0000H EMITCODEBYTE . . . PROCEDURE EXTERNAL(55) STACK=0000H
142 0000H EMITINIT . . . . . PROCEDURE EXTERNAL(53) STACK=0000H 268
144 0000H EMITTERMINATE. . . PROCEDURE EXTERNAL(54) STACK=0000H 281
161 0000H EMPTYLINE. . . . . PROCEDURE BYTE EXTERNAL(61) STACK=0000H
56 0000H 2 ENDBUF . . . . . . WORD EXTERNAL(17)
2 ENDCASE. . . . . . LITERALLY
2 ENDDO. . . . . . . LITERALLY
2 ENDFOREVER . . . . LITERALLY 242
2 ENDIF. . . . . . . LITERALLY 305
2 ENDMODULE. . . . . LITERALLY
2 ENDOFFILE. . . . . LITERALLY
10 ENDOFLINEERR . . . LITERALLY
180 0000H 2 ENDOFSYMBTAB . . . WORD EXTERNAL(70) 279
2 ENDPROC. . . . . . LITERALLY
215 0000H 1 ENDTEXT. . . . . . BYTE ARRAY(1) EXTERNAL(104) 286
2 ENDWHILE . . . . . LITERALLY
197 0000H ENTERATTRIBUTES. . PROCEDURE EXTERNAL(77) STACK=0000H
212 0000H 1 EOFSET . . . . . . BYTE EXTERNAL(92) 297 300 326 329
35 0000H EQUAL. . . . . . . PROCEDURE BYTE EXTERNAL(8) STACK=0000H
209 0000H ERRMSG . . . . . . PROCEDURE EXTERNAL(81) STACK=0000H
209 0000H 1 ERRNO. . . . . . . BYTE PARAMETER 210
4 ERROR. . . . . . . LITERALLY
212 0000H 1 ERRORPRINTED . . . BYTE EXTERNAL(93) 280 333
212 0000H 2 ERRORS . . . . . . WORD EXTERNAL(91) 247 287
2 FALSE. . . . . . . LITERALLY 232 242 248 254 259 274 280
300 333 335
53 0000H 1 FCB. . . . . . . . BYTE ARRAY(1) EXTERNAL(14)
54 0000H 1 FCB16. . . . . . . BYTE ARRAY(1) EXTERNAL(15)
83 0000H 2 FCBADDRESS . . . . WORD PARAMETER 84
92 0000H 2 FCBADDRESS . . . . WORD PARAMETER 93
89 0000H 2 FCBADDRESS . . . . WORD PARAMETER 90
86 0000H 2 FCBADDRESS . . . . WORD PARAMETER 87
80 0000H 2 FCBADDRESS . . . . WORD PARAMETER 81
77 0000H 2 FCBADDRESS . . . . WORD PARAMETER 78
74 0000H 2 FCBADDRESS . . . . WORD PARAMETER 75
14 0000H 2 FCBADR . . . . . . WORD PARAMETER 15
14 0000H FILEABORT. . . . . PROCEDURE EXTERNAL(1) STACK=0000H
3 FILEISTRUCTURE . . LITERALLY
3 FILEOSTRUCTURE . . LITERALLY
PL/M-86 COMPILER ASM86 MAIN PROGRAM 10/5/81 PAGE 7
140 0000H FILESETUP. . . . . PROCEDURE BYTE EXTERNAL(52) STACK=0000H 310
10 FILESYNTERR. . . . LITERALLY
17 0000H FILL . . . . . . . PROCEDURE EXTERNAL(2) STACK=0000H 246
137 0000H 2 FILNAM . . . . . . WORD PARAMETER 138
137 0000H 2 FILTYP . . . . . . WORD PARAMETER 138
200 0000H FINDCODEMACRO. . . PROCEDURE BYTE EXTERNAL(78) STACK=0000H
191 0000H FINDSYMBOL . . . . PROCEDURE BYTE EXTERNAL(75) STACK=0000H
10 FIRSTITEM. . . . . LITERALLY
295 0004H 1 FLAG . . . . . . . BYTE PARAMETER AUTOMATIC 296 301
2 FOREVER. . . . . . LITERALLY 235
2 FORMFEED . . . . . LITERALLY
179 0000H 2 FREEPT . . . . . . WORD EXTERNAL(69) 279
212 0000H 1 FULLSYMBTAB. . . . BYTE EXTERNAL(94)
47 0000H 1 FUNC . . . . . . . BYTE PARAMETER 48
50 0000H 1 FUNC . . . . . . . BYTE PARAMETER 51
194 0000H GETATTRIBUTES. . . PROCEDURE EXTERNAL(76) STACK=0000H
213 0000H GLOBALINIT . . . . PROCEDURE EXTERNAL(99) STACK=0000H 308
212 0000H 5 HELP . . . . . . . BYTE ARRAY(5) EXTERNAL(97) 287 288 290
291
38 0000H HEX1OUT. . . . . . PROCEDURE EXTERNAL(9) STACK=0000H
41 0000H HEX2OUT. . . . . . PROCEDURE EXTERNAL(10) STACK=0000H
212 0000H 1 I. . . . . . . . . BYTE EXTERNAL(98) 237 239 241
4 IDENT. . . . . . . LITERALLY
137 0000H IFILESETUP . . . . PROCEDURE EXTERNAL(51) STACK=0000H
212 0000H 1 IFLEVEL. . . . . . BYTE EXTERNAL(96) 249
212 0000H 1 IFLIST . . . . . . BYTE EXTERNAL(87) 250
10 IFPARERR . . . . . LITERALLY
10 ILLEGALMACRO . . . LITERALLY
10 ILLEGALPSEUDO. . . LITERALLY
10 ILLEXPRELEM. . . . LITERALLY
10 ILLIOPER . . . . . LITERALLY
295 0232H 44 INCLUDECLOSE . . . PROCEDURE STACK=0006H 335 337
212 0000H 1 INCLUDEON. . . . . BYTE EXTERNAL(95) 248 297 300
3 INDEXREGBIT. . . . LITERALLY
3 INDEXREGCOUNT. . . LITERALLY
50 0000H 2 INFO . . . . . . . WORD PARAMETER 51
47 0000H 2 INFO . . . . . . . WORD PARAMETER 48
113 0000H ININCLUDEBYTE. . . PROCEDURE BYTE EXTERNAL(39) STACK=0000H
2 INIT . . . . . . . LITERALLY
215 0000H 1 INITIALS . . . . . BYTE ARRAY(1) EXTERNAL(102)
111 0000H INSOURCEBYTE . . . PROCEDURE BYTE EXTERNAL(38) STACK=0000H
10 INSTRERR . . . . . LITERALLY
95 0000H INTERROGATEDISK. . PROCEDURE BYTE EXTERNAL(32) STACK=0000H
3 IREGBIT. . . . . . LITERALLY
3 IREGCOUNT. . . . . LITERALLY
4 LAB. . . . . . . . LITERALLY
10 LABOUTOFRANGE. . . LITERALLY
8 LEFTBRACKET. . . . LITERALLY
23 0000H LETTER . . . . . . PROCEDURE BYTE EXTERNAL(4) STACK=0000H
2 LF . . . . . . . . LITERALLY
206 0000H 1 LG . . . . . . . . BYTE PARAMETER 207
203 0000H 1 LG . . . . . . . . BYTE PARAMETER 204
200 0000H 1 LG . . . . . . . . BYTE PARAMETER 201
191 0000H 1 LG . . . . . . . . BYTE PARAMETER 192
188 0000H 1 LG . . . . . . . . BYTE PARAMETER 189
185 0000H 1 LG . . . . . . . . BYTE PARAMETER 186
2 LIT. . . . . . . . LITERALLY 2 3 4 5 6 7 8
PL/M-86 COMPILER ASM86 MAIN PROGRAM 10/5/81 PAGE 8
9 10
188 0000H 2 MACDEFPT . . . . . WORD PARAMETER 189
1 0002H 203 MAINP. . . . . . . PROCEDURE STACK=0010H
215 0000H 1 MAKEERRTEXT. . . . BYTE ARRAY(1) EXTERNAL(111)
212 0000H 1 MAXCOL . . . . . . BYTE EXTERNAL(88) 255 257
0000H MEMORY . . . . . . BYTE ARRAY(0) 279
10 MISSIFERR. . . . . LITERALLY
10 MISSINGPSEUDO. . . LITERALLY
10 MISSINSTR. . . . . LITERALLY
10 MISSSEGMINFO . . . LITERALLY
10 MISSTYPEINFO . . . LITERALLY
47 0000H MON1 . . . . . . . PROCEDURE EXTERNAL(12) STACK=0000H
50 0000H MON2 . . . . . . . PROCEDURE BYTE EXTERNAL(13) STACK=0000H
35 0000H 1 N. . . . . . . . . BYTE PARAMETER 36
17 0000H 1 N. . . . . . . . . BYTE PARAMETER 18
44 0000H 2 N. . . . . . . . . WORD PARAMETER 45
41 0000H 2 N. . . . . . . . . WORD PARAMETER 42
38 0000H 1 N. . . . . . . . . BYTE PARAMETER 39
4 NEGLECTED. . . . . LITERALLY
10 NEGLECTERR . . . . LITERALLY
10 NESTEDIFERR. . . . LITERALLY
10 NESTEDINCLUDEERR . LITERALLY
203 0000H NEWCMBODY. . . . . PROCEDURE BYTE EXTERNAL(79) STACK=0000H
206 0000H NEWCMNAME. . . . . PROCEDURE BYTE EXTERNAL(80) STACK=0000H
188 0000H NEWMACRO . . . . . PROCEDURE BYTE EXTERNAL(74) STACK=0000H
185 0000H NEWSYMBOL. . . . . PROCEDURE BYTE EXTERNAL(73) STACK=0000H
5 NIL. . . . . . . . LITERALLY
215 0000H 1 NO . . . . . . . . BYTE EXTERNAL(101) 241
3 NOOVERCOUNT. . . . LITERALLY
3 NOOVERRIDEBIT. . . LITERALLY
9 NULL . . . . . . . LITERALLY
4 NUMBER . . . . . . LITERALLY
8 OAND . . . . . . . LITERALLY
8 OEQ. . . . . . . . LITERALLY
8 OGE. . . . . . . . LITERALLY
8 OGT. . . . . . . . LITERALLY
8 OLAST. . . . . . . LITERALLY
8 OLE. . . . . . . . LITERALLY
8 OLENGTH. . . . . . LITERALLY
8 OLT. . . . . . . . LITERALLY
8 OMOD . . . . . . . LITERALLY
8 ONE. . . . . . . . LITERALLY
8 ONOT . . . . . . . LITERALLY
8 OOFFSET. . . . . . LITERALLY
8 OOR. . . . . . . . LITERALLY
215 0000H 1 OPENERRTEXT. . . . BYTE ARRAY(1) EXTERNAL(108)
74 0000H OPENFILE . . . . . PROCEDURE BYTE EXTERNAL(25) STACK=0000H
119 0000H OPENHEX. . . . . . PROCEDURE EXTERNAL(42) STACK=0000H 227
117 0000H OPENINCLUDE. . . . PROCEDURE EXTERNAL(41) STACK=0000H
225 00DEH 14 OPENOUTPUTFILES. . PROCEDURE STACK=0004H 316
121 0000H OPENPRINT. . . . . PROCEDURE EXTERNAL(43) STACK=0000H 226
77 0000H OPENROFILE . . . . PROCEDURE BYTE EXTERNAL(26) STACK=0000H
115 0000H OPENSOURCE . . . . PROCEDURE EXTERNAL(40) STACK=0000H 315
123 0000H OPENSYMBOL . . . . PROCEDURE EXTERNAL(44) STACK=0000H 228
3 OPERANDSTRUC . . . LITERALLY
4 OPERATOR . . . . . LITERALLY
10 OPMISMATCH . . . . LITERALLY
PL/M-86 COMPILER ASM86 MAIN PROGRAM 10/5/81 PAGE 9
8 OPTR . . . . . . . LITERALLY
8 OSEG . . . . . . . LITERALLY
8 OSHL . . . . . . . LITERALLY
8 OSHORT . . . . . . LITERALLY
8 OSHR . . . . . . . LITERALLY
8 OTYPE. . . . . . . LITERALLY
102 0000H OUTHEXBYTE . . . . PROCEDURE EXTERNAL(35) STACK=0000H
105 0000H OUTPRINTBYTE . . . PROCEDURE EXTERNAL(36) STACK=0000H
108 0000H OUTSYMBOLBYTE. . . PROCEDURE EXTERNAL(37) STACK=0000H
11 0000H OUTTEXT. . . . . . PROCEDURE EXTERNAL(0) STACK=0000H 236 271
275 286 288 289 291 309 312
8 OXOR . . . . . . . LITERALLY
215 0000H 1 PAGETEXT . . . . . BYTE ARRAY(1) EXTERNAL(103)
215 0000H 1 PARERRTEXT . . . . BYTE ARRAY(1) EXTERNAL(107) 312
212 0000H 1 PASS . . . . . . . BYTE EXTERNAL(82) 317 318 319 330 340
253 015AH 38 PASS0INIT. . . . . PROCEDURE STACK=000EH 320
270 0198H 12 PASS0TERMINATE . . PROCEDURE STACK=0006H 341
215 0000H 1 PASS0TEXT. . . . . BYTE ARRAY(1) EXTERNAL(115) 271
262 0180H 8 PASS1INIT. . . . . PROCEDURE STACK=000EH 321
273 01A4H 17 PASS1TERMINATE . . PROCEDURE STACK=0006H 342
215 0000H 1 PASS1TEXT. . . . . BYTE ARRAY(1) EXTERNAL(116) 275
265 0188H 16 PASS2INIT. . . . . PROCEDURE STACK=000EH 322
277 01B5H 125 PASS2TERMINATE . . PROCEDURE STACK=0008H 343
7 PCODEMACRO . . . . LITERALLY
7 PCSEG. . . . . . . LITERALLY
7 PDB. . . . . . . . LITERALLY
7 PDBIT. . . . . . . LITERALLY
7 PDD. . . . . . . . LITERALLY
7 PDSEG. . . . . . . LITERALLY
7 PDW. . . . . . . . LITERALLY
7 PEJECT . . . . . . LITERALLY
7 PEND . . . . . . . LITERALLY
7 PENDIF . . . . . . LITERALLY
7 PENDM. . . . . . . LITERALLY
7 PEQU . . . . . . . LITERALLY
7 PESEG. . . . . . . LITERALLY
7 PIF. . . . . . . . LITERALLY
7 PIFLIST. . . . . . LITERALLY
7 PINCLUDE . . . . . LITERALLY
7 PLIST. . . . . . . LITERALLY
7 PMODRM . . . . . . LITERALLY
7 PNOIFLIST. . . . . LITERALLY
7 PNOLIST. . . . . . LITERALLY
7 PNOSEGFIX. . . . . LITERALLY
7 PORG . . . . . . . LITERALLY
7 PPAGESIZE. . . . . LITERALLY
7 PPAGEWIDTH . . . . LITERALLY
7 PRB. . . . . . . . LITERALLY
7 PRELB. . . . . . . LITERALLY
7 PRELW. . . . . . . LITERALLY
166 0000H PRINTCRLF. . . . . PROCEDURE EXTERNAL(63) STACK=0000H
212 0000H 1 PRINTDEVICE. . . . BYTE EXTERNAL(89) 256 283
9 PRINTER. . . . . . LITERALLY
172 0000H PRINTINIT. . . . . PROCEDURE EXTERNAL(66) STACK=0000H
168 0000H PRINTNEWPAGE . . . PROCEDURE EXTERNAL(64) STACK=0000H
212 0000H 1 PRINTON. . . . . . BYTE EXTERNAL(85) 246 259 266 274
163 0000H PRINTSINGLEBYTE. . PROCEDURE EXTERNAL(62) STACK=0000H
PL/M-86 COMPILER ASM86 MAIN PROGRAM 10/5/81 PAGE 10
170 0000H PRINTSOURCELINE. . PROCEDURE EXTERNAL(65) STACK=0000H
212 0000H 1 PRINTSWITCHOFF . . BYTE EXTERNAL(86) 248
174 0000H PRINTTERMINATE . . PROCEDURE EXTERNAL(67) STACK=0000H 284
2 PROC . . . . . . . LITERALLY 26 29 38 41 44 102 105
108 111 113 115 117 119 121 123 125 127
129 131 133 135 137 140 142 144 146 149
151 153 155 158 161 163 166 168 170 172
174 177 181 183 185 188 191 194 197 200
203 206 209 216 230 245 253 262 265 270
273 277 295
7 PRS. . . . . . . . LITERALLY
7 PRW. . . . . . . . LITERALLY
7 PSEGFIX. . . . . . LITERALLY
4 PSEUDO . . . . . . LITERALLY
10 PSEUDOOPERR. . . . LITERALLY
7 PSIMFORM . . . . . LITERALLY
7 PSSEG. . . . . . . LITERALLY
17 0000H 2 PT . . . . . . . . WORD PARAMETER 18
7 PTITLE . . . . . . LITERALLY
203 0000H 2 PTR. . . . . . . . WORD PARAMETER 204
6 RAH. . . . . . . . LITERALLY
6 RAL. . . . . . . . LITERALLY
6 RAX. . . . . . . . LITERALLY
6 RBH. . . . . . . . LITERALLY
6 RBL. . . . . . . . LITERALLY
6 RBP. . . . . . . . LITERALLY
6 RBX. . . . . . . . LITERALLY
6 RCH. . . . . . . . LITERALLY
6 RCL. . . . . . . . LITERALLY
6 RCS. . . . . . . . LITERALLY 251
6 RCX. . . . . . . . LITERALLY
6 RDH. . . . . . . . LITERALLY
6 RDI. . . . . . . . LITERALLY
6 RDL. . . . . . . . LITERALLY
6 RDS. . . . . . . . LITERALLY
6 RDX. . . . . . . . LITERALLY
59 0000H READCONSOLE. . . . PROCEDURE BYTE EXTERNAL(19) STACK=0000H 233
237
86 0000H READRECORD . . . . PROCEDURE BYTE EXTERNAL(29) STACK=0000H
2 REENT. . . . . . . LITERALLY
4 REG. . . . . . . . LITERALLY
6 RES. . . . . . . . LITERALLY
200 0000H 2 RESULT . . . . . . WORD PARAMETER 201
191 0000H 2 RESULT . . . . . . WORD PARAMETER 192
185 0000H 2 RESULT . . . . . . WORD PARAMETER 186
206 0000H 2 RETURNPTR. . . . . WORD PARAMETER 207
127 0000H REWINDSOURCE . . . PROCEDURE EXTERNAL(46) STACK=0000H
8 RIGHTBRACKET . . . LITERALLY
6 RSI. . . . . . . . LITERALLY
6 RSP. . . . . . . . LITERALLY
6 RSS. . . . . . . . LITERALLY
35 0000H 2 S. . . . . . . . . WORD PARAMETER 36
151 0000H SCAN . . . . . . . PROCEDURE EXTERNAL(57) STACK=0000H 303 304
325 336
149 0000H SCANINIT . . . . . PROCEDURE EXTERNAL(56) STACK=0000H 324
3 SEGMBIT. . . . . . LITERALLY
3 SEGMCOUNT. . . . . LITERALLY
PL/M-86 COMPILER ASM86 MAIN PROGRAM 10/5/81 PAGE 11
3 SEGTYPEBIT . . . . LITERALLY
3 SEGTYPECOUNT . . . LITERALLY
71 0000H SELECTDISK . . . . PROCEDURE EXTERNAL(24) STACK=0000H
97 0000H SETDMAADDRESS. . . PROCEDURE EXTERNAL(33) STACK=0000H
212 0000H 1 SIMFORM. . . . . . BYTE EXTERNAL(90) 254
153 0000H SKIPRESTOFLINE . . PROCEDURE EXTERNAL(58) STACK=0000H
158 0000H SKIPUNTIL. . . . . PROCEDURE BYTE EXTERNAL(60) STACK=0000H
197 0000H 2 SOURCE . . . . . . WORD PARAMETER 198
2 SPACE. . . . . . . LITERALLY
4 SPEC . . . . . . . LITERALLY
155 0000H SPECIALTOKEN . . . PROCEDURE BYTE EXTERNAL(59) STACK=0000H
200 0000H 2 STRADR . . . . . . WORD PARAMETER 201
191 0000H 2 STRADR . . . . . . WORD PARAMETER 192
188 0000H 2 STRADR . . . . . . WORD PARAMETER 189
185 0000H 2 STRADR . . . . . . WORD PARAMETER 186
4 STRING . . . . . . LITERALLY
2 STRUC. . . . . . . LITERALLY
197 0000H 2 SYMBADR. . . . . . WORD PARAMETER 198
194 0000H 2 SYMBADR. . . . . . WORD PARAMETER 195
215 0000H 1 SYMBFULLERRTEXT. . BYTE ARRAY(1) EXTERNAL(113)
183 0000H SYMBINIT . . . . . PROCEDURE EXTERNAL(72) STACK=0000H 258
4 SYMBOL . . . . . . LITERALLY
3 SYMBOLHEAD . . . . LITERALLY
3 SYMBOLSTRUC. . . . LITERALLY
181 0000H SYMBTERMINATE. . . PROCEDURE EXTERNAL(71) STACK=0000H 282
57 0000H SYSTEMRESET. . . . PROCEDURE EXTERNAL(18) STACK=0000H 313 348
11 0000H 2 T. . . . . . . . . WORD PARAMETER 12
2 TAB. . . . . . . . LITERALLY
55 0000H 1 TBUFF. . . . . . . BYTE ARRAY(1) EXTERNAL(16)
14 0000H 2 TEXTADR. . . . . . WORD PARAMETER 15
2 THENDO . . . . . . LITERALLY 297 301 310 327
158 0000H 1 TOK. . . . . . . . BYTE PARAMETER 159
155 0000H 1 TOK. . . . . . . . BYTE PARAMETER 156
2 TRUE . . . . . . . LITERALLY 235 240 250 266 329 337
146 0000H 1 TYP. . . . . . . . BYTE PARAMETER 147
3 TYPEBIT. . . . . . LITERALLY
3 TYPECOUNT. . . . . LITERALLY
4 UDEFSYMB . . . . . LITERALLY
10 UDEFSYMBOL . . . . LITERALLY
32 0000H UPPER. . . . . . . PROCEDURE BYTE EXTERNAL(7) STACK=0000H 237
215 0000H 1 USBREAKTEXT. . . . BYTE ARRAY(1) EXTERNAL(114) 236
278 0000H 1 USEFACT. . . . . . BYTE 279 284 290
174 0000H 1 USEFACT. . . . . . BYTE PARAMETER 175
215 0000H 1 USEFACTOR. . . . . BYTE ARRAY(1) EXTERNAL(105) 289
230 00ECH 63 USERBREAK. . . . . PROCEDURE BYTE STACK=0006H 327
9 VALIDDISK. . . . . LITERALLY
4 VARIABLE . . . . . LITERALLY
245 012BH 47 VARINIT. . . . . . PROCEDURE STACK=000AH 260 263 267
69 0000H VERSION. . . . . . PROCEDURE WORD EXTERNAL(23) STACK=0000H
5 WRD. . . . . . . . LITERALLY
61 0000H WRITECONSOLE . . . PROCEDURE EXTERNAL(20) STACK=0000H 292
64 0000H WRITELIST. . . . . PROCEDURE EXTERNAL(21) STACK=0000H
89 0000H WRITERECORD. . . . PROCEDURE BYTE EXTERNAL(30) STACK=0000H
215 0000H 1 YES. . . . . . . . BYTE EXTERNAL(100) 239
PL/M-86 COMPILER ASM86 MAIN PROGRAM 10/5/81 PAGE 12
MODULE INFORMATION:
CODE AREA SIZE = 025EH 606D
CONSTANT AREA SIZE = 0000H 0D
VARIABLE AREA SIZE = 0001H 1D
MAXIMUM STACK SIZE = 0010H 16D
932 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,185 @@
$title ('ASM86 MAIN PROGRAM')
mainp:
do;
/*
This is the main program of the CP/M 8086
assembler. This module activates the i/o
modules and goes through the source text
in 3 passes. The module then for each source
line calls the external subroutine DECODELINE
to perform assembly of each line;
*/
/*
modified 3/25/81 R. Silberstein
modified 3/28/81 R. Silberstein
modified 3/30/81 R. Silberstein
modified 4/7/81 R. Silberstein
modified 4/20/81 R. Silberstein
modified 6/16/81 R. Silberstein
modified 7/24/81 R. Silberstein
modified 7/27/81 R. Silberstein
modified 8/21/81 R. Silberstein
*/
$include (:f1:macro.lit)
$include (:f1:struc.lit)
$include (:f1:equals.lit)
$include (:f1:dev.lit)
$include (:f1:ermod.lit)
$include (:f1:subr2.ext)
$include (:f1:io.ext)
$include (:f1:files.ext)
$include (:f1:outp.ext)
$include (:f1:scan.ext)
$include (:f1:print.ext)
$include (:f1:symb.ext)
$include (:f1:ermod.ext)
$include (:f1:mglob.ext)
$include (:f1:text.ext)
$include (:f1:dline.ext)
DECLARE ASM86 LABEL PUBLIC;
closefiles: procedure;
call close$source;
call close$print;
call close$symbol;
call close$hex;
end closefiles;
open$output$files: procedure;
CALL OPENPRINT;
CALL OPENHEX;
CALL OPENSYMBOL;
end open$output$files;
userbreak: proc byte; /* test if keyboard break from user */
if not constat then return false; /* test console status */
if readconsole then; /* skip first break key */
do forever;
call outtext(.usbreaktext); /* USER BREAK. OK (Y/N)? */
i=upper(readconsole);
call crlf;
if i = yes then return true;
if i = no then return false;
end$forever;
end userbreak;
varinit: proc;
CALL FILL (0, .PRINT$ON-.CIP, .CIP);
errors=0;
printswitchoff,includeon=false;
IFLEVEL = 0;
IFLIST = TRUE;
csegtype=rcs;
end varinit;
pass0init: proc; /* initialize pass 0 */
simform=false;
maxcol=119;
if printdevice=console then maxcol=79;
call symbinit; /* initialize symbol table */
print$on=false;
call varinit;
end pass0init;
pass1init: proc; /* initialize for pass 1 */
call varinit;
end pass1init;
pass2init: proc; /* initialize for pass 2 (last pass) */
print$on=true;
call varinit;
call emitinit;
end pass2init;
pass0terminate: proc; /* terminate pass 0 */
call outtext(.pass0text); /* End of pass 0 */
end pass0terminate;
pass1terminate: proc; /* terminate pass 1 */
print$on=false; /* dummy */
call outtext(.pass1text); /* End of pass 1 */
end pass1terminate;
pass2terminate: proc; /* terminate pass 2 (last pass) */
DECLARE USEFACT BYTE;
USEFACT = (FREEPT-.MEMORY) / ((ENDOFSYMBTAB-.MEMORY) / 100 + 1);
errorprinted=false;
call emitterminate; /* terminate hex output module */
call symbterminate; /* print symbols */
if printdevice <> console then call printterminate (USEFACT);
CALL CLOSEFILES;
call outtext(.endtext); /* END OF ASSEMBLY... */
call decout(errors,.help(0)); /* print no of errors */
call outtext(.help(2));
CALL OUTTEXT (.USEFACTOR);
CALL DECOUT (USEFACT, .HELP(0));
CALL OUTTEXT (.HELP(3));
CALL WRITECONSOLE (25H); /* % */
CALL CRLF;
end pass2terminate;
include$close: proc (flag);
declare flag byte;
if eofset and include$on then$do
call close$include;
include$on,eofset=false;
if flag then$do
call scan; /* skip EOF */
call scan; /* prepare for next source line */
end$if;
end$if;
end include$close;
ASM86:
call globalinit; /* initialize some globals */
call outtext(.asm86text); /* CP/M 8086 ASSEMBLER.... */
if not filesetup then$do
call outtext(.parerrtext); /* PARAMETER ERROR */
CALL SYSTEMRESET;
end$if;
CALL OPENSOURCE;
CALL OPENOUTPUTFILES;
pass=0ffh;
do while (pass:=pass+1) < 3;
do case pass;
call pass0init; /* pass 0 */
call pass1init; /* pass 1 */
call pass2init; /* pass 2 */
end$case;
call scaninit;
call scan;
do while not eofset;
if userbreak then$do
eofset=true;
pass=3;
else$do
errorprinted=false;
call decodeline;
call includeclose(false); /* close include file if necessary */
call scan;
call includeclose(true); /* close include file if necessary */
end$if;
end$while;
do case pass;
call pass0terminate; /* pass 0 */
call pass1terminate; /* pass 1 */
call pass2terminate; /* pass 2 */
do; end; /* do nothing if userbreak */
end$case;
end$while;
call system$reset;
end$module mainp;

View File

@@ -0,0 +1,45 @@
$nolist
/*
modified 3/28/81 R. Silberstein
*/
dcl
pass byte external, /* current pass no, 1,2,3 */
/* address counters */
cip addr external, /* current instruction pointer */
csegtype byte external, /* current segment type, code,data,
stack or extra data */
/* print output parameters */
print$on byte external, /* on/off flag */
printswitchoff byte external, /* set/reset by NOLIST/LIST */
IFLIST BYTE EXTERNAL, /* SET/RESET BY IFLIST/NOIFLIST */
maxcol byte external, /* pagewidth */
printdevice byte external, /* printfile device */
simform byte external, /* true if formfeed simulation */
/* io error status */
errors addr external, /* counts no of errors */
eofset byte external, /* true if end-of-file found */
/* Mischellaneous variables: */
errorprinted byte external, /* true if an error is printed */
fullsymbtab byte external, /* full if symboltable is full */
include$on byte external, /* true if INCLUDEfile input */
IFLEVEL BYTE EXTERNAL, /* IF-ENDIF NESTING LEVEL */
help(5) byte external, /* ascii number scratch area */
i byte external; /* scratch variable */
globalinit: procedure external; /* initiate some globals */
end globalinit;
$list

View File

@@ -0,0 +1,66 @@
$nolist
/*
modified 6/16/81 R. Silberstein
*/
dcl
push byte external,
repz byte external,
aaa byte external,
movs byte external,
pushf byte external,
MOVSB BYTE EXTERNAL,
adc byte external,
add byte external,
CMPSW BYTE EXTERNAL,
ja byte external,
dec byte external,
loopne byte external,
repnz byte external,
jae byte external,
jg byte external,
clc byte external,
iand byte external,
loopz byte external,
aas byte external,
jl byte external,
in byte external,
cli byte external,
jo byte external,
inc byte external,
lahf byte external,
icall byte external,
jne byte external,
cwd byte external,
jnbe byte external,
cmp byte external,
ior byte external,
callf byte external,
div byte external,
les byte external,
sar byte external,
jmp byte external,
hlt byte external,
lock byte external,
xchg byte external,
ret byte external,
idiv byte external,
jmpf byte external,
mul byte external,
pop byte external,
sti byte external,
inot byte external,
mov byte external,
cmps byte external,
iret byte external,
popf byte external,
imul byte external,
out byte external,
xlat byte external,
jmps byte external,
loope byte external;
$list

View File

@@ -0,0 +1,14 @@
$nolist
/* Convenient literals to compress source: */
declare
h literally 'structure(n address,l byte,p address',
opcod2 literally 'h,a(2) byte)',
opcod3 literally 'h,a(3) byte)',
opcod4 literally 'h,a(4) byte)',
opcod5 literally 'h,a(5) byte)',
opcod6 literally 'h,a(6) byte)';
$list

View File

@@ -0,0 +1,91 @@
PL/M-86 COMPILER INSTRUCTION MNEMONICS MODULE - PART 1 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE MNEM1
OBJECT MODULE PLACED IN MNEM1.OBJ
COMPILER INVOKED BY: :F0: MNEM1.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100)
$title ('INSTRUCTION MNEMONICS MODULE - PART 1')
1 mnem1:
do;
/*
modified 4/10/81 R. Silberstein
modified 6/16/81 R. Silberstein
*/
/***************** INSTRUCTION MNEMONICS *****************/
/*
This is all the instruction mnemonics for
the assembler. The mnemonics are grouped
according to the 6-bit hash value of the
mnemonics - values range from 0 to 0FH.
For each instruction, there is a pointer to
its codemacro definition.
*/
$include (:f1:mnem.lit)
= $nolist
$include (:f1:cmlink.ext)
= $nolist
/********* MNEMONICS TABLE ********/
4 1 declare
/*
* HASH VALUE (HEX) *
---------------------
*/
test opcod4 data (0,4,.test10,'TEST'), /* 0 */
push opcod4 public data (.test,4,.push3,'PUSH'),
SCASW OPCOD5 DATA (0,5,.SCASW1,'SCASW'), /* 1 */
repz opcod4 public data (.SCASW,4,.repe1,'REPZ'),
/* 2 */
aaa opcod3 public data (0,3,.aaa1,'AAA'), /* 3 */
/* 4 */
movs opcod4 public data (0,4,.movs2,'MOVS'), /* 5 */
daa opcod3 data (0,3,.daa1,'DAA'), /* 6 */
aad opcod3 data (.daa,3,.aad1,'AAD'),
pushf opcod5 public data (.aad,5,.pushf1,'PUSHF'),
MOVSB OPCOD5 PUBLIC DATA (0,5,.MOVSB1,'MOVSB'), /* 7 */
adc opcod3 public data (0,3,.adc11,'ADC'), /* 8 */
stos opcod4 data (0,4,.stos2,'STOS'), /* 9 */
PL/M-86 COMPILER INSTRUCTION MNEMONICS MODULE - PART 1 10/5/81 PAGE 2
LODSW OPCOD5 DATA (.STOS,5,.LODSW1,'LODSW'),
add opcod3 public data (.LODSW,3,.add11,'ADD'),
CMPSW OPCOD5 PUBLIC DATA (0,5,.CMPSW1,'CMPSW'), /* 0a */
STOSB OPCOD5 DATA (0,5,.STOSB1,'STOSB'), /* 0b */
ja opcod2 public data (.STOSB,2,.ja1,'JA'),
jb opcod2 data (0,2,.jb1,'JB'), /* 0c */
dec opcod3 public data (.jb,3,.dec3,'DEC'),
JC OPCOD2 DATA (0,2,.JB1,'JC'), /* 0D */
loopne opcod6 public data (.JC,6,.loopne1,'LOOPNE'),
/* 0e */
aam opcod3 data (0,3,.aam1,'AAM'), /* 0f */
je opcod2 data (.aam,2,.je1,'JE'),
repnz opcod5 public data (.je,5,.repne1,'REPNZ');
5 1 end mnem1;
MODULE INFORMATION:
CODE AREA SIZE = 0000H 0D
CONSTANT AREA SIZE = 00D2H 210D
VARIABLE AREA SIZE = 0000H 0D
MAXIMUM STACK SIZE = 0000H 0D
195 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,64 @@
$title ('INSTRUCTION MNEMONICS MODULE - PART 1')
mnem1:
do;
/*
modified 4/10/81 R. Silberstein
modified 6/16/81 R. Silberstein
*/
/***************** INSTRUCTION MNEMONICS *****************/
/*
This is all the instruction mnemonics for
the assembler. The mnemonics are grouped
according to the 6-bit hash value of the
mnemonics - values range from 0 to 0FH.
For each instruction, there is a pointer to
its codemacro definition.
*/
$include (:f1:mnem.lit)
$include (:f1:cmlink.ext)
/********* MNEMONICS TABLE ********/
declare
/*
* HASH VALUE (HEX) *
---------------------
*/
test opcod4 data (0,4,.test10,'TEST'), /* 0 */
push opcod4 public data (.test,4,.push3,'PUSH'),
SCASW OPCOD5 DATA (0,5,.SCASW1,'SCASW'), /* 1 */
repz opcod4 public data (.SCASW,4,.repe1,'REPZ'),
/* 2 */
aaa opcod3 public data (0,3,.aaa1,'AAA'), /* 3 */
/* 4 */
movs opcod4 public data (0,4,.movs2,'MOVS'), /* 5 */
daa opcod3 data (0,3,.daa1,'DAA'), /* 6 */
aad opcod3 data (.daa,3,.aad1,'AAD'),
pushf opcod5 public data (.aad,5,.pushf1,'PUSHF'),
MOVSB OPCOD5 PUBLIC DATA (0,5,.MOVSB1,'MOVSB'), /* 7 */
adc opcod3 public data (0,3,.adc11,'ADC'), /* 8 */
stos opcod4 data (0,4,.stos2,'STOS'), /* 9 */
LODSW OPCOD5 DATA (.STOS,5,.LODSW1,'LODSW'),
add opcod3 public data (.LODSW,3,.add11,'ADD'),
CMPSW OPCOD5 PUBLIC DATA (0,5,.CMPSW1,'CMPSW'), /* 0a */
STOSB OPCOD5 DATA (0,5,.STOSB1,'STOSB'), /* 0b */
ja opcod2 public data (.STOSB,2,.ja1,'JA'),
jb opcod2 data (0,2,.jb1,'JB'), /* 0c */
dec opcod3 public data (.jb,3,.dec3,'DEC'),
JC OPCOD2 DATA (0,2,.JB1,'JC'), /* 0D */
loopne opcod6 public data (.JC,6,.loopne1,'LOOPNE'),
/* 0e */
aam opcod3 data (0,3,.aam1,'AAM'), /* 0f */
je opcod2 data (.aam,2,.je1,'JE'),
repnz opcod5 public data (.je,5,.repne1,'REPNZ');
end mnem1;

View File

@@ -0,0 +1,100 @@
PL/M-86 COMPILER INSTRUCTION MNEMONICS MODULE - PART 2 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE MNEM2
OBJECT MODULE PLACED IN MNEM2.OBJ
COMPILER INVOKED BY: :F0: MNEM2.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100)
$title ('INSTRUCTION MNEMONICS MODULE - PART 2')
1 mnem2:
do;
/*
modified 4/10/81 R. Silberstein
modified 6/16/81 R. Silberstein
modified 7/24/81 R. Silberstein
*/
/***************** INSTRUCTION MNEMONICS *****************/
/*
This is all the instruction mnemonics for
the assembler. The mnemonics are grouped
according to the 6-bit hash value of the
mnemonics - values range from 10H to 1FH.
For each instruction, there is a pointer to
its codemacro definition.
*/
$include (:f1:mnem.lit)
= $nolist
$include (:f1:cmlink.ext)
= $nolist
/********* MNEMONICS TABLE ********/
4 1 declare
/*
* HASH VALUE (HEX) *
---------------------
*/
jae opcod3 public data (0,3,.jae1,'JAE'), /* 10 */
jbe opcod3 data (0,3,.jbe1,'JBE'), /* 11 */
jg opcod2 public data (.jbe,2,.jg1,'JG'),
lea opcod3 data (0,3,.lea1,'LEA'), /* 12 */
clc opcod3 public data (.lea,3,.clc1,'CLC'),
cmc opcod3 data (0,3,.cmc1,'CMC'), /* 13 */
cld opcod3 data (.cmc,3,.cld1,'CLD'),
iand opcod3 public data (.cld,3,.and10,'AND'),
loopz opcod5 public data (0,5,.loope1,'LOOPZ'), /* 14 */
aas opcod3 public data (0,3,.aas1,'AAS'), /* 15 */
jge opcod3 data (0,3,.jge1,'JGE'), /* 16 */
jl opcod2 public data (.jge,2,.jl1,'JL'),
sbb opcod3 data (0,3,.sbb11,'SBB'), /* 17 */
in opcod2 public data (.sbb,2,.in4,'IN'),
PL/M-86 COMPILER INSTRUCTION MNEMONICS MODULE - PART 2 10/5/81 PAGE 2
das opcod3 data (0,3,.das1,'DAS'), /* 18 */
cli opcod3 public data (.das,3,.cli1,'CLI'),
jna opcod3 data (0,3,.jbe1,'JNA'), /* 19 */
jo opcod2 public data (.jna,2,.jo1,'JO'),
jnb opcod3 data (0,3,.jae1,'JNB'), /* 1a */
jp opcod2 data (.jnb,2,.jp1,'JP'),
neg opcod3 data (.jp,3,.neg2,'NEG'),
inc opcod3 public data (.neg,3,.inc3,'INC'),
JNC OPCOD3 DATA (0,3,.JAE1,'JNC'), /* 1B */
esc opcod3 data (.JNC,3,.esc3,'ESC'),
jle opcod3 data (.esc,3,.jle1,'JLE'),
lahf opcod4 public data (.jle,4,.lahf1,'LAHF'),
cbw opcod3 data (0,3,.cbw1,'CBW'), /* 1c */
MOVSW OPCOD5 DATA (.CBW,5,.MOVSW1,'MOVSW'),
icall opcod4 public data (.MOVSW,4,.call3,'CALL'),
js opcod2 data (0,2,.js1,'JS'), /* 1d */
jne opcod3 public data (.js,3,.jne1,'JNE'),
jnae opcod4 data (0,4,.jb1,'JNAE'), /* 1e */
cwd opcod3 public data (.jnae,3,.cwd1,'CWD'),
jpe opcod3 data (0,3,.jp1,'JPE'), /* 1f */
jng opcod3 data (.jpe,3,.jle1,'JNG'),
jnbe opcod4 public data (.jng,4,.ja1,'JNBE');
5 1 end mnem2;
MODULE INFORMATION:
CODE AREA SIZE = 0000H 0D
CONSTANT AREA SIZE = 0122H 290D
VARIABLE AREA SIZE = 0000H 0D
MAXIMUM STACK SIZE = 0000H 0D
204 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,73 @@
$title ('INSTRUCTION MNEMONICS MODULE - PART 2')
mnem2:
do;
/*
modified 4/10/81 R. Silberstein
modified 6/16/81 R. Silberstein
modified 7/24/81 R. Silberstein
*/
/***************** INSTRUCTION MNEMONICS *****************/
/*
This is all the instruction mnemonics for
the assembler. The mnemonics are grouped
according to the 6-bit hash value of the
mnemonics - values range from 10H to 1FH.
For each instruction, there is a pointer to
its codemacro definition.
*/
$include (:f1:mnem.lit)
$include (:f1:cmlink.ext)
/********* MNEMONICS TABLE ********/
declare
/*
* HASH VALUE (HEX) *
---------------------
*/
jae opcod3 public data (0,3,.jae1,'JAE'), /* 10 */
jbe opcod3 data (0,3,.jbe1,'JBE'), /* 11 */
jg opcod2 public data (.jbe,2,.jg1,'JG'),
lea opcod3 data (0,3,.lea1,'LEA'), /* 12 */
clc opcod3 public data (.lea,3,.clc1,'CLC'),
cmc opcod3 data (0,3,.cmc1,'CMC'), /* 13 */
cld opcod3 data (.cmc,3,.cld1,'CLD'),
iand opcod3 public data (.cld,3,.and10,'AND'),
loopz opcod5 public data (0,5,.loope1,'LOOPZ'), /* 14 */
aas opcod3 public data (0,3,.aas1,'AAS'), /* 15 */
jge opcod3 data (0,3,.jge1,'JGE'), /* 16 */
jl opcod2 public data (.jge,2,.jl1,'JL'),
sbb opcod3 data (0,3,.sbb11,'SBB'), /* 17 */
in opcod2 public data (.sbb,2,.in4,'IN'),
das opcod3 data (0,3,.das1,'DAS'), /* 18 */
cli opcod3 public data (.das,3,.cli1,'CLI'),
jna opcod3 data (0,3,.jbe1,'JNA'), /* 19 */
jo opcod2 public data (.jna,2,.jo1,'JO'),
jnb opcod3 data (0,3,.jae1,'JNB'), /* 1a */
jp opcod2 data (.jnb,2,.jp1,'JP'),
neg opcod3 data (.jp,3,.neg2,'NEG'),
inc opcod3 public data (.neg,3,.inc3,'INC'),
JNC OPCOD3 DATA (0,3,.JAE1,'JNC'), /* 1B */
esc opcod3 data (.JNC,3,.esc3,'ESC'),
jle opcod3 data (.esc,3,.jle1,'JLE'),
lahf opcod4 public data (.jle,4,.lahf1,'LAHF'),
cbw opcod3 data (0,3,.cbw1,'CBW'), /* 1c */
MOVSW OPCOD5 DATA (.CBW,5,.MOVSW1,'MOVSW'),
icall opcod4 public data (.MOVSW,4,.call3,'CALL'),
js opcod2 data (0,2,.js1,'JS'), /* 1d */
jne opcod3 public data (.js,3,.jne1,'JNE'),
jnae opcod4 data (0,4,.jb1,'JNAE'), /* 1e */
cwd opcod3 public data (.jnae,3,.cwd1,'CWD'),
jpe opcod3 data (0,3,.jp1,'JPE'), /* 1f */
jng opcod3 data (.jpe,3,.jle1,'JNG'),
jnbe opcod4 public data (.jng,4,.ja1,'JNBE');
end mnem2;

View File

@@ -0,0 +1,105 @@
PL/M-86 COMPILER INSTRUCTION MNEMONICS MODULE - PART 3 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE MNEM3
OBJECT MODULE PLACED IN MNEM3.OBJ
COMPILER INVOKED BY: :F0: MNEM3.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100)
$title ('INSTRUCTION MNEMONICS MODULE - PART 3')
1 mnem3:
do;
/*
modified 6/16/81 R. Silberstein
*/
/***************** INSTRUCTION MNEMONICS *****************/
/*
This is all the instruction mnemonics for
the assembler. The mnemonics are grouped
according to the 6-bit hash value of the
mnemonics - values range from 20H to 2FH.
For each instruction, there is a pointer to
its codemacro definition.
*/
$include (:f1:mnem.lit)
= $nolist
$include (:f1:cmlink.ext)
= $nolist
/********* MNEMONICS TABLE ********/
4 1 declare
/*
* HASH VALUE (HEX) *
---------------------
*/
isal opcod3 data (0,3,.sal4,'SAL'), /* 20 */
STOSW OPCOD5 DATA (.ISAL,5,.STOSW1,'STOSW'),
cmp opcod3 public data (.STOSW,3,.cmp11,'CMP'),
rcl opcod3 data (0,3,.rcl4,'RCL'), /* 21 */
ior opcod2 public data (.rcl,2,.or10,'OR'),
loopnz opcod6 data (0,6,.loopne1,'LOOPNZ'), /* 22 */
sahf opcod4 data (.loopnz,4,.sahf1,'SAHF'),
callf opcod5 public data (.sahf,5,.callf2,'CALLF'),
lds opcod3 data (0,3,.lds1,'LDS'), /* 23 */
div opcod3 public data (.lds,3,.div2,'DIV'),
jnge opcod4 data (0,4,.jl1,'JNGE'), /* 24 */
jnl opcod3 data (.jnge,3,.jge1,'JNL'),
jz opcod2 data (.jnl,2,.je1,'JZ'),
les opcod3 public data (.jz,3,.les1,'LES'),
/* 25 */
sar opcod3 public data (0,3,.sar4,'SAR'), /* 26 */
PL/M-86 COMPILER INSTRUCTION MNEMONICS MODULE - PART 3 10/5/81 PAGE 2
jno opcod3 data (0,3,.jno1,'JNO'), /* 27 */
rcr opcod3 data (.jno,3,.rcr4,'RCR'),
rep opcod3 data (.rcr,3,.rep1,'REP'),
ishl opcod3 data (.rep,3,.sal4,'SHL'),
jmp opcod3 public data (.ishl,3,.jmp2,'JMP'),
jnp opcod3 data (0,3,.jnp1,'JNP'), /* 28 */
hlt opcod3 public data (.jnp,3,.hlt1,'HLT'),
jnle opcod4 data (0,4,.jg1,'JNLE'), /* 29 */
jpo opcod3 data (.jnle,3,.jnp1,'JPO'),
lock opcod4 public data (.jpo,4,.lock1,'LOCK'),
scas opcod4 data (0,4,.scas2,'SCAS'), /* 2a */
stc opcod3 data (.scas,3,.stc1,'STC'),
sub opcod3 data (.stc,3,.sub11,'SUB'),
xchg opcod4 public data (.sub,4,.xchg6,'XCHG'),
jns opcod3 data (0,3,.jns1,'JNS'), /* 2b */
std opcod3 data (.jns,3,.std1,'STD'),
int opcod3 data (.std,3,.int2,'INT'),
ret opcod3 public data (.int,3,.ret3,'RET'),
repe opcod4 data (0,4,.repe1,'REPE'), /* 2c */
SCASB OPCOD5 DATA (.REPE,5,.SCASB1,'SCASB'),
idiv opcod4 public data (.SCASB,4,.idiv2,'IDIV'),
nop opcod3 data (0,3,.nop1,'NOP'), /* 2d */
rol opcod3 data (.nop,3,.rol4,'ROL'),
ishr opcod3 data (.rol,3,.shr4,'SHR'),
jmpf opcod4 public data (.ishr,4,.jmpf2,'JMPF'),
mul opcod3 public data (0,3,.mul2,'MUL'), /* 2e */
pop opcod3 public data (0,3,.pop4,'POP'); /* 2f */
5 1 end mnem3;
MODULE INFORMATION:
CODE AREA SIZE = 0000H 0D
CONSTANT AREA SIZE = 0160H 352D
VARIABLE AREA SIZE = 0000H 0D
MAXIMUM STACK SIZE = 0000H 0D
209 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,78 @@
$title ('INSTRUCTION MNEMONICS MODULE - PART 3')
mnem3:
do;
/*
modified 6/16/81 R. Silberstein
*/
/***************** INSTRUCTION MNEMONICS *****************/
/*
This is all the instruction mnemonics for
the assembler. The mnemonics are grouped
according to the 6-bit hash value of the
mnemonics - values range from 20H to 2FH.
For each instruction, there is a pointer to
its codemacro definition.
*/
$include (:f1:mnem.lit)
$include (:f1:cmlink.ext)
/********* MNEMONICS TABLE ********/
declare
/*
* HASH VALUE (HEX) *
---------------------
*/
isal opcod3 data (0,3,.sal4,'SAL'), /* 20 */
STOSW OPCOD5 DATA (.ISAL,5,.STOSW1,'STOSW'),
cmp opcod3 public data (.STOSW,3,.cmp11,'CMP'),
rcl opcod3 data (0,3,.rcl4,'RCL'), /* 21 */
ior opcod2 public data (.rcl,2,.or10,'OR'),
loopnz opcod6 data (0,6,.loopne1,'LOOPNZ'), /* 22 */
sahf opcod4 data (.loopnz,4,.sahf1,'SAHF'),
callf opcod5 public data (.sahf,5,.callf2,'CALLF'),
lds opcod3 data (0,3,.lds1,'LDS'), /* 23 */
div opcod3 public data (.lds,3,.div2,'DIV'),
jnge opcod4 data (0,4,.jl1,'JNGE'), /* 24 */
jnl opcod3 data (.jnge,3,.jge1,'JNL'),
jz opcod2 data (.jnl,2,.je1,'JZ'),
les opcod3 public data (.jz,3,.les1,'LES'),
/* 25 */
sar opcod3 public data (0,3,.sar4,'SAR'), /* 26 */
jno opcod3 data (0,3,.jno1,'JNO'), /* 27 */
rcr opcod3 data (.jno,3,.rcr4,'RCR'),
rep opcod3 data (.rcr,3,.rep1,'REP'),
ishl opcod3 data (.rep,3,.sal4,'SHL'),
jmp opcod3 public data (.ishl,3,.jmp2,'JMP'),
jnp opcod3 data (0,3,.jnp1,'JNP'), /* 28 */
hlt opcod3 public data (.jnp,3,.hlt1,'HLT'),
jnle opcod4 data (0,4,.jg1,'JNLE'), /* 29 */
jpo opcod3 data (.jnle,3,.jnp1,'JPO'),
lock opcod4 public data (.jpo,4,.lock1,'LOCK'),
scas opcod4 data (0,4,.scas2,'SCAS'), /* 2a */
stc opcod3 data (.scas,3,.stc1,'STC'),
sub opcod3 data (.stc,3,.sub11,'SUB'),
xchg opcod4 public data (.sub,4,.xchg6,'XCHG'),
jns opcod3 data (0,3,.jns1,'JNS'), /* 2b */
std opcod3 data (.jns,3,.std1,'STD'),
int opcod3 data (.std,3,.int2,'INT'),
ret opcod3 public data (.int,3,.ret3,'RET'),
repe opcod4 data (0,4,.repe1,'REPE'), /* 2c */
SCASB OPCOD5 DATA (.REPE,5,.SCASB1,'SCASB'),
idiv opcod4 public data (.SCASB,4,.idiv2,'IDIV'),
nop opcod3 data (0,3,.nop1,'NOP'), /* 2d */
rol opcod3 data (.nop,3,.rol4,'ROL'),
ishr opcod3 data (.rol,3,.shr4,'SHR'),
jmpf opcod4 public data (.ishr,4,.jmpf2,'JMPF'),
mul opcod3 public data (0,3,.mul2,'MUL'), /* 2e */
pop opcod3 public data (0,3,.pop4,'POP'); /* 2f */
end mnem3;

View File

@@ -0,0 +1,93 @@
PL/M-86 COMPILER INSTRUCTION MNEMONICS MODULE - PART 4 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE MNEM4
OBJECT MODULE PLACED IN MNEM4.OBJ
COMPILER INVOKED BY: :F0: MNEM4.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100)
$title ('INSTRUCTION MNEMONICS MODULE - PART 4')
1 mnem4:
do;
/*
modified 6/16/81 R. Silberstein
*/
/***************** INSTRUCTION MNEMONICS *****************/
/*
This is all the instruction mnemonics for
the assembler. The mnemonics are grouped
according to the 6-bit hash value of the
mnemonics - values range from 30H to 3FH.
For each instruction, there is a pointer to
its codemacro definition.
*/
$include (:f1:mnem.lit)
= $nolist
$include (:f1:cmlink.ext)
= $nolist
/********* MNEMONICS TABLE ********/
4 1 declare
/*
* HASH VALUE (HEX) *
---------------------
*/
sti opcod3 public data (0,3,.sti1,'STI'), /* 30 */
retf opcod4 data (0,4,.retf3,'RETF'), /* 31 */
inot opcod3 public data (.retf,3,.not2,'NOT'),
lods opcod4 data (0,4,.lods2,'LODS'), /* 32 */
jnz opcod3 data (.lods,3,.jne1,'JNZ'),
mov opcod3 public data (.jnz,3,.mov17,'MOV'),
ror opcod3 data (0,3,.ror4,'ROR'), /* 33 */
cmps opcod4 public data (.ror,4,.cmps2,'CMPS'),
LODSB OPCOD5 DATA (0,5,.LODSB1,'LODSB'), /* 34 */
iret opcod4 public data (.lodsb,4,.iret1,'IRET'),
wait opcod4 data (0,4,.wait1,'WAIT'), /* 35 */
CMPSB OPCOD5 DATA (.WAIT,5,.CMPSB1,'CMPSB'),
popf opcod4 public data (.CMPSB,4,.popf1,'POPF'),
/* 36 */
imul opcod4 public data (0,4,.imul2,'IMUL'), /* 37 */
out opcod3 public data (0,3,.out4,'OUT'), /* 38 */
PL/M-86 COMPILER INSTRUCTION MNEMONICS MODULE - PART 4 10/5/81 PAGE 2
retn opcod4 data (0,4,.ret3,'RETN'), /* 39 */
ixor opcod3 data (.retn,3,.xor10,'XOR'),
xlat opcod4 public data (.ixor,4,.xlat1,'XLAT'),
repne opcod5 data (0,5,.repne1,'REPNE'), /* 3a */
into opcod4 data (.repne,4,.into1,'INTO'),
loop opcod4 data (.into,4,.loop1,'LOOP'),
jmps opcod4 public data (.loop,4,.jmps1,'JMPS'),
/* 3b */
/* 3c */
/* 3d */
/* 3e */
jcxz opcod4 data (0,4,.jcxz1,'JCXZ'), /* 3f */
loope opcod5 public data (.jcxz,5,.loope1,'LOOPE');
/**************** END OF MNEMONIC TABLE ****************/
5 1 end mnem4;
MODULE INFORMATION:
CODE AREA SIZE = 0000H 0D
CONSTANT AREA SIZE = 00D5H 213D
VARIABLE AREA SIZE = 0000H 0D
MAXIMUM STACK SIZE = 0000H 0D
197 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,66 @@
$title ('INSTRUCTION MNEMONICS MODULE - PART 4')
mnem4:
do;
/*
modified 6/16/81 R. Silberstein
*/
/***************** INSTRUCTION MNEMONICS *****************/
/*
This is all the instruction mnemonics for
the assembler. The mnemonics are grouped
according to the 6-bit hash value of the
mnemonics - values range from 30H to 3FH.
For each instruction, there is a pointer to
its codemacro definition.
*/
$include (:f1:mnem.lit)
$include (:f1:cmlink.ext)
/********* MNEMONICS TABLE ********/
declare
/*
* HASH VALUE (HEX) *
---------------------
*/
sti opcod3 public data (0,3,.sti1,'STI'), /* 30 */
retf opcod4 data (0,4,.retf3,'RETF'), /* 31 */
inot opcod3 public data (.retf,3,.not2,'NOT'),
lods opcod4 data (0,4,.lods2,'LODS'), /* 32 */
jnz opcod3 data (.lods,3,.jne1,'JNZ'),
mov opcod3 public data (.jnz,3,.mov17,'MOV'),
ror opcod3 data (0,3,.ror4,'ROR'), /* 33 */
cmps opcod4 public data (.ror,4,.cmps2,'CMPS'),
LODSB OPCOD5 DATA (0,5,.LODSB1,'LODSB'), /* 34 */
iret opcod4 public data (.lodsb,4,.iret1,'IRET'),
wait opcod4 data (0,4,.wait1,'WAIT'), /* 35 */
CMPSB OPCOD5 DATA (.WAIT,5,.CMPSB1,'CMPSB'),
popf opcod4 public data (.CMPSB,4,.popf1,'POPF'),
/* 36 */
imul opcod4 public data (0,4,.imul2,'IMUL'), /* 37 */
out opcod3 public data (0,3,.out4,'OUT'), /* 38 */
retn opcod4 data (0,4,.ret3,'RETN'), /* 39 */
ixor opcod3 data (.retn,3,.xor10,'XOR'),
xlat opcod4 public data (.ixor,4,.xlat1,'XLAT'),
repne opcod5 data (0,5,.repne1,'REPNE'), /* 3a */
into opcod4 data (.repne,4,.into1,'INTO'),
loop opcod4 data (.into,4,.loop1,'LOOP'),
jmps opcod4 public data (.loop,4,.jmps1,'JMPS'),
/* 3b */
/* 3c */
/* 3d */
/* 3e */
jcxz opcod4 data (0,4,.jcxz1,'JCXZ'), /* 3f */
loope opcod5 public data (.jcxz,5,.loope1,'LOOPE');
/**************** END OF MNEMONIC TABLE ****************/
end mnem4;

View File

@@ -0,0 +1,13 @@
$nolist
emitinit: proc external;
end emitinit;
emitterminate: proc external;
end emitterminate;
emitcodebyte: proc(ch,typ) external;
dcl (ch,typ) byte;
end emitcodebyte;
$list

View File

@@ -0,0 +1,30 @@
$nolist
/* Output hex-record types: */
dcl
eoftype lit '01h', /* Common to both hex formats */
starttype lit '03h',
INTELdata lit '00h', /* INTEL hex format */
INTELsegment lit '02h',
DRcodedata lit '81h', /* Digital Research hex format */
DRdatadata lit '82h',
DRstackdata lit '83h',
DRextradata lit '84h',
DRcodesegm lit '85h',
DRdatasegm lit '86h',
DRstacksegm lit '87h',
DRextrasegm lit '88h',
CSdata lit '04h', /* Data types used inside assembler */
DSdata lit '05h',
SSdata lit '06h',
ESdata lit '07h',
CSvalue lit '08h',
DSvalue lit '09h',
SSvalue lit '0ah',
ESvalue lit '0bh';
$list

View File

@@ -0,0 +1,542 @@
PL/M-86 COMPILER HEX OUTPUT MODULE 10/5/81 PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE HEXOUT
OBJECT MODULE PLACED IN OUTP.OBJ
COMPILER INVOKED BY: :F0: OUTP.PLM DEBUG OPTIMIZE(2) DATE(10/5/81) PAGEWIDTH(100) XREF
$title ('HEX OUTPUT MODULE')
1 hexout:
do;
/*
modified 3/28/81 R. Silberstein
modified 3/30/81 R. Silberstein
modified 4/9/81 R. Silberstein
*/
/*
This is the module to produce the (hex-)output
from the assembler. The interface to other modules
goes through the subroutine
EMITCODEBYTE (outputbyte,segmenttype).
This routine outputs one byte of generated code of
a specified segment type (code,data,stack,extra).
The subroutine also updates the value of the current
instruction pointer of the current segment (CIP),
and prints the output code on the print line.
*/
$include (:f1:macro.lit)
= $nolist
$include (:f1:struc.lit)
= $nolist
$include (:f1:outp.lit)
= $nolist
$include (:f1:subr2.ext)
= $nolist
$include (:f1:files.ext)
= $nolist
$include (:f1:global.ext)
= $nolist
84 1 dcl
empty lit '0ffh', /* buffer empty value */
recordlimit lit '30', /* max no of bytes pr record */
loccip addr, /* local copy of instruction pointer */
startfound byte, /* true if start record sent */
gtyp byte, /* incomming byte type */
gbyt byte, /* incomming byte */
curtyp byte, /* current byte type */
sum byte, /* used to compute check sum */
buffer (35) byte, /* record buffer (RECORDLIMIT+5) */
PL/M-86 COMPILER HEX OUTPUT MODULE 10/5/81 PAGE 2
recordlg byte at (.buffer(0)),
recordtype byte at (.buffer(3)),
offsetaddr addr at (.buffer(1)),
bufpt byte, /* buffer index */
/* Record type conversion table */
/* ( to be changed later ??? ) */
rectyp$I$tab(12) byte data
(0ffh,eoftype,0ffh,starttype,INTELdata,INTELdata,
INTELdata,INTELdata,INTELsegment,INTELsegment,INTELsegment,
INTELsegment),
rectyp$D$tab(12) byte data
(0ffh,eoftype,0ffh,starttype,DRcodedata,DRdatadata,
DRstackdata,DRextradata,DRcodesegm,DRdatasegm,DRstacksegm,
DRextrasegm);
/*********** subroutines **********/
85 1 rectyptab: procedure(n) byte;
86 2 declare n byte;
87 2 if intel$hex$on then$do
89 3 return rectyp$I$tab(n);
90 3 else$do
92 3 return rectyp$D$tab(n);
93 3 end$if;
94 2 end rectyptab;
95 1 switch$high$low: procedure(p);
96 2 declare p address, ch based p byte, (s1,s2) byte;
97 2 s1=ch;
98 2 p=p+1;
99 2 s2=ch;
100 2 ch=s1;
101 2 p=p-1;
102 2 ch=s2;
103 2 end switch$high$low;
104 1 writebyt: proc (ch);
105 2 dcl ch byte;
106 2 call outhexbyte(ch);
107 2 end writebyt;
108 1 writerecord: proc; /* write current recor to file */
109 2 call switch$high$low(.offsetaddr);
110 2 recordlg=bufpt-4;
111 2 sum=0; /* compute check sum */
112 2 i=0ffh;
113 2 do while (i:=i+1) < bufpt;
114 3 sum=sum+buffer(i);
115 3 end$while;
116 2 buffer(bufpt)=-sum; /* check sum */
117 2 call writebyt(':');
PL/M-86 COMPILER HEX OUTPUT MODULE 10/5/81 PAGE 3
118 2 do i=0 to bufpt; /* print hexbytes to file */
119 3 call hex1out(buffer(i),.help(0));
120 3 call writebyt(help(0));
121 3 call writebyt(help(1));
122 3 end$do;
123 2 call writebyt(cr);
124 2 call writebyt(lf);
125 2 end writerecord;
126 1 enternewbyt: proc(b); /* enter a new byte into buffer */
127 2 dcl b byte;
128 2 if bufpt > recordlimit then$do /* test if record full */
130 3 call writerecord;
131 3 offsetaddr=cip;
132 3 bufpt=4;
133 3 end$if;
134 2 buffer(bufpt)=b;
135 2 bufpt=bufpt+1;
136 2 end enternewbyt;
137 1 enterinput: proc;
138 2 call enternewbyt(gbyt);
139 2 end enterinput;
140 1 eofrecord: proc; /* write end-of-file record to file */
141 2 if curtyp<>empty then call writerecord;
143 2 recordtype=rectyptab(eoftype);
144 2 offsetaddr=0;
145 2 bufpt=4;
146 2 call writerecord;
147 2 end eofrecord;
148 1 startrecord: proc; /* write a start record to file */
149 2 dcl seglow byte at (.csegvalue),seghigh byte at (.csegvalue+1),
offslow byte at (.cip),offshigh byte at (.cip+1);
150 2 if pass=2 then$do
152 3 startfound=true;
153 3 if curtyp <> empty then call writerecord;
155 3 bufpt=4;
156 3 offsetaddr=0;
157 3 recordtype=rectyptab(starttype);
158 3 if csegspec then$do
160 4 call enternewbyt(seghigh);
161 4 call enternewbyt(seglow);
162 4 else$do
164 4 call enternewbyt(0);
165 4 call enternewbyt(0);
166 4 end$if;
167 3 call enternewbyt(offshigh);
168 3 call enternewbyt(offslow);
169 3 call writerecord;
170 3 curtyp=empty;
171 3 end$if;
172 2 end startrecord;
173 1 segmbyte: proc; /* write a segment value byte to file */
174 2 if pass = 2 then$do
PL/M-86 COMPILER HEX OUTPUT MODULE 10/5/81 PAGE 4
176 3 if curtyp <> gtyp then$do
178 4 if curtyp <> empty then call writerecord;
180 4 curtyp=gtyp;
181 4 recordtype=rectyptab(gtyp);
182 4 offsetaddr=0;
183 4 bufpt=4;
184 4 call enterinput;
185 4 else$do
187 4 call enterinput;
188 4 call writerecord;
189 4 curtyp=empty;
190 4 end$if;
191 3 end$if;
192 2 end segmbyte;
193 1 databyte: proc; /* write a data byte to file */
194 2 if pass=2 then$do
196 3 if (curtyp <> gtyp) or (loccip <> cip) then$do
198 4 if curtyp<>empty then call writerecord;
200 4 curtyp=gtyp;
201 4 recordtype=rectyptab(gtyp);
202 4 offsetaddr=cip;
203 4 bufpt=4;
204 4 end$if;
205 3 call enterinput;
206 3 call hex1out(gbyt,.prefix(prefixptr)); /* output to listing */
207 3 prefixptr=prefixptr+2;
208 3 end$if;
209 2 cip=cip+1; /* update instruction pointer */
210 2 loccip=cip;
211 2 end databyte;
212 1 emitinit: proc public;
213 2 startfound=false;
214 2 curtyp=empty;
215 2 end emitinit;
216 1 emitterminate: proc public;
217 2 call eofrecord; /* write EOF record */
218 2 end emitterminate;
219 1 emitcodebyte: proc (b,typ) public;
220 2 dcl (b,typ) byte;
221 2 gbyt=b; /* move to global variables */
222 2 gtyp=typ;
223 2 do case typ-CSdata;
224 3 do; /* CS data */
225 4 if not startfound then$do
227 5 call startrecord;
228 5 end$if;
229 4 call databyte;
230 4 end;
231 3 call databyte; /* DS data */
232 3 call databyte; /* SS data */
233 3 call databyte; /* ES data */
PL/M-86 COMPILER HEX OUTPUT MODULE 10/5/81 PAGE 5
234 3 call segmbyte; /* CS value */
235 3 call segmbyte; /* DS value */
236 3 call segmbyte; /* SS value */
237 3 call segmbyte; /* ES value */
238 3 end$case;
239 2 end emitcodebyte;
240 1 end$module hexout;
PL/M-86 COMPILER HEX OUTPUT MODULE 10/5/81 PAGE 6
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
81 0000H 4 ABSADDR. . . . . . BYTE ARRAY(4) EXTERNAL(62)
81 0000H 1 ACCLEN . . . . . . BYTE EXTERNAL(66)
81 0000H 1 ACCLENSAVE . . . . BYTE EXTERNAL(69)
81 0000H 80 ACCUM. . . . . . . BYTE ARRAY(80) EXTERNAL(67)
81 0000H 80 ACCUMSAVE. . . . . BYTE ARRAY(80) EXTERNAL(68)
2 ADDR . . . . . . . LITERALLY 6 12 30 33 36 39 77
81 84
20 0000H ALPHANUMERIC . . . PROCEDURE BYTE EXTERNAL(5) STACK=0000H
23 0000H ASCIICHAR. . . . . PROCEDURE BYTE EXTERNAL(6) STACK=0000H
219 0006H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 220 221
126 0004H 1 B. . . . . . . . . BYTE PARAMETER AUTOMATIC 127 134
81 0008H 1 BASEINDEX. . . . . BYTE MEMBER(CURRENTSYMBOL)
81 0008H 1 BASEINDEX. . . . . BYTE MEMBER(OPERANDS)
3 BASEREGBIT . . . . LITERALLY
3 BASEREGCOUNT . . . LITERALLY
3 BREGBIT. . . . . . LITERALLY
3 BREGCOUNT. . . . . LITERALLY
84 0007H 35 BUFFER . . . . . . BYTE ARRAY(35) 84 114 116 119 134
84 002AH 1 BUFPT. . . . . . . BYTE 110 113 116 118 128 132 134 135
145 155 183 203
14 0000H 1 CH . . . . . . . . BYTE PARAMETER 15
104 0004H 1 CH . . . . . . . . BYTE PARAMETER AUTOMATIC 105 106
47 0000H 1 CH . . . . . . . . BYTE PARAMETER 48
41 0000H 1 CH . . . . . . . . BYTE PARAMETER 42
26 0000H 1 CH . . . . . . . . BYTE PARAMETER 27
20 0000H 1 CH . . . . . . . . BYTE PARAMETER 21
11 0000H 1 CH . . . . . . . . BYTE PARAMETER 12
23 0000H 1 CH . . . . . . . . BYTE PARAMETER 24
44 0000H 1 CH . . . . . . . . BYTE PARAMETER 45
96 0000H 1 CH . . . . . . . . BYTE BASED(P) 97 99 100 102
17 0000H 1 CH . . . . . . . . BYTE PARAMETER 18
81 0000H 2 CIP. . . . . . . . WORD EXTERNAL(31) 131 149 196 202 209
210
70 0000H CLOSEHEX . . . . . PROCEDURE EXTERNAL(25) STACK=0000H
68 0000H CLOSEINCLUDE . . . PROCEDURE EXTERNAL(24) STACK=0000H
72 0000H CLOSEPRINT . . . . PROCEDURE EXTERNAL(26) STACK=0000H
64 0000H CLOSESOURCE. . . . PROCEDURE EXTERNAL(22) STACK=0000H
74 0000H CLOSESYMBOL. . . . PROCEDURE EXTERNAL(27) STACK=0000H
81 0000H 1 CODEMACROFLAG. . . BYTE EXTERNAL(88)
3 CODEMACROHEAD. . . LITERALLY
81 0000H 2 CODEMACROPTR . . . WORD EXTERNAL(83)
2 CR . . . . . . . . LITERALLY 123
81 0000H 2 CSCIP. . . . . . . WORD EXTERNAL(36)
4 CSDATA . . . . . . LITERALLY 223
81 0000H 1 CSEGSPEC . . . . . BYTE EXTERNAL(34) 158
81 0000H 1 CSEGTYPE . . . . . BYTE EXTERNAL(32)
81 0000H 2 CSEGVALUE. . . . . WORD EXTERNAL(33) 149
81 0000H 1 CSPEC. . . . . . . BYTE EXTERNAL(43)
4 CSVALUE. . . . . . LITERALLY
PL/M-86 COMPILER HEX OUTPUT MODULE 10/5/81 PAGE 7
81 0000H 2 CURCSEG. . . . . . WORD EXTERNAL(39)
81 0000H 2 CURDSEG. . . . . . WORD EXTERNAL(40)
81 0000H 2 CURESEG. . . . . . WORD EXTERNAL(42)
81 0000H 9 CURRENTSYMBOL. . . STRUCTURE EXTERNAL(79)
81 0000H 2 CURSSEG. . . . . . WORD EXTERNAL(41)
84 0005H 1 CURTYP . . . . . . BYTE 141 153 170 176 178 180 189 196
198 200 214
38 0000H 2 D. . . . . . . . . WORD PARAMETER 39
35 0000H 2 D. . . . . . . . . WORD PARAMETER 36
29 0000H 2 D. . . . . . . . . WORD PARAMETER 30
32 0000H 2 D. . . . . . . . . WORD PARAMETER 33
193 01EDH 100 DATABYTE . . . . . PROCEDURE STACK=001AH 229 231 232 233
2 DCL. . . . . . . . LITERALLY
38 0000H DECOUT . . . . . . PROCEDURE EXTERNAL(11) STACK=0000H
81 0000H 1 DEFAULTDRIVE . . . BYTE EXTERNAL(86)
81 0001H 1 DESCR. . . . . . . BYTE MEMBER(TOKEN)
76 0000H 1 DEV. . . . . . . . BYTE PARAMETER 77
14 0000H DIGIT. . . . . . . PROCEDURE BYTE EXTERNAL(3) STACK=0000H
4 DRCODEDATA . . . . LITERALLY 84
4 DRCODESEGM . . . . LITERALLY 84
4 DRDATADATA . . . . LITERALLY 84
4 DRDATASEGM . . . . LITERALLY 84
4 DREXTRADATA. . . . LITERALLY 84
4 DREXTRASEGM. . . . LITERALLY 84
4 DRSTACKDATA. . . . LITERALLY 84
4 DRSTACKSEGM. . . . LITERALLY 84
81 0000H 2 DSCIP. . . . . . . WORD EXTERNAL(38)
4 DSDATA . . . . . . LITERALLY
81 0000H 1 DSPEC. . . . . . . BYTE EXTERNAL(44)
4 DSVALUE. . . . . . LITERALLY
2 ELSEDO . . . . . . LITERALLY
219 0268H 70 EMITCODEBYTE . . . PROCEDURE PUBLIC STACK=0022H
212 0251H 15 EMITINIT . . . . . PROCEDURE PUBLIC STACK=0002H
216 0260H 8 EMITTERMINATE. . . PROCEDURE PUBLIC STACK=0014H
84 EMPTY. . . . . . . LITERALLY 141 153 170 178 189 198 214
2 ENDCASE. . . . . . LITERALLY
2 ENDDO. . . . . . . LITERALLY
2 ENDFOREVER . . . . LITERALLY
2 ENDIF. . . . . . . LITERALLY
2 ENDMODULE. . . . . LITERALLY
2 ENDOFFILE. . . . . LITERALLY
2 ENDPROC. . . . . . LITERALLY
2 ENDWHILE . . . . . LITERALLY
137 0112H 12 ENTERINPUT . . . . PROCEDURE STACK=0016H 184 187 205
126 00E5H 45 ENTERNEWBYT. . . . PROCEDURE STACK=0012H 138 160 161 164
165 167 168
140 011EH 38 EOFRECORD. . . . . PROCEDURE STACK=0010H 217
81 0000H 1 EOFSET . . . . . . BYTE EXTERNAL(70)
4 EOFTYPE. . . . . . LITERALLY 84 143
29 0000H EQUAL. . . . . . . PROCEDURE BYTE EXTERNAL(8) STACK=0000H
81 0000H 1 ERRORPRINTED . . . BYTE EXTERNAL(73)
81 0000H 2 ERRORS . . . . . . WORD EXTERNAL(63)
81 0000H 2 ESCIP. . . . . . . WORD EXTERNAL(35)
4 ESDATA . . . . . . LITERALLY
81 0000H 1 ESPEC. . . . . . . BYTE EXTERNAL(46)
4 ESVALUE. . . . . . LITERALLY
2 FALSE. . . . . . . LITERALLY 213
PL/M-86 COMPILER HEX OUTPUT MODULE 10/5/81 PAGE 8
8 0000H 2 FCBADR . . . . . . WORD PARAMETER 9
8 0000H FILEABORT. . . . . PROCEDURE EXTERNAL(1) STACK=0000H
3 FILEISTRUCTURE . . LITERALLY
3 FILEOSTRUCTURE . . LITERALLY
79 0000H FILESETUP. . . . . PROCEDURE BYTE EXTERNAL(29) STACK=0000H
11 0000H FILL . . . . . . . PROCEDURE EXTERNAL(2) STACK=0000H
76 0000H 2 FILNAM . . . . . . WORD PARAMETER 77
76 0000H 2 FILTYP . . . . . . WORD PARAMETER 77
81 0000H 2 FIRSTMACROPTR. . . WORD EXTERNAL(74)
2 FOREVER. . . . . . LITERALLY
2 FORMFEED . . . . . LITERALLY
81 0000H 1 FULLSYMBTAB. . . . BYTE EXTERNAL(76)
84 0004H 1 GBYT . . . . . . . BYTE 138 206 221
82 0000H GLOBALINIT . . . . PROCEDURE EXTERNAL(89) STACK=0000H
84 0003H 1 GTYP . . . . . . . BYTE 176 180 181 196 200 201 222
81 0000H 5 HELP . . . . . . . BYTE ARRAY(5) EXTERNAL(84) 119 120 121
32 0000H HEX1OUT. . . . . . PROCEDURE EXTERNAL(9) STACK=0000H 119 206
35 0000H HEX2OUT. . . . . . PROCEDURE EXTERNAL(10) STACK=0000H
1 0000H HEXOUT . . . . . . PROCEDURE STACK=0000H
81 0000H 1 I. . . . . . . . . BYTE EXTERNAL(85) 112 113 114 118 119
76 0000H IFILESETUP . . . . PROCEDURE EXTERNAL(28) STACK=0000H
81 0000H 1 IFLEVEL. . . . . . BYTE EXTERNAL(78)
81 0000H 1 IFLIST . . . . . . BYTE EXTERNAL(49)
81 0000H 1 INCLUDEDEFAULT . . BYTE EXTERNAL(87)
81 0000H 1 INCLUDEON. . . . . BYTE EXTERNAL(77)
3 INDEXREGBIT. . . . LITERALLY
3 INDEXREGCOUNT. . . LITERALLY
52 0000H ININCLUDEBYTE. . . PROCEDURE BYTE EXTERNAL(16) STACK=0000H
2 INIT . . . . . . . LITERALLY
50 0000H INSOURCEBYTE . . . PROCEDURE BYTE EXTERNAL(15) STACK=0000H
4 INTELDATA. . . . . LITERALLY 84
81 0000H 1 INTELHEXON . . . . BYTE EXTERNAL(71) 87
4 INTELSEGMENT . . . LITERALLY 84
3 IREGBIT. . . . . . LITERALLY
3 IREGCOUNT. . . . . LITERALLY
81 0000H 2 LENGTH . . . . . . WORD MEMBER(OPERANDS)
81 0000H 2 LENGTH . . . . . . WORD MEMBER(CURRENTSYMBOL)
17 0000H LETTER . . . . . . PROCEDURE BYTE EXTERNAL(4) STACK=0000H
2 LF . . . . . . . . LITERALLY 124
2 LIT. . . . . . . . LITERALLY 2 3 4 84
84 0000H 2 LOCCIP . . . . . . WORD 196 210
81 0000H 2 MACROPTR . . . . . WORD EXTERNAL(75)
81 0000H 1 MAXCOL . . . . . . BYTE EXTERNAL(50)
11 0000H 1 N. . . . . . . . . BYTE PARAMETER 12
38 0000H 2 N. . . . . . . . . WORD PARAMETER 39
35 0000H 2 N. . . . . . . . . WORD PARAMETER 36
32 0000H 1 N. . . . . . . . . BYTE PARAMETER 33
29 0000H 1 N. . . . . . . . . BYTE PARAMETER 30
85 0004H 1 N. . . . . . . . . BYTE PARAMETER AUTOMATIC 86 89 92
81 0000H 1 NEXTCH . . . . . . BYTE EXTERNAL(65)
81 0000H 1 NOERROR. . . . . . BYTE EXTERNAL(72)
81 0000H 1 NOOPER . . . . . . BYTE EXTERNAL(81)
3 NOOVERCOUNT. . . . LITERALLY
3 NOOVERRIDEBIT. . . LITERALLY
81 0006H 2 OFFSET . . . . . . WORD MEMBER(OPERANDS)
81 0006H 2 OFFSET . . . . . . WORD MEMBER(CURRENTSYMBOL)
84 0008H 2 OFFSETADDR . . . . WORD AT 109 131 144 156 182 202
PL/M-86 COMPILER HEX OUTPUT MODULE 10/5/81 PAGE 9
149 0001H 1 OFFSHIGH . . . . . BYTE EXTERNAL(31) AT 167
149 0000H 1 OFFSLOW. . . . . . BYTE EXTERNAL(31) AT 168
58 0000H OPENHEX. . . . . . PROCEDURE EXTERNAL(19) STACK=0000H
56 0000H OPENINCLUDE. . . . PROCEDURE EXTERNAL(18) STACK=0000H
60 0000H OPENPRINT. . . . . PROCEDURE EXTERNAL(20) STACK=0000H
54 0000H OPENSOURCE . . . . PROCEDURE EXTERNAL(17) STACK=0000H
62 0000H OPENSYMBOL . . . . PROCEDURE EXTERNAL(21) STACK=0000H
81 0000H 36 OPERANDS . . . . . STRUCTURE ARRAY(4) EXTERNAL(82)
3 OPERANDSTRUC . . . LITERALLY 81
41 0000H OUTHEXBYTE . . . . PROCEDURE EXTERNAL(12) STACK=0000H 106
44 0000H OUTPRINTBYTE . . . PROCEDURE EXTERNAL(13) STACK=0000H
47 0000H OUTSYMBOLBYTE. . . PROCEDURE EXTERNAL(14) STACK=0000H
5 0000H OUTTEXT. . . . . . PROCEDURE EXTERNAL(0) STACK=0000H
95 0004H 2 P. . . . . . . . . WORD PARAMETER AUTOMATIC 96 97 98 99
100 101 102
81 0000H 1 PAGESIZE . . . . . BYTE EXTERNAL(56)
81 0000H 1 PASS . . . . . . . BYTE EXTERNAL(30) 150 174 194
81 0000H 240 PREFIX . . . . . . BYTE ARRAY(240) EXTERNAL(60) 206
81 0000H 1 PREFIXPTR. . . . . BYTE EXTERNAL(61) 206 207
81 0000H 1 PRINTDEVICE. . . . BYTE EXTERNAL(53)
81 0000H 1 PRINTON. . . . . . BYTE EXTERNAL(47)
81 0000H 1 PRINTSWITCHOFF . . BYTE EXTERNAL(48)
2 PROC . . . . . . . LITERALLY 20 23 32 35 38 41 44
47 50 52 54 56 58 60 62 64 66
68 70 72 74 76 79 104 108 126 137
140 148 173 193 212 216 219
11 0000H 2 PT . . . . . . . . WORD PARAMETER 12
84 0007H 1 RECORDLG . . . . . BYTE AT 110
84 RECORDLIMIT. . . . LITERALLY 128
84 000AH 1 RECORDTYPE . . . . BYTE AT 143 157 181 201
84 000CH 12 RECTYPDTAB . . . . BYTE ARRAY(12) DATA 92
84 0000H 12 RECTYPITAB . . . . BYTE ARRAY(12) DATA 89
85 0000H 34 RECTYPTAB. . . . . PROCEDURE BYTE STACK=0004H 143 157 181
201
2 REENT. . . . . . . LITERALLY
66 0000H REWINDSOURCE . . . PROCEDURE EXTERNAL(23) STACK=0000H
29 0000H 2 S. . . . . . . . . WORD PARAMETER 30
96 002BH 1 S1 . . . . . . . . BYTE 97 100
96 002CH 1 S2 . . . . . . . . BYTE 99 102
81 0000H 12 SAVESOURCE . . . . BYTE ARRAY(12) EXTERNAL(52)
149 0001H 1 SEGHIGH. . . . . . BYTE EXTERNAL(33) AT 160
149 0000H 1 SEGLOW . . . . . . BYTE EXTERNAL(33) AT 161
3 SEGMBIT. . . . . . LITERALLY
173 01A9H 68 SEGMBYTE . . . . . PROCEDURE STACK=001AH 234 235 236 237
3 SEGMCOUNT. . . . . LITERALLY
81 0004H 2 SEGMENT. . . . . . WORD MEMBER(OPERANDS)
81 0004H 2 SEGMENT. . . . . . WORD MEMBER(CURRENTSYMBOL)
3 SEGTYPEBIT . . . . LITERALLY
3 SEGTYPECOUNT . . . LITERALLY
81 0003H 1 SFLAG. . . . . . . BYTE MEMBER(OPERANDS)
81 0003H 1 SFLAG. . . . . . . BYTE MEMBER(CURRENTSYMBOL)
81 0000H 1 SIMFORM. . . . . . BYTE EXTERNAL(57)
81 0000H 80 SOURCEBUF. . . . . BYTE ARRAY(80) EXTERNAL(58)
81 0000H 12 SOURCENAME . . . . BYTE ARRAY(12) EXTERNAL(51)
81 0000H 1 SOURCEPTR. . . . . BYTE EXTERNAL(59)
2 SPACE. . . . . . . LITERALLY
81 0000H 2 SSCIP. . . . . . . WORD EXTERNAL(37)
PL/M-86 COMPILER HEX OUTPUT MODULE 10/5/81 PAGE 10
4 SSDATA . . . . . . LITERALLY
81 0000H 1 SSPEC. . . . . . . BYTE EXTERNAL(45)
4 SSVALUE. . . . . . LITERALLY
84 0002H 1 STARTFOUND . . . . BYTE 152 213 225
148 0144H 101 STARTRECORD. . . . PROCEDURE STACK=0016H 227
4 STARTTYPE. . . . . LITERALLY 84 157
2 STRUC. . . . . . . LITERALLY 81
81 0002H 1 STYPE. . . . . . . BYTE MEMBER(OPERANDS)
81 0002H 1 STYPE. . . . . . . BYTE MEMBER(CURRENTSYMBOL)
84 0006H 1 SUM. . . . . . . . BYTE 111 114 116
95 0022H 42 SWITCHHIGHLOW. . . PROCEDURE STACK=0004H 109
81 0000H 1 SYMBOLDEVICE . . . BYTE EXTERNAL(54)
3 SYMBOLHEAD . . . . LITERALLY
3 SYMBOLSTRUC. . . . LITERALLY 81
81 0000H 2 SYMBTABADR . . . . WORD EXTERNAL(80)
5 0000H 2 T. . . . . . . . . WORD PARAMETER 6
2 TAB. . . . . . . . LITERALLY
8 0000H 2 TEXTADR. . . . . . WORD PARAMETER 9
2 THENDO . . . . . . LITERALLY 87 128 150 158 174 176 194
196 225
81 0000H 30 TITLE. . . . . . . BYTE ARRAY(30) EXTERNAL(55)
81 0000H 4 TOKEN. . . . . . . STRUCTURE EXTERNAL(64)
2 TRUE . . . . . . . LITERALLY 152
219 0004H 1 TYP. . . . . . . . BYTE PARAMETER AUTOMATIC 220 222 223
81 0000H 1 TYPE . . . . . . . BYTE MEMBER(TOKEN)
3 TYPEBIT. . . . . . LITERALLY
3 TYPECOUNT. . . . . LITERALLY
26 0000H UPPER. . . . . . . PROCEDURE BYTE EXTERNAL(7) STACK=0000H
81 0002H 2 VALUE. . . . . . . WORD MEMBER(TOKEN)
104 004CH 13 WRITEBYT . . . . . PROCEDURE STACK=0008H 117 120 121 123
124
108 0059H 140 WRITERECORD. . . . PROCEDURE STACK=000CH 130 142 146 154
169 179 188 199
MODULE INFORMATION:
CODE AREA SIZE = 02AEH 686D
CONSTANT AREA SIZE = 0018H 24D
VARIABLE AREA SIZE = 002DH 45D
MAXIMUM STACK SIZE = 0022H 34D
611 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

Some files were not shown because too many files have changed in this diff Show More