mirror of
https://github.com/PDP-10/its.git
synced 2026-02-13 11:34:04 +00:00
Add IMDEFS for assembling Imlac programs.
This is .INSRTed in Imlac assembly language source files to reconfigure MIDAS for use as an Imlac assembler.
This commit is contained in:
2
Makefile
2
Makefile
@@ -10,7 +10,7 @@ SRC = system syseng sysen1 sysen2 sysen3 sysnet kshack dragon channa \
|
||||
spcwar rwg libmax rat z emaxim rz maxtul aljabr cffk das ell ellen \
|
||||
jim jm jpg macrak maxdoc maxsrc mrg munfas paulw reh rlb rlb% share \
|
||||
tensor transl wgd zz graphs lmlib pratt quux scheme gsb ejs mudsys \
|
||||
draw wl taa tj6 budd sharem ucode rvb kldcp math as
|
||||
draw wl taa tj6 budd sharem ucode rvb kldcp math as imsrc
|
||||
DOC = info _info_ sysdoc sysnet syshst kshack _teco_ emacs emacs1 c kcc \
|
||||
chprog sail draw wl pc tj6 share _glpr_ _xgpr_ inquir mudman system \
|
||||
xfont maxout ucode moon acount alan channa fonts games graphs humor \
|
||||
|
||||
610
src/imsrc/imdefs.40
Normal file
610
src/imsrc/imdefs.40
Normal file
@@ -0,0 +1,610 @@
|
||||
TITLE IMLAC DEFS
|
||||
|
||||
; DEFINITIONS CONDITIONALIZED ON SYMBOLS "PDS4" AND "MAXADR"
|
||||
.LSTOFF
|
||||
|
||||
IFN 0,[ ; defines this as a symbol file to @ program
|
||||
.AUXIL
|
||||
]
|
||||
DEFINE SUBTTL ARG
|
||||
TERMIN
|
||||
SUBTTL MIDAS MODIFICATIONS
|
||||
.MLLIT==1
|
||||
|
||||
; expung MIDAS duplicate symbols
|
||||
EXPUNG XOR AND IOR ADD SUB TSN PUSH POP CALL CLEAR
|
||||
|
||||
; set up IMLAC 16 bit formats (LAST 4 ARE REDUNDANT)
|
||||
.FORMA 24,001300200000 ; A B OPCODE ADDRESS
|
||||
.FORMA 25,001300201701 ; A B C USED WITH A=INDIR. BIT
|
||||
.FORMA 27,001010100000 ; A B,C A IGNORED
|
||||
.FORMA 32,000010100000 ; A,,
|
||||
.FORMA 33,001000001010 ; A,,B
|
||||
.FORMA 34,001010100000 ; A,B
|
||||
|
||||
; Required symbo definitions
|
||||
IFNDEF PDS4,PDS4=0 ; Imlac PDS-4 instruction set
|
||||
IFNDEF MOUSE,MOUSE=0
|
||||
IFNDEF MAXADR,MAXADR=17777
|
||||
IFNDEF MUDDLE,MUDDLE=0
|
||||
IFNDEF AIKBD,AIKBD=0 ; A.I. type kbd in use
|
||||
IFNDEF .ADDR.,.ADDR.=0 ; 8K display addressing mod in use
|
||||
IFNDEF CSIZE,CSIZE=22.
|
||||
|
||||
; special IMLAC END statement
|
||||
EQUALS ...END END
|
||||
EXPUNG END
|
||||
|
||||
DEFINE PAGECK A,B
|
||||
IF2 [ PRINTC %!A!B
|
||||
%]
|
||||
TERMIN
|
||||
|
||||
DEFINE END ARG
|
||||
IFSN ARG,,[
|
||||
VARIAB
|
||||
CONSTA
|
||||
...ZZZ==.
|
||||
LOC MAXADR-64
|
||||
I JMP .+1
|
||||
ARG
|
||||
LOC ...ZZZ
|
||||
]
|
||||
EQUALS END ...END
|
||||
EXPUNG ...END
|
||||
END
|
||||
TERMIN
|
||||
|
||||
; miscellaneous definitions. Note PDS4 should be defined
|
||||
I=1 ; USED FOR INDIRECTION SYNTAX (E.G. I DAC FOO)
|
||||
MINUS1=177777 ; 16-bit minus 1 for masking etc.
|
||||
|
||||
SUBTTL IMLAC INTERRUPT BITS
|
||||
; interrupt bits
|
||||
IFE PDS4,[ ; PDS-1 CODES
|
||||
PEN==1 ; light pen
|
||||
REF==2 ; display refresh
|
||||
MPV==4 ; memory protect violation
|
||||
TTI==10 ; tty in
|
||||
KBD==20 ; keyboard
|
||||
TTO==40 ; tty out
|
||||
MSE==100 ; joystick, mouse, or trackball
|
||||
]
|
||||
.ELSE,[ ; PDS-4 FIRST INTERUPT WORD BITS
|
||||
KBD==100000 ; KEYBOARD (#1)
|
||||
TTYR==40000 ; TTY RECEIVE
|
||||
TTYX==20000 ; TTY SEND (XMIT)
|
||||
PTP==10000 ; PT PUNCH
|
||||
PRT==4000 ; PRINTER (VERSATEC?)
|
||||
FKB1==2000 ; FUNCTION KEYBOARD #1
|
||||
FKB2==1000 ; FUNCTION KEYBOARD #2
|
||||
PTR==400 ; PT READER
|
||||
PEN==200 ; LIGHT PEN
|
||||
TKAR==100 ; SECOND TTY INTERFACE RECEIVE
|
||||
TKAX==40 ; SECOND TTY INTERFACE SEND (XMIT)
|
||||
IN16==20 ; 16-BIT PARALLEL INTERFACE, INPUT
|
||||
OUT16==10 ; 16-BIT PARALLEL INTERFACE, OUTPUT
|
||||
INTR4==4 ; BIT-4 INTERUPT (NOT USED OR SPECIAL)
|
||||
SYNC==2 ? REF==SYNC ; 40 CYCLE SYNC
|
||||
DHLTI==1 ; DISPLAY HALT INTERUPT
|
||||
|
||||
; SECOND INTERUPT WORD BITS
|
||||
|
||||
KBD2==100000 ; SECOND KEYBOARD (A.I. TYPE?)
|
||||
INTR1==40000 ;INTR. BIT 40000 N.U. OR SPECIAL
|
||||
INTR2==20000 ;INTR. BIT 20000 N.U. OR SPECIAL
|
||||
MPV==10000 ; MEMORY PROTECTION VIOLATION
|
||||
MSE==4000 ; GRAPHIC MOUSE BUTTON
|
||||
JYST==2000 ; JOYSTICK OR TRACKBALL
|
||||
MT==1000 ; MAGNETIC TAPE
|
||||
INTR7==400 ; INTR. BIT 400 N. U. OR SPECIAL
|
||||
TBL==200 ; GRAPHIC TABLET
|
||||
INTR9==100 ; INTR. BIT 100 N. U. OR SPECIAL
|
||||
HCY==20 ; HARD COPY OR STORAGE TUBE
|
||||
INTR12==10 ; INTR. BIT 20 N.U. OR SPECIAL
|
||||
INTR13==4 ; INTR. BIT 10 N.U. OR SPECIAL
|
||||
CLK==2 ; PROGRAMMABLE CLOCK
|
||||
FLTP==1 ; FLOATING PT. PROCESSOR
|
||||
|
||||
; SECOND LEVEL INTERUPTS ARE NOT GIVEN SINCE THEY ARE
|
||||
; USED WITH DMA DEVICES (DISC, MOBY MAG TAPE, ETC.)
|
||||
]
|
||||
|
||||
SUBTTL IMLAC OP CODES
|
||||
; instructions
|
||||
|
||||
; operate instructions
|
||||
|
||||
; manipulative
|
||||
HLT=000000 ; halt
|
||||
OPR=100000 ; operate class
|
||||
NOP=100000 ; no-operation
|
||||
CLA=100001 ; clear ac
|
||||
CMA=100002 ; complement ac
|
||||
STA=100003 ; set ac to all ones
|
||||
IAC=100004 ; increment ac
|
||||
COA=100005 ; load ac with one
|
||||
CIA=100006 ; complement and increment ac
|
||||
CLL=100010 ; clear link
|
||||
CAL=100011 ; clear ac and link
|
||||
CML=100020 ; complement link
|
||||
STL=100030 ; set link
|
||||
ODA=100040 ; or data switches
|
||||
LDA=100041 ; read data switches
|
||||
|
||||
; conditionals (skip if ...)
|
||||
ASZ=002001 ; ac zero
|
||||
ASN=102001 ; ac non-zero
|
||||
ASP=002002 ; ac positive
|
||||
ASM=102002 ; ac negative
|
||||
LSZ=002004 ; link zero
|
||||
LSN=102004 ; link non-zero
|
||||
DSF=002010 ; display on
|
||||
DSN=102010 ; display off
|
||||
KSF=002020 ; keyboard has character
|
||||
KSN=102020 ; keyboard doesn't have char
|
||||
RSF=002040 ; tty has input
|
||||
RSN=102040 ; tty has no input
|
||||
TSF=002100 ; tty done sending
|
||||
TSN=102100 ; tty not done sending
|
||||
SSF=002200 ; 40 cyc sync on
|
||||
SSN=102200 ; 40 cyc sync not on
|
||||
HSF=002400 ; ptr has data
|
||||
HSN=102400 ; ptr has no data
|
||||
|
||||
; shift and rotate
|
||||
RAL=003000 ; rotate ac and link left
|
||||
RAR=003020 ; rotate ac and link right
|
||||
SAL=003040 ; shift ac and link left
|
||||
SAR=003060 ; shift ac and link right
|
||||
|
||||
; AUGMENTED CONTROL TRANSFER (ACT) INSTRUCTIONS
|
||||
; ACT-1 INSTRUCTIONS (SINGLE MEMORY CYCLE)
|
||||
IFE PDS4, DON=003100 ; turn on display
|
||||
IFN PDS4,[
|
||||
SWAP=003000 ; SWAP HALVES OF AC
|
||||
RDPC=003004 ; READ DP PC
|
||||
RDAX=003005 ; READ DP X AC
|
||||
RDAY=003006 ; READ DP Y AC
|
||||
|
||||
SBL=003010 ; SET BYTE LEFT
|
||||
SBR=003011 ; SET BYTE RIGHT
|
||||
|
||||
TAC=003024 ; TEST AC (SINGLE OR DOUBLE SKIP)
|
||||
DEA=003025 ; DECREMENT AC
|
||||
DACS=003030 ; DEPOSIT AC INTO STACK PTR N
|
||||
LACS=003032 ; LOAD STACK PTR N INTO AC
|
||||
POPD=003050 ; POP D-STACK INTO DISPLAY PC
|
||||
PUSHD=003051 ; PUSH DISPLAY PC ON D-STACK
|
||||
LAMP=003052 ; GIVE 150 MS FLASH OF KEYBOARD LAMP
|
||||
|
||||
; ACT-2 INSTRUCTIONS (2 MEMORY CYCLES)
|
||||
|
||||
PUSH=103000 ; PUSH AC ONTO STACK N
|
||||
PUSHA=103002 ; PUSH PC ONTO STACK N
|
||||
POP=103004 ; POP STACK N INTO AC
|
||||
POPA=103006 ; POP STACK N INTO PC
|
||||
LIAC=103010 ; LOAD AC VIA ADDRESS IN AC
|
||||
|
||||
; EXACT INSTRUCTIONS (OP CODE = 101000) USED WITH EXT. DEVICES
|
||||
]
|
||||
|
||||
; processor orders
|
||||
LAW=004000 ; load ac with
|
||||
LWC=104000 ; load ac with complement of
|
||||
JMP=010000 ; jump to
|
||||
SAD=014000 ; SKIP IF AC AND MEMORY DIFF.
|
||||
DAC=020000 ; deposit ac in memory
|
||||
XAM=024000 ; exchange ac and memory
|
||||
ISZ=030000 ; increment and skip if zero
|
||||
JMS=034000 ; jump to subroutine
|
||||
DCM=040000 ; decrement memory
|
||||
AND=044000 ; and ac with memory
|
||||
IOR=050000 ; inclusive or ac with memory
|
||||
XOR=054000 ; exclusive or ac with memory
|
||||
LAC=060000 ; load ac from memory
|
||||
ADD=064000 ; add memory to ac
|
||||
SUB=070000 ; subtract memory from ac
|
||||
SAM=074000 ; skip if ac and memory same
|
||||
|
||||
; INPUT-OUTPUT TRANSFER (iot) instructions
|
||||
IOT=001000 ; iot
|
||||
IFE PDS4,[
|
||||
DLZ=001001 ; load dpc with zero
|
||||
DLA=001003 ; load dpc with ac
|
||||
]
|
||||
.ELSE,[ DLA=001001 ; LOAD DPC WITH AC
|
||||
DON=001002 ; TURN DP ON
|
||||
DLN=001003 ; DLA & DON
|
||||
]
|
||||
TSC=001004 ; CLEAR TABLET STATUS
|
||||
CTB=001011 ; clear tty break
|
||||
DOF=001012 ; turn off display
|
||||
CSC=001014 ; cassette skip clock
|
||||
KRB=001021 ; keyboard read
|
||||
KCF=001022 ; keyboard clear flag
|
||||
KRC=001023 ; keyboard read and clear flag
|
||||
CSD=001024 ; cassette skip data
|
||||
RRB=001031 ; tty read
|
||||
RCF=001032 ; clear tty read flag
|
||||
RRC=001033 ; tty read and clear flag
|
||||
CWB=001034 ; cassette write bit
|
||||
TPR=001041 ; tty print
|
||||
TCF=001042 ; clear tty flag
|
||||
TPC=001043 ; tty print and clear
|
||||
TSK=001044 ; TABLET SKIP
|
||||
HRB=001051 ; read ptr
|
||||
HOF=001052 ; turn off ptr
|
||||
TRX=001054 ; READ TABLET X COORD.
|
||||
HON=001061 ; turn on ptr
|
||||
STB=001062 ; set tty break
|
||||
TRY=001064 ; READ TABLET Y COORD.
|
||||
SCF=001071 ; clear 40 cyc sync
|
||||
IOS=001072 ; iot sync
|
||||
TRZ=001074 ; READ TABLET Z COORD.
|
||||
RDI=001101 ? RI1=RDI ; read interrupt status WORD #1
|
||||
RI2=001102 ; READ INTERRUPT STATUS WORD #2
|
||||
HCS=001104 ; START HARD COPY
|
||||
MPS=001111 ; SET MEM. PROTECT BIT = AC(1)
|
||||
MPC=001112 ; CLEAR MEM. PROTECT STATUS
|
||||
ARM=001141 ? AR1=ARM ; arm interrupt WORD #1 PER AC
|
||||
AR2=001142 ; ARM INTERRUPT WORD #2 PER AC
|
||||
CON=001144 ; cassette on
|
||||
COF=001154 ; cassette off
|
||||
IOF=001161 ; turn off interrupt system (1)
|
||||
ION=001162 ; turn on interrupt system (1)
|
||||
LTF=001164 ; LOAD TRANS. FORMAT TO PSA
|
||||
LSS=001261 ; LOAD XMIT SPEED INTO PSA
|
||||
LSR=001262 ; LOAD REC. SPEED INTO PSA
|
||||
PPC=001271 ; punch and clear punch flag
|
||||
PSF=001274 ; skip if punch ready
|
||||
DCF=001304 ? DHC=DCF ; clear display refresh flag (DHLT)
|
||||
|
||||
; special DMCG imlac installation iot's
|
||||
|
||||
IFN MOUSE,[
|
||||
MRB=001701 ; or last mouse position into ac
|
||||
MRC=001703 ; or mouse co-ordinates into ac
|
||||
MCF=001702 ; make new reading of mouse position
|
||||
MSW=001731 ; read mouse and keyset switches
|
||||
]
|
||||
|
||||
IFE PDS4,BEL=001711 ; ring bell
|
||||
.ELSE,BEL=001321
|
||||
|
||||
|
||||
|
||||
SUBTTL IMLAC DISPLAY PROCESSOR OPCODES AND GRAPHICS MACROS
|
||||
; display instructions
|
||||
|
||||
DHLT=000000 ; halt display
|
||||
DHVH=002000 ; high voltage sync halt
|
||||
DOPR=004000 ; display operate class
|
||||
DNOP=004000 ; display no operation
|
||||
DADR=004001 ; enter 8k display address mode
|
||||
DDSP=004020 ; display single point
|
||||
DRJM=004040 ; return from display subroutine
|
||||
DDYM=004100 ; decrement y msb
|
||||
DDXM=004200 ; decrement x msb
|
||||
DIYM=004400 ; increment y msb
|
||||
DIXM=005000 ; increment x msb
|
||||
DHVC=006000 ; high voltage sync
|
||||
DHVS=006004 ; combination of DHVC and DSTS
|
||||
|
||||
DEIM=030000 ; enter increment mode
|
||||
|
||||
.DSTS==4004 ; SET SCALE
|
||||
.DSTB==4010 ; SET BLOCK
|
||||
.DLXA==010000 ; load x ac
|
||||
.DLYA==020000 ; load y ac
|
||||
.DJMS==050000 ; display subroutine jump
|
||||
.DJMP==060000 ; display jump
|
||||
|
||||
IRP .DOP,,[DLXA,DLYA,DJMS,DJMP]
|
||||
DEFINE .DOP (.DARG)
|
||||
.!.DOP!\<<.DARG>&7777>\<<<.DARG>_3>&100000&<<.ADDR.>_15.>> TERMIN
|
||||
TERMIN
|
||||
|
||||
DVIC=077720 ; DISPLAY VARIABLE INTENSITY
|
||||
; MAX INTENSITY = 17 = 15.
|
||||
|
||||
; suppressed grid
|
||||
DSGR=077770
|
||||
DGR=077770 ; suppressed grid
|
||||
DGX=077770 ; exit from suppressed grid mode
|
||||
DGD=077771 ; suppressed grid dim
|
||||
DGDR=077773 ; suppressed grid dim and return
|
||||
DGB=077775 ; suppressed grid bright
|
||||
DGBR=077777 ; suppressed grid bright and return
|
||||
|
||||
; DISPLAY SET SCALE AND SET BLOCK MACROS
|
||||
|
||||
IRP .DOP,,[DSTS,DSTB]
|
||||
DEFINE .DOP (ARG)
|
||||
..DST==.!.DOP!\<<ARG>&3> ? IFG <ARG>-3,[..DST==..DST\2000] ? ..DST TERMIN
|
||||
TERMIN
|
||||
|
||||
|
||||
; special hacks for SVM (INC) mode bytes
|
||||
|
||||
INC==0 ;DUMMY FOR OP CODE FIELD
|
||||
E==60 ; ENTER SVM
|
||||
N==111 ; ESCAPE SVM, SET X AND Y LSB'S -> 0
|
||||
X=140 ; EXIT SVM, RJMP
|
||||
R==151 ; X, ALSO X LSB -> 0
|
||||
F==171 ; R, ALSO INCR. X MSB
|
||||
P==200 ; SVM NOP
|
||||
T==100 ; ESCAPE SVM
|
||||
|
||||
;DEFINE SYMBOLS LIKE B3M2==336
|
||||
|
||||
IRPC BD,,[BD]H,,[32]
|
||||
IRP XINC,,[0,1,2,3,M1,M2,M3]TINC,,[0,1,2,3,5,6,7]
|
||||
IRP YINC,,[0,1,2,3,M1,M2,M3]UINC,,[0,1,2,3,5,6,7]
|
||||
BD!!XINC!!YINC==H!!TINC!!UINC
|
||||
TERMIN
|
||||
TERMIN
|
||||
TERMIN
|
||||
;DISPLAY VECTOR MACROS FOR THE PDS-4
|
||||
|
||||
IFN PDS4,[
|
||||
|
||||
;LONG VECTOR TYPE BIT CODES
|
||||
|
||||
B==1 ? D==0 ;BEAM ON OR "DIM"=OFF
|
||||
DOT==2 ;DOTTED LINE
|
||||
DASH==4
|
||||
DD==DOT\DASH ;DOTTED & DASHED LINE
|
||||
.DLV==40000 ;DISPLAY LONG VECTOR OP CODE
|
||||
LVSIGN==2000 ;LONG VECTOR SIGN BIT
|
||||
LVYGTX==4000 ;LONG VECTOR Y > X BIT
|
||||
|
||||
;DISPLAY LONG VECTOR MACRO
|
||||
|
||||
DEFINE DLV TYPE,XARG,YARG
|
||||
IRP C,,[X,Y]ARG,,[XARG,YARG]
|
||||
IFL ARG,[ ..M!C==-ARG&1777
|
||||
..S!C==LVSIGN]
|
||||
.ELSE [ ..M!C==ARG&1777
|
||||
..S!C==0]
|
||||
TERMIN
|
||||
IFL ..MX-..MY,[
|
||||
.DLV\..SY\..MY
|
||||
<TYPE_12.>\LVYGTX\..SX\..MX]
|
||||
.ELSE [ .DLV\..SX\..MX
|
||||
..TEMP==<TYPE_12.>\..SY\..MY
|
||||
IFE ..TEMP,[LVSIGN]
|
||||
.ELSE [..TEMP]]
|
||||
TERMIN
|
||||
|
||||
;DISPLAY LONG VECTOR & RETURN JUMP
|
||||
;(JUST TURNS ON R BIT IN 2ND WORD OF INSTRUCTION)
|
||||
|
||||
DEFINE DLVR TYPE,XARG,YARG
|
||||
DLV <TYPE+10>,XARG,YARG
|
||||
TERMIN
|
||||
|
||||
; MEDIUM VECTOR MODE MACROS
|
||||
|
||||
.MVM==44000 ;ENTER MED. VECTOR MODE OP CODE
|
||||
MVYGTX==200 ;MED. VECTOR Y > X BIT
|
||||
MVSIGN==100 ;MED. VECTOR SIGN BIT
|
||||
|
||||
;ENTER MEDIUM VECTOR MODE
|
||||
|
||||
DEFINE MVM TYPE,SCALE
|
||||
.MVM\<TYPE_4>\SCALE
|
||||
TERMIN
|
||||
|
||||
;MEDIUM VECTOR BYTE DESCRIPTOR
|
||||
;EXIT NONNULL INDICATES EXIT FROM MED. VECTOR MODE
|
||||
|
||||
DEFINE MV XARG,YARG,EXIT
|
||||
IFSN EXIT,,XIT==100000 ? .ELSE XIT==0
|
||||
IRP C,,[X,Y]ARG,,[XARG,YARG]
|
||||
IFL ARG,[ ..M!C==-ARG&77
|
||||
..S!C==MVSIGN]
|
||||
.ELSE [ ..M!C==ARG&77
|
||||
..S!C==0]
|
||||
TERMIN
|
||||
IFL ..MX-..MY,XIT\<<..SY\..MY>_8.>\MVYGTX\..SX\..MX
|
||||
.ELSE XIT\<<..SX\..MX>_8.>\..SY\..MY
|
||||
TERMIN
|
||||
|
||||
;DISPLAY ADD RELATIVE MACROS (DARX, DARY)
|
||||
|
||||
.DAR==076000 ;DISPLAY ADD RELATIVE OP CODE
|
||||
|
||||
IRP C,,[X,Y]N,,[0,400]
|
||||
DEFINE DAR!C DIST
|
||||
IFL DIST,[..SDIST==200 ? ..DIST==-DIST&177]
|
||||
.ELSE [..SDIST==0 ? ..DIST==DIST&177]
|
||||
.DAR\N\..SDIST\..DIST
|
||||
TERMIN
|
||||
TERMIN
|
||||
|
||||
;OTHER DISPLAY OP CODES FOR THE PDS-4
|
||||
|
||||
.DCAM=077621 ;DISPLAY ENTER COMPACT ADDRESS MODE
|
||||
; BASE IS ADDRESS OF DISPATCH TABLE FOR DCAM
|
||||
DEFINE DCAM BASE
|
||||
.DCAM
|
||||
BASE&MAXADR
|
||||
TERMIN
|
||||
|
||||
DBLI=077622 ;DISPLAY BLINK, CALL WITH ARG "B" FOR BLINK
|
||||
DROR=077640 ;DISPLAY ROTATE/REFLECT CHAR
|
||||
DROT=077640 ; DISPLAY ROTATE (NO REFLECTION)
|
||||
DROF=077642 ; DISPLAY ROTATE AND REFLECT
|
||||
ROR=10 ; ROT 90 DEG. RIGHT
|
||||
ROL=4 ; ROT 90 DEG. LEFT
|
||||
ROZ=0 ; RESET ROT TO 0 DEG.
|
||||
RON=14 ; NO ROTATION CHANGE
|
||||
;E.G. DROF ROR ;ROTATE RIGHT 90 DEG. AND REFLECT ABOUT Y AXIS
|
||||
|
||||
; SUPPRESSED GRID AUTO INCREMENT MODE MACRO
|
||||
|
||||
.DASG=077660 ; OP CODE
|
||||
|
||||
IRP .DOP,,[DASG,DASGN]N,,[10,0]
|
||||
DEFINE .DOP DIST
|
||||
IFL DIST,[..SDIST==4 ? ..DIST==-DIST&3]
|
||||
.ELSE [..SDIST==0 ? ..DIST=DIST&3]
|
||||
.DASG\N\..SDIST\..DIST
|
||||
TERMIN
|
||||
TERMIN
|
||||
|
||||
; POINT PLOT MODE OPTION
|
||||
|
||||
EPPM=016000 ; ENTER POINT PLOT MODE
|
||||
PPM==0 ; POINT PLOT BYTE
|
||||
XIT==115
|
||||
D0==200
|
||||
D1==201
|
||||
D2==202
|
||||
D3==203
|
||||
B0==330
|
||||
B1==331
|
||||
B2==332
|
||||
B3==333
|
||||
|
||||
DEFINE PPMSTR
|
||||
INC E,P
|
||||
INC P,115
|
||||
TERMIN
|
||||
|
||||
DEFINE PPMCR
|
||||
PPM D0,XIT
|
||||
INC P,P
|
||||
INC DM31,114
|
||||
TERMIN
|
||||
|
||||
DEFINE PPMXIT
|
||||
PPM D0,XIT
|
||||
INC D0M3,D0M3
|
||||
INC D0M3,D0M3
|
||||
INC D0M3,D0M1
|
||||
INC F,P
|
||||
TERMIN
|
||||
]
|
||||
; long vector mode macro FOR THE PDS-1
|
||||
|
||||
IFE PDS4,[
|
||||
; DLV B|D|X,<x-increment>,<y-increment>
|
||||
|
||||
; where B -> bright beam
|
||||
; D -> dim beam (beam off)
|
||||
; X -> dotted beam (dotted line)
|
||||
|
||||
; and where x and y are < 10000
|
||||
|
||||
DEFINE DLV BXD,XX,YY
|
||||
|
||||
..MX=XX
|
||||
..MY=YY
|
||||
W2=0
|
||||
W3=0
|
||||
|
||||
IFSE BXD,B,[W2=2_12.]
|
||||
IFSE BXD,X,[W2=6_12.]
|
||||
|
||||
IFL ..MX,[
|
||||
..MX=-..MX
|
||||
W3=W3\<4_12.>]
|
||||
|
||||
IFL ..MY,[
|
||||
..MY=-..MY
|
||||
W3=W3\<2_12.>]
|
||||
|
||||
..DXY=..MX-..MY
|
||||
|
||||
IFL ..DXY,[
|
||||
W3=W3\<1_12.>
|
||||
|
||||
<4_12.>\<7777&..DXY>
|
||||
<W2\<7777&..MY>>
|
||||
<W3\<7777&..MX>>]
|
||||
|
||||
IFGE ..DXY,[
|
||||
..DXY=-..DXY
|
||||
<<4_12.>\<7777&..DXY>>
|
||||
<W2\<7777&..MX>>
|
||||
<W3\<7777&..MY>>]
|
||||
|
||||
TERMIN
|
||||
]
|
||||
|
||||
SUBTTL MISC MACROS
|
||||
; IMASCI [This is a string.]
|
||||
; produces 9 imlac words
|
||||
; each word:
|
||||
; |0xxxxxxx|0xxxxxxx|
|
||||
; so each character is actually 8-bits.
|
||||
; It ends with a word whose second char is 0 or a full word of 0
|
||||
|
||||
DEFINE IMASCI STG
|
||||
|
||||
CNT1=0 ; temporaries
|
||||
CCNT==0
|
||||
CWRD==0
|
||||
|
||||
; loop through characters in string
|
||||
IRPC C,,[STG]
|
||||
IFE CNT1,[
|
||||
CWRD=="C_8. ; first character left shifts 8 bits
|
||||
CCNT==1]
|
||||
IFN CNT1,[
|
||||
CWRD\"C ; second character ORed in left shifted 1 bit
|
||||
CCNT==0]
|
||||
CNT1==CCNT
|
||||
TERMIN
|
||||
|
||||
IFE CCNT,0 ; if last word has two chars, make 0 word
|
||||
IFN CCNT,CWRD ; if last word has character, put it out
|
||||
|
||||
TERMIN
|
||||
|
||||
; DTXT macro
|
||||
; creates subroutine calls to subroutines with
|
||||
; standard names Dxxx where xxx is ascii code of letter
|
||||
DEFINE ASCJMS ASC,\L
|
||||
L=.LENGTH /ASC/
|
||||
IFE <L-1>, DJMS D00!ASC
|
||||
IFE <L-2>, DJMS D0!ASC
|
||||
IFE <L-3>, DJMS D!ASC
|
||||
TERMIN
|
||||
|
||||
DEFINE DTXT QQ
|
||||
IRPC Q,,[QQ]
|
||||
ASCJMS \"Q
|
||||
TERMIN
|
||||
; END OF DTXT MACRO
|
||||
TERMIN
|
||||
|
||||
; DNAME macro. Equivalent to DTXT of FNAM1.FNAM2
|
||||
|
||||
DEFINE DNAME
|
||||
DSIXBT .FNAM1
|
||||
DTXT [.]
|
||||
DSIXBT .FNAM2
|
||||
; END OF DNAME MACRO
|
||||
TERMIN
|
||||
|
||||
DEFINE DSIXBT ..VER
|
||||
IRP ..SFT,,[-30.,-24.,-18.,-12.,-6,0]
|
||||
Q=40+<..VER_..SFT>&77
|
||||
IFN <Q-40>, ASCJMS \Q
|
||||
TERMIN
|
||||
TERMIN
|
||||
|
||||
; CALL macro
|
||||
DEFINE CALL ROUT,ARGS
|
||||
JMS ROUT
|
||||
IRP ARG,,[ARGS]
|
||||
ARG
|
||||
TERMIN
|
||||
; END OF CALL MACRO
|
||||
TERMIN
|
||||
|
||||
; "END OF IMDEFS"
|
||||
.LSTON
|
||||
Reference in New Issue
Block a user