	.ENABL	LC
	.ENABL	GBL
	$NASM = 0	; Счетчик ассемблерных модулей
	$NCOD = 0	; Счетчик модулей в Р-коде
	ISASM = 1
	FALSE = 0
	TRUE  = 1

	BYTE.	= 0
	WORD.	= 1
	ASCIZ.	= 2
	BYTE2.	= 3
	VAR.	= 4
	.GLOBL	ENTRY, GETW
				; Программные секции для :

	.PSECT	...ASM,D
	.PSECT	TABASM,D	; -- таблицы ссылок на MACRO модули 
	.PSECT	...COD,D
	.PSECT	TABCOD,D	; -- таблицы ссылок на P-модули
	.PSECT	$KERN$,SAV,I	; -- резидентного ядра интерпретатора
	.PSECT	.ASM,I		; -- MACRO модулей для поддержки Р-кода
	.PSECT	.PROG,I		; -- программы пользователя на МАСRО
	.PSECT	.COD,D		; -- подпрограмм в Р-коде
	.PSECT	.DATA
	.PSECT	.strn

;-------------------------------------
.MACRO	.DW	WRD
	.BYTE	WRD & 377, <WRD/400> & 377
.ENDM
;-------------------------------------
.MACRO	..GM$$	MNAME,NTAB,TAB,TPAR
	.GLOBL	$'MNAME
.IIF	NDF,..LIB	$'MNAME = TAB
	.MACRO	MNAME PAR
	.BYTE	$'MNAME
.IF	NB	<PAR>
.IF	B	TPAR
	PAR
.IFF
.IIF	EQ	TPAR-BYTE.	.BYTE	PAR
.IIF	EQ	TPAR-BYTE2.	.BYTE	PAR*2
.IIF	EQ	TPAR-VAR.	.BYTE	PAR-..VAR
.IIF	EQ	TPAR-WORD.	.DW	PAR
.IIF	EQ	TPAR-ASCIZ.	.ASCII	`PAR`<200>
.ENDC
.ENDC
	.ENDM
.IIF	LT	TAB-200 ISASM = FALSE
.IIF	GE	TAB-200 ISASM = TRUE
	NTAB = NTAB + 1
.IIF	GT <NTAB-177>	.ERROR ; NTAB - Table owerflow
.ENDM
;-------------------------------------
.MACRO	..DF$$	MNAME, COD, LIB, TPAR
.IIF	DF	..L$$	.TITLE	MNAME
	.SAVE
.IF	NE	COD
	.PSECT	TABCOD
.IFF
	.PSECT	TABASM
.IFTF
	.GLOBL	MNAME
.IIF	NDF, ..LIB	.WORD	MNAME
.IFT
	.PSECT	.COD
.IFF
	.PSECT	.ASM
.ENDC

.IIF	EQ	LIB	MNAME:
.IF	NE	COD
	..GM$$	MNAME,$NCOD,\$NCOD,TPAR
.IFF
	..GM$$	MNAME,$NASM,\<$NASM ! 200>,TPAR
.ENDC
.ENDM
;-------------------------------------
.MACRO	.ASM	MNAME, TPAR
	..DF$$	MNAME, FALSE, FALSE, TPAR
.ENDM
;-------------------------------------
.MACRO	.LASM	MNAME, TPAR
	..DF$$	MNAME, FALSE, TRUE, TPAR
	.RESTORE
.ENDM
;-------------------------------------
.MACRO	.COD	MNAME, TPAR
	..DF$$	MNAME, TRUE, FALSE, TPAR
.ENDM
;-------------------------------------
.MACRO	.LCOD	MNAME, TPAR
	..DF$$	MNAME, TRUE, TRUE, TPAR
	.RESTORE
.ENDM
;-------------------------------------
.MACRO	.FORTH	?LABEL
.IF	DF	$DBG
	MOV	R5,-(SP)
	MOV	#LABEL,R5
	JMP	ENTRY
LABEL:
.IFF
	IOT
.ENDC
.ENDM
;-------------------------------------
.MACRO	END.
.IF	EQ	ISASM
	RET
.IFF	
	JMP	(R4)
.ENDC	
	.RESTORE
	ISASM	= TRUE
.ENDM
;-------------------------------------
.MACRO	CHAR	VNAME,value=0
	.SAVE
	.PSECT	.DATA
.IIF	NDF	..VAR	..VAR::
.iif	nb	<vname>	vname::	
	.byte	value
	.RESTORE
.ENDM
;-------------------------------------
.IF	NDF	..QF$$
	.LASM	RET
	.LASM	QUIT
.MACRO	.QUIT
	QUIT
	.EVEN
.ENDM
.ENDC
;-------------------------------------
.MACRO	INIT	SIZE
	
	.SAVE
	.PSECT	.DATA
MEMTOP ==:.+2
.LIMIT
	.RESTORE
	MOV	#SIZE,R0
	ADD	MEMTOP,R0
	EMT	354
	MOV	R0,R3
.ENDM

;-------------------------------------
	.PSECT	.PROG

                                                                                                                                                        