1
0
mirror of https://github.com/PDP-10/its.git synced 2026-03-22 09:03:20 +00:00
Files
PDP-10.its/c20/nm.mid
2018-05-15 07:06:17 +02:00

167 lines
2.1 KiB
Plaintext

; <C>NM.MID
; This file provides useful macros for hand-coded MIDAS programs designed
; to be loaded with C programs.
CL=PUSHJ P,
RTN=POPJ P,
.VCALL=2_33
.ACALL=3_33
.XCALL=4_33
DEFINE SYSCAL NAME,ARGS,DUMMY,LABEL
SETZ A,
.CALL [SETZ
.1STWD SIXBIT /NAME/
ARGS
403000,,A
]
IFSN [LABEL][]GO LABEL
IFSE [LABEL][]MOVN A,A
TERMIN
DEFINE INFORM A,B
IF1,[PRINTX \ A = B
\]
TERMIN
; SUPPORT ROUTINES
DEFINE %LEN [LIST]
%COUNT==0
IRP ELEM,,LIST
%COUNT==%COUNT+1
TERMIN
TERMIN
DEFINE DEFVAR NAME,#OFFSET
DEFINE NAME
<OFFSET-%P>&262143.(P)TERMIN
TERMIN
; DEFINE C-CALLABLE PROCEDURE (C NAME)
DEFINE CENTRY NAME,[ARGS],[VARS]
PROLOG Z!NAME,NAME,ARGS,VARS
TERMIN
; DEFINE C-CALLABLE PROCEDURE (MIDAS NAME)
DEFINE MENTRY NAME,[ARGS],[VARS]
PROLOG NAME,NAME,ARGS,VARS
TERMIN
; DEFINE MIDAS ENTRY POINT (NOT PROCEDURE)
DEFINE IENTRY NAME
NAME": TERMIN
; PROLOG MACRO
DEFINE PROLOG MNAME,PNAME,[ARGS],[VARS]
%LEN ARGS
%A==%COUNT
%LEN VARS
%V==%COUNT
%OFF== -<%A+%V>
IRP ARGNAM,,ARGS
DEFVAR ARGNAM,%OFF
%OFF==%OFF+1
TERMIN
%OFF==%OFF+1
IRP VARNAM,,VARS
DEFVAR VARNAM,%OFF
%OFF==%OFF+1
TERMIN
%A,,[ASCIZ/PNAME/]
MNAME": IFN %V,[ADDI P,%V]
TERMIN
; DEFINE SYNONYM FOR C-CALLABLE ENTRY POINT
DEFINE XENTRY NEWNAME,OLDNAME
Z!NEWNAME"=Z!OLDNAME"
TERMIN
; DEFINE MIDAS-ACCESSIBLE DATA
DEFINE MDATA NAME
NAME":TERMIN
; FATAL ERROR
DEFINE CROAK STRING/
PUSH P,[
HRROI 1,[ASCIZ \; STRING \]
PSOUT
HALTF
]
TERMIN
; RETURN STATEMENT
DEFINE RETURN
IFE %A,[
IFN %V,[SUBI P,%V]
POPJ P,
]
IFN %A,[
SUBI P,%V+%A+1
JRST @<%A+1>(P)
]
TERMIN
; CALL STATEMENT
DEFINE CALL NAME,[ARGS]
NN==0
IRP ARG,,ARGS
PPUSH ARG
NN==NN+1
TERMIN
ICALL NN,NAME
TERMIN
; MIDAS-CALL STATEMENT
DEFINE MCALL NAME,[ARGS]
NN==0
IRP ARG,,ARGS
PPUSH ARG
NN==NN+1
TERMIN
CCALL NN,NAME"
TERMIN
; VARIABLE-CALL STATEMENT
DEFINE VCALL F,[ARGS]
NN==0
IRP ARG,,ARGS
PPUSH ARG
NN==NN+1
TERMIN
CCALL NN,F
TERMIN
; INTERNAL CALL
DEFINE ICALL N,NAME
CCALL N,Z!NAME"
TERMIN
; HACK FOR CONSTANTS
EQUALS NM%EN END
EXPUNGE END
DEFINE END ENDLOC
.CODE
; INSCODE
.PDATA
CONSTANTS
NM%EN ENDLOC
TERMIN
.CODE