mirror of
https://github.com/PDP-10/its.git
synced 2026-01-22 18:42:15 +00:00
152 lines
4.7 KiB
Plaintext
Executable File
152 lines
4.7 KiB
Plaintext
Executable File
; -*-MIDAS-*-
|
|
|
|
comment |
|
|
This macro package is for use in programs which can assemble for more
|
|
than one operating system. An assembly parameter exists for each possible
|
|
operating system; if it is nonzero then the assembly is for that operating
|
|
system. Thus if "FOO" is the name of the parameter for an operating system,
|
|
then "IFN FOO" is a conditional which assembles iff the output is for that
|
|
system. Corresponding parameters are defined to specify on which operating
|
|
system the assembly is taking place. The currently defined parameter names
|
|
are "ITS" for the ITS, "10X" for Tenex, and "20X" for Tops-20. In addition
|
|
"TNX" is defined to be 10X\20X since Tenex and Tops-20 are very much alike.
|
|
To use this package set to 1 the operating system parameters for which
|
|
the program is willing to assemble and then .INSRT this package. Do this
|
|
on pass 1 only. For example,
|
|
if1 [
|
|
its==1 ; can assemble for either ITS or Tops-20
|
|
20x==1 ; (but not Tenex)
|
|
.insrt system
|
|
]
|
|
All undefined operating system switches will be set to zero (thus the
|
|
program need not know about all the systems defined in this package).
|
|
If more than one switch is nonzero then the user will be asked at assembly
|
|
time "System? ". Entering a blank line will default to the system on
|
|
which the assembly is taking place. Entering "?" will list the valid
|
|
responses. Finally entering an operating systme name will select that
|
|
system. Once the system is determined all the other operating system
|
|
switches will be set to zero.
|
|
Finally the output format is selected on the basis of the target
|
|
system and the $$REL switch (which defaults to zero, i.e. non-relocatable).
|
|
If the target system is not the same as the assembly system then the
|
|
symbol definitions for the target system are .INSRT'd.
|
|
|
|
|
|
|
; Determine which system we're assembling on.
|
|
.its==:ife .osmidas-sixbit/its/,[1] .else [0]
|
|
.10x==:ife .osmidas-sixbit/tenex/,[1] .else [0]
|
|
.20x==:ife .osmidas-sixbit/twenex/,[1] .else [0]
|
|
.dec==:ife .osmidas-sixbit/dec/,[1] .else [0]
|
|
.tnx==.10x\.20x
|
|
|
|
|
|
ifdef tnx, ifn tnx, 10x==1 ? 20x==1 ; TNX==1 is like 10X==1 and 20X==1
|
|
|
|
; Program doesn't run on a system unless it explicitly says so.
|
|
ifndef its, its==0 ; ITS
|
|
ifndef 10x, 10x==0 ; Tenex
|
|
ifndef 20x, 20x==0 ; Tops-20
|
|
ifndef dec, dec==0 ; Tops-10
|
|
ife its\10x\20x\dec, .fatal No operating system(s) specified
|
|
|
|
ifndef $$ask,$$ask==1 ; Default is to ask question if necessary.
|
|
ife $$ask,[ ; Don't ask, just use system we're assembling on.
|
|
ifn its&.its, 10x==0 ? 20x==0 ? dec==0
|
|
.else [ ifn 10x&.10x, its==0 ? 20x==0 ? dec==0
|
|
.else [ ifn 20x&.20x, its==0 ? 10x==0 ? dec==0
|
|
.else [ ifn dec&.dec, its==0 ? 10x==0 ? 20x==0
|
|
.else [ $$ask==1
|
|
]]]]
|
|
]
|
|
ifn $$ask*<its+10x+20x+dec-1>,[
|
|
define system ; need macro to use .TAG and .GO
|
|
.tag retry
|
|
printx "System? "
|
|
.ttymac -response
|
|
ifn its, ifse [response][ITS] 10x==0 ? 20x==0 ? dec==0 ? .stop
|
|
ifn 10x, ifse [response][Tenex] its==0 ? 20x==0 ? dec==0 ? .stop
|
|
ifn 20x, ifse [response][Tops-20] its==0 ? 10x==0 ? dec==0 ? .stop
|
|
ifn 20x, ifse [response][Twenex] its==0 ? 10x==0 ? dec==0 ? .stop
|
|
ifn dec, ifse [response][Tops-10] its==0 ? 10x==0 ? 20x==0 ? .stop
|
|
ifn dec, ifse [response][Bots-10] its==0 ? 10x==0 ? 20x==0 ? .stop
|
|
ifse [response][?]{
|
|
printx "One of the following:
|
|
"
|
|
ifn its, printx " ITS "
|
|
ifn 10x, printx " Tenex "
|
|
ifn 20x, printx " Twenex "
|
|
ifn dec, printx " Tops-10 "
|
|
printx "
|
|
"
|
|
.go retry
|
|
}
|
|
ifb [response]{
|
|
ifn its&.its, 10x==0 ? 20x==0 ? dec==0 ? .stop
|
|
ifn 10x&.10x, its==0 ? 20x==0 ? dec==0 ? .stop
|
|
ifn 20x&.20x, its==0 ? 10x==0 ? dec==0 ? .stop
|
|
ifn dec&.dec, its==0 ? 10x==0 ? 20x==0 ? .stop
|
|
}
|
|
printx |"response" is not valid. Type "?" for list.
|
|
|
|
|
.go retry
|
|
termin
|
|
termin
|
|
system ; ask which system to assemble for
|
|
expunge system ; macro is no longer needed
|
|
]
|
|
|
|
tnx==10x\20x ; TNX iff either 10X or 20X
|
|
|
|
|
|
; Now that the operating system is determined, pick an output format.
|
|
ifndef $$rel, $$rel==:0 ; default is not to use crufty linkers
|
|
ife $$rel,[
|
|
ifn its, ife .its, sblk
|
|
ife its, .decsav
|
|
]
|
|
ifn $$rel,[
|
|
ifn its, relocatable
|
|
ife its, .decrel
|
|
]
|
|
|
|
; Remove the multitude of output format pseudos now that we've picked one.
|
|
expunge .decsav,.decrel,.dectwo,.sldr,1pass,relocatable,rim,rim10,sblk
|
|
|
|
|
|
ifn its, ife .its, .insrt itsdfs
|
|
ifn tnx,[
|
|
ife .tnx,[
|
|
ifn .its,[
|
|
.insrt sys;tnxdfs
|
|
.tnxjs
|
|
.insrt sys;twxbts
|
|
]
|
|
ife .its,[
|
|
.insrt tnxdfs
|
|
.tnxjs
|
|
.insrt twxbts
|
|
]
|
|
]
|
|
]
|
|
ifn dec,[
|
|
ife .dec, [
|
|
ifn .its,[
|
|
.insrt sys;decdfs
|
|
.insrt sys;decbts
|
|
]
|
|
ife .its,[
|
|
.insrt decdfs
|
|
.insrt decbts
|
|
]
|
|
]
|
|
]
|
|
|
|
|
|
; Page size definitions
|
|
ifn its, pg$log==:10.
|
|
ifn tnx, pg$log==:9.
|
|
ifn its\tnx,[
|
|
pg$siz==:1_pg$log
|
|
pg$msk==:pg$siz-1
|
|
]
|