#include "e.h"

 exa .1			; global Pascal variables
 exp $PROC
 exp $PROC1
 exp $PROC2
 exp $PROC3
 exp $PROCH
 exp $CLPASC1
 exp $CLPASC2
 exp $CLPASC5
 exp $CLRDSTR
 exp $CL68
 exp $FUNC68
 exp $CALLPASC

 pro $PROC,0
 LFL SZADDR+SZADDR	; load environment, static link for procedure
 LFL SZADDR		; load address of code
 ret SZPROC
 end 0

 pro $PROC1,0
 LFL SZADDR+SZADDR
 LFL SZADDR
 ret SZPROC
 end 0

 pro $PROC2,0
 LFL SZADDR+SZADDR
 LFL SZADDR
 ret SZPROC
 end 0

 pro $PROC3,0
 LFL SZADDR+SZADDR
 LFL SZADDR
 ret SZPROC
 end 0

 pro $PROCH,0
 LFL SZADDR+SZADDR
 LFL SZADDR
 ret SZPROC
 end 0

 pro $CLPASC1,SZWORD
 loc PASCALSTAMP
 stl -SZWORD
 lal SZADDR				; load base address of params (source)
 loc SZADDR+SZPROC
 los SZWORD
 cai
 ret 0
 end SZWORD

 pro $CLPASC2,SZWORD
 loc PASCALSTAMP
 stl -SZWORD				; set frame stamp as pascal
 lal SZADDR				; load base address of params (source)
 loc SZADDR+SZADDR+SZPROC
 los SZWORD
 cai					; call proc, params & static link set
 ret 0
 end SZWORD

#define P5PARAMSPACE SZADDR+SZADDR+SZWORD+SZWORD+SZADDR+SZPROC

 pro $CLPASC5,SZWORD
 loc PASCALSTAMP
 stl -SZWORD				; set frame stamp as pascal
 lal SZADDR				; load base address of params (source)
 loc P5PARAMSPACE
 los SZWORD
 cai
 ret 0
 end SZWORD

#define PRDSTRSPACE SZADDR+SZADDR+16+SZADDR+SZADDR+SZPROC

 pro $CLRDSTR,SZWORD
 loc PASCALSTAMP
 stl -SZWORD				; set frame stamp as pascal
 lal SZADDR				; load base address of params (source)
 loc PRDSTRSPACE
 los SZWORD
 cai
 ret 0
 end SZWORD

 pro $CL68,SZWORD
 loc PASCALSTAMP
 stl -SZWORD
 LFL SZADDR				; OBJECTP parameter
 LLC 0					; bitpattern
 loc 1					; locrg
 LFL SZADDR+SZADDR+SZADDR		; procbl
 dup SZADDR
 LFL SZADDR+SZADDR			; env
 exg SZADDR
 loi SZADDR				; XBASE
 cai
 ret 0
 end SZWORD

 pro $FUNC68,SZWORD
 loc PASCALSTAMP
 stl -SZWORD
 LFL SZADDR				; OBJECTP parameter
 LLC 0					; bitpattern
 loc 1					; locrg
 LFL SZADDR+SZADDR+SZADDR		; procbl
 dup SZADDR
 LFL SZADDR+SZADDR			; env
 exg SZADDR
 loi SZADDR				; XBASE
 cai
 ret SZWORD
 end SZWORD


 pro $CALLPASC,SZWORD ; +SZADDR+SZWORD
 loc PASCALSTAMP
 stl -SZWORD
 lal SZADDR+SZADDR+SZWORD+SZLONG        ; address of first (A68) parameter
 loe .1+SZWORD+SZADDR			; PASCPARAMS
 los SZWORD
 lae .1+SZWORD+SZADDR+SZWORD		; address of PASCPROC
 loi SZPROC				; PASCPROC
 cai
 ret 0
 end SZWORD ; +SZADDR+SZWORD